论文笔记:YOLOv3: An Incremental Improvement

Yolov3论文链接:https://pjreddie.com/media/files/papers/YOLOv3.pdf

中心思想

  • 在原有的YOLO基础上加上一系列的细节改进从而使性能得到提升

相关改进:

  1. bbox的编码(转换):和YOLOv2采用相同的label坐标encode的方式如下,其中(bx,by,bw,bh)(b_x, b_y, b_w, b_h)分别是bbox的中心点以及宽高。

    • bx=σ(tx)+cxb_x = \sigma(t_x) + c_x,这里的cxc_x表示输出Feature Map的坐标(最终网络的回归量,是以这个坐标点为基础的一个偏移量),σ()\sigma(\cdot)表示的是sigmoid函数,意味着σ(tx)\sigma(t_x)的结果在(0,1)(0,1)之间,σ(tx)+cx\sigma(t_x) + c_x的范围也就在[cx,cx+1)[c_x, c_x+1)之间。需要注意的是这里的[cx,cx+1)[c_x, c_x+1)是在特定的尺度下的(比如1/8尺度),那最终的BBox坐标其实是在bxb_x基础上乘以8,得到最终的取值范围[cxscale,(cx+1)scale)[c_x * scale, (c_x+1) * scale)
    • by=σ(ty)+cyb_y = \sigma(t_y) + c_y,原理同上
    • bw=pwetwb_w = p_w e^{t_w},这里的pwp_w表示anchor的宽高,需要注意的是这里只有bbox的宽高计算的时候用到了anchor值
    • bh=phethb_h = p_h e^{t_h},原理同上
    • 图例:论文笔记:YOLOv3: An Incremental Improvement
  2. GT和Anchor的匹配:每个GT和Anchor进行匹配,IOU最高的anchor被分配成正样本,否则按照一个阈值ignore_threshold进行分配。如果GT和Anchor的IOU大于ignore_threshold,则将该anchor分配成ignore样本,否则会被分配成负样本。这样做的话一个GT只会被分配到一个anchor上

  3. 分类Label的编码(转换)

    1. 和一些检测方法采用one-hot或者vinilla的方式进行编码做多分类的方式不同,YOLOv3将多分类的问题转换为多个二分类,然后用Binary Cross-entropy计算分类Loss。这样能够处理一个样本有属于多个Label(multi-label)分类的问题
    2. 用一个额外的通道来编码一个GT BBox是否为正/负样本(目标,Objectness)
  4. 多尺度(Multi-scale)

    1. 在三个尺度下分别用3个scale做训练/预测,假如某个scale的尺度的输出分辨率为NN(N * N),那么对应的FeatureMap输出为(NN(C+1+4))(N * N * (C + 1 + 4))
    2. N = 16, 32, 64
    3. 用了类似于UNet的结构来对底层和顶层信息进行融合,详见:https://zhuanlan.zhihu.com/p/76802514
    4. Anchor:直接在COCO下通过K-Means聚类得到9个anchor,然后按照面积排序,从小到大地分配到不同的尺度下,小尺度用大anchor
  5. 作者做的一些没有效果的尝试

    • Focal Loss,作者尝试了但是没有效果:
      1. 一方面作者认为这是因为用了Objectness class(也即是那多余的一个类别),因此Focal Loss没有增益。
      2. 但另一方面我觉得可能跟分配正负样本有关系,比如IOU大于0.7是正样本,小于0.3是负样本,其余ignore。单纯使用0.5这个阈值也会偏高,导致负样本中包含很多和正样本很相似的样本,从而将判定面复杂化,削弱了Focal Loss的作用(本身是用来平衡正负样本的权重的,但正负样本压根都没分好,因此平衡不起作用也可以理解),详见:https://www.zhihu.com/question/293369755
    • 双阈值(比如IOU大于0.7是正样本,小于0.3是负样本,其余ignore):这个问题应该跟Anchor的调整有关系,作者使用了这种聚类的anchor方式,意味着和原来的anchor相比,哪怕阈值相同,正负样本的分布/数目就不同了。因此感觉继续调整相关参数
    • 去掉上述bbox的编码中的sigmoid函数,通过anchor宽高进行归一化,会导致几个点的AP下降
    • 不加sigmoid,也不用宽高归一化,也没有提升