YOLO 系列

YOLO 直接将目标检测作为回归任务求解的经典算法,基于一个单独的 end2end 网络,完成从原始图像的输入到物体位置和类别的输出,输入图像经过一次网络,便能得到所有物体的位置和其所属类别及相应的置信概率。

YOLO

文献[1] 是该方法的第一篇文章,首次提出 YOLO 的框架。



Figure 1. Model overview


Pipeline

YOLO 的处理流程:

  • 将一副图像分成 $S \times S$ 的网格,如果某个 object 的中心落在这个网格中,则这个网络就负责预测这个 object;
  • 每个网格需要预测 B 个 bounding boxes,每个 bounding boxes 预测 $x,y,w,h$ 和 confidence,其中 $x,y$ 表示 box的中心与网格中心的偏移, $w,h$ 表示相对于图像长宽的比例, confidence 表示 box 中含有object的置信度和这个box预测的有多准两重信息,$Pr(Object) * IOU_{pred}^{truth}$;
  • 每个网格还需要预测 C 个类别信息, $Pr(Class_i | Object)$;
  • 预测的结果是 $S \times S \times (B*5 + C)$ 。

Architecture



Figure 2. The Architecture


YOLO 的网络借鉴了 GoogLeNet,不过没有使用 Inception 模块,而是用 $1 \times 1$ 卷积(跨通道信息整合)跟在 $3 \times 3$ 卷积后面进行替代。如 figure 2 所示,YOLO 一共有 24 层卷积和 2 个全连接层。

Loss Function

YOLO 使用 sum-squared error 来设计损失函数,并进行了一些修改:

  • 更重视 8 维的坐标预测,给这些损失前面赋予更大的Loss Weight,$\lambda _{coord} = 5 $;
  • 对于没有 object 的 Bbox 的 confidence loss 赋予更小的 Loss Weight,避免导致网络不稳定甚至发散,$\lambda _{noobj} = 0.5 $;
  • 对不同大小的 Bbox 预测中,相比于大 Bbox 预测偏一点,小 Bbox 预测偏一点更不能忍受。为了缓和这个问题,将 Bbox 的 Width 和 Height 取平方根;
  • 训练时希望每个 Object 只有一个 Bbox 专门负责,因此选择与 Ground Truth 拥有最高 IoU 的 Bbox 专门预测。

YOLO 的具体损失函数如下图所示:



Figure 2. The loss function


Inference

测试阶段,在得到 YOLO 网络结果后,首先需要计算每个 Bbox 的 Class-Specific Confidence Score:
$$
Pr(Class_i|Object) Pr(Object) IOU_{pred}^{truth} = Pr(Class_i) * IOU_{pred}^{truth}
$$



Figure 3. The inference pipline


进行 Non-Maximum Suppression:得到每个Bbox的Class-Specific Confidence Score以后,设置阈值,滤掉得分低的Bboxes,对保留的Bboxes进行NMS处理,就得到最终的检测结果。跟直观的展示请参见文献[3]中的 PPT 。

Limitations

YOLO 还存在一些缺点:

  • 对挨在一起的物体和小物体检测效果不好;
  • 测试时,物体出现不常见的长宽比时,泛化能力偏弱;
  • 由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,应区别对待。

YOLO v2

YOLO v2 用了一些技巧来帮助提升目标检测的精度:

  • Batch Normalization:在 YOLO 的卷积层后面添加 BN 层,可以消除输入变化的影响,同时能够正则化模型,舍弃 Dropout 而不会过拟合。
  • High Resolution Classifier:将输入分辨率从 $224 \times 224$ 提升到 $448 \times 448$。
  • Convolutional With Anchor Boxes:从 YOLO 中移去了全连接层,并且利用 anchor box 来预测 Bbox,去掉一个 Pooling 层,让卷积层有更高的分辨率,同时将输入变为 $416 \times 416$ ,这样特征图的大小为 $13 \times 13$。
  • Dimension Clusters:对 Bbox 进行聚类分析,得到常见的尺寸。
  • Direct location prediction:YOLO 使用 anchor box 在前期的时候,模型训练会不稳定,这是因为预测 Bbox 的中心坐标 $(x,y)$。 YOLO v2 预测相对于 Grid Cell 的坐标位置,同时把 Ground Truth 限制在 0 到 1 之间。每个 Bbox 预测 5 个值: $t_x,t_y,t_w,t_h,t_o$。 如果 Cell 距离左上角的距离为 $(c_x,c_y)$ , 对应的 Bounding Box Prior 的长和宽分别为 $(p_w,p_h)$ ,$Pr(object)*IOU(b,object)=\sigma (t_0)$ , $b_x, b_y, b_w, b_h$ 的预测如 figure 4 所示。



    Figure 4. Bounding boxes with dimension priors and location prediction


  • Fine-Grained Features:细粒度特征的话可能对小尺度的物体检测有帮助。YOLO v2 添加一个 Passthrough 层,把浅层特征图连接到深层特征图。

  • Multi-Scale Training:每经过10批训练就会随机选择新的图片尺寸。网络使用的降采样参数为32,于是使用32的倍数{320,352,…,608}。
  • 骨干网路用 Darknet-19 替换 VGG-16。

YOLO v3

YOLO v3 进行的修改如下:

  • 放弃使用 softmax,将原来的单标签分类改进为多标签分类,因为一个物体可能属于多个类比,因此使用独立的 logistic 分类器,损失函数使用 binary cross-entropy。
  • 采用 FPN 和 upsample,融合不同尺度的特征进行预测。
  • 骨干网络换成 Darknet-53, 引入了残差结构。

References

请作者吃酒!