YOLO-v3论文详解

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

文章目录

    • YOLO-v3论文详解-- 潘登同学的目标检测笔记
  • 继承YOLO-9000与技术改进
  • YOLO-v3试了但没成功

继承YOLO-9000与技术改进

  1. Bounding Box Prediction计算方法与YOLO-9000
    b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) = σ ( t o ) 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) \\ bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phethPr(object)IOU(b,object)=σ(to)
    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值前面的 1 o b j \mathbb{1}^{obj} 1obj也是通过预测框与GT的IOU是否大于阈值来得到的…
  2. Class Predicition: 在对每个Bounding Box进行多标签分类的时候,不再用softmax(因为YOLO9000是用类似于层次softmax的形式来分类的),而是用多个二分类器
  3. Predictions Across Scales: 借鉴了FPN(特征金字塔,主要是针对图像中目标的多尺度的这个特点提出的),重点是理解上采样的过程(pooling池化是下采样,将图片缩小)而上采样就是将图片放大,越小的物体对应越小的目标框,对应更小的感受野在大的feature map上更好打框;
    YOLO-v3论文详解_第1张图片
    YOLO-v3则是借鉴的FPN主要有三种scale,如果目标很大的话,则用predict one;如果目标很小的话,则用predict three;适中的则用predict two;所以对应最终的输出会有三种形状 N ∗ N ∗ 9 ∗ ( 5 + 80 ) N*N*9*(5+80) NN9(5+80),(N=13,26,52;有9个框,每三个框对应一种scale,大框N=13,小框N=52)$,往往是小物体比较难预测,所以小物体不仅用了大的feature map也用了小的feature map进行融合考虑了更大的感受野(或者说周围环境)来对小物体做更好的预测
    YOLO-v3论文详解_第2张图片
  4. DrakNet-53 上图就是DrakNet-53,其中的Residual表示的是残差网络的残差单元,以第一个框框住的部分举例,其内部结构为
    YOLO-v3论文详解_第3张图片

YOLO-v3试了但没成功

  1. Anchor box x, y offset predictions: 尝试用linear activation去对x,y直接预测发现不太行,于是用了sigmoid
  2. Focal loss: focal loss是最初由何恺明提出的,最初用于图像领域解决数据不平衡造成的模型性能问题。对于二分类问题,损失函数可以写为
    L = 1 N ( − m log ⁡ p ^ − n log ⁡ ( 1 − p ^ ) ) L = \frac{1}{N}(-m\log{\hat{p}}-n\log{(1-\hat{p}})) L=N1(mlogp^nlog(1p^))
    其中m为正样本个数,n为负样本个数,N为样本总数; 当样本分布失衡时,在损失函数L的分布也会发生倾斜,如 m < < n m<m<<n时,负样本就会在损失函数占据主导地位。由于损失函数的倾斜,模型训练过程中会倾向于样本多的类别,造成模型对少样本类别的性能较差。基于样本非平衡造成的损失函数倾斜,一个直观的做法就是在损失函数中添加权重因子,提高少数类别在损失函数中的权重,平衡损失函数的分布, 平衡交叉熵函数
    L = 1 N ( − m N log ⁡ p ^ − n N log ⁡ ( 1 − p ^ ) ) L = \frac{1}{N}(-\frac{m}{N}\log{\hat{p}}-\frac{n}{N}\log{(1-\hat{p}})) L=N1(Nmlogp^Nnlog(1p^))
    focal loss也是针对样本不均衡问题,从loss角度提供的另外一种解决方法。
    L f l = { − ( 1 − p ^ ) γ log ⁡ ( p ^ ) , if  y = 1 − p ^ γ log ⁡ ( 1 − p ^ ) , if  y = 0 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} Lfl={(1p^)γlog(p^),p^γlog(1p^),if y=1if y=0
    p ^ \hat{p} p^ 反映了与ground truth即类别y的接近程度, p ^ \hat{p} p^ 越大说明越接近类别y,即分类越准确。
    p ^ \hat{p} p^ 也反应了分类的难易程度, p ^ \hat{p} p^ 越大,说明分类的置信度越高,代表样本越易分; p ^ \hat{p} p^ 越小,分类的置信度越低,代表样本越难分。因此focal loss相当于增加了难分样本在损失函数的权重,使得损失函数倾向于难分的样本,有助于提高难分样本的准确度。focal loss与交叉熵的对比,可见下图:
    YOLO-v3论文详解_第4张图片

    [外链图片转存中…(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的作为阈值;

你可能感兴趣的:(Tensorflow,目标检测,深度学习)