YOLO-v3论文详解

作者: pdnbplus | 发布时间: 2024/06/18 | 阅读量: 230

YOLO-v3论文详解-- 潘登同学的目标检测笔记

继承YOLO-9000与技术改进

  1. Bounding Box Prediction计算方法与YOLO-9000 $$ b_x = \sigma(t_x) + c_x \ b_y = \sigma(t_y) + c_y \ b_w = p_we^{t_w} \ b_h = p_he^{t_h} \ Pr(object) * IOU(b,object) = \sigma(t_o) \ $$ 当Bounding Box Prior(Anchor Box)与Gt的IOU最大,且大于threshold(0.5)那么就将其设定为正例, 用logistic regression来计算Bounding Box的score; 如果不是正例的Bounding Box Prior就不会去计算位置loss,也不会有分类loss;这一点就是从YOLO-v1改进过来的,因为YOLO-v1中的loss值前面的$\mathbb{1}^{obj}$也是通过预测框与GT的IOU是否大于阈值来得到的...
  2. Class Predicition: 在对每个Bounding Box进行多标签分类的时候,不再用softmax(因为YOLO9000是用类似于层次softmax的形式来分类的),而是用多个二分类器
  3. Predictions Across Scales: 借鉴了FPN(特征金字塔,主要是针对图像中目标的多尺度的这个特点提出的),重点是理解上采样的过程(pooling池化是下采样,将图片缩小)而上采样就是将图片放大,越小的物体对应越小的目标框,对应更小的感受野在大的feature map上更好打框; YOLO-v3则是借鉴的FPN主要有三种scale,如果目标很大的话,则用predict one;如果目标很小的话,则用predict three;适中的则用predict two;所以对应最终的输出会有三种形状$NN9*(5+80)$,(N=13,26,52;有9个框,每三个框对应一种scale,大框N=13,小框N=52)$,往往是小物体比较难预测,所以小物体不仅用了大的feature map也用了小的feature map进行融合考虑了更大的感受野(或者说周围环境)来对小物体做更好的预测
  4. DrakNet-53 上图就是DrakNet-53,其中的Residual表示的是残差网络的残差单元,以第一个框框住的部分举例,其内部结构为 在这里插入图片描述

YOLO-v3试了但没成功

  1. Anchor box x, y offset predictions: 尝试用linear activation去对x,y直接预测发现不太行,于是用了sigmoid
  2. Focal loss: focal loss是最初由何恺明提出的,最初用于图像领域解决数据不平衡造成的模型性能问题。对于二分类问题,损失函数可以写为 $$ L = \frac{1}{N}(-m\log{\hat{p}}-n\log{(1-\hat{p}})) $$ 其中m为正样本个数,n为负样本个数,N为样本总数; 当样本分布失衡时,在损失函数L的分布也会发生倾斜,如$m<平衡交叉熵函数 $$ L = \frac{1}{N}(-\frac{m}{N}\log{\hat{p}}-\frac{n}{N}\log{(1-\hat{p}})) $$ focal loss也是针对样本不均衡问题,从loss角度提供的另外一种解决方法。 $$ L_{fl} = \begin{cases} -(1-\hat{p})^{\gamma}\log(\hat{p}), & \text{if }y=1 \ -\hat{p}^{\gamma}\log(1-\hat{p}), & \text{if }y=0 \end{cases} $$ $\hat{p}$ 反映了与ground truth即类别y的接近程度,$\hat{p}$ 越大说明越接近类别y,即分类越准确。 $\hat{p}$ 也反应了分类的难易程度, $\hat{p}$ 越大,说明分类的置信度越高,代表样本越易分; $\hat{p}$ 越小,分类的置信度越低,代表样本越难分。因此focal loss相当于增加了难分样本在损失函数的权重,使得损失函数倾向于难分的样本,有助于提高难分样本的准确度。focal loss与交叉熵的对比,可见下图: : [外链图片转存中...(img-woSlzOgV-1651021785427)]
  3. Dual IOU thresholds and truth assignment: 借鉴Faster R-CNN的做法,0.7以上的为正例,0.3-0.7的忽略,0.3以下的为负例,发现效果不好;YOLO还是用的与GT最大且超过0.5的作为阈值;