<论文解读>YOLOv1:You Only Look Once

论文传送门: You Only Look Once: Unified, Real-Time Object Detection

You Only Look Once: Unified, Real-Time Object Detection

Abstract

作为one-stage算法的经典成员, YOLOv1提出使用回归的方法得到bbox. 相较于tow-stage算法把提取bbox(bounding box)和分类分开来做, YOLOv1直接从图片中回归出bbox并进行分类. 因为用的beckbone比较简单, 主要特点就是快, 速度方面能轻松超越其他state-of-the-art算法, 可以做到端到端的实时检测(45FPS, GPU为Titan X).

Introduction

为了检测到目标(object), 之前一些算法会基于不同尺度, 不同位置在一张图像上对目标进行分类评估. 比如DPM(deformable parts models)使用滑窗(sliding window)的方法在每张图像上生成大量的候选框, 并进行分类, 留下符合要求的.
而作为tow-stage的经典, R-CNN则是先使用select search算法生成一定数量的候选框, 将其送入分类器后进一步得到合适的bbox, 将得到的bbox再进一步地调整位置, 随后进行一些后处理就能得到想要的bbox了. 但步骤比较复杂, 难以优化, 个别步骤还是分开进行训练的.
而YOLOv1将目标检测视为一个简单的bbox坐标回归和分类的问题.在这里插入图片描述

如图, 先将图像resize成 448 ∗ 448 448*448 448448, 然后输入到一个简单的卷积神经网络中, 最后使用NMS做后处理.
此外,YOLOv1也承认自己存在不足, 在正确率方面滞后于其他state-of-the-art算法.

Unified Detection

接下来就是算法设计的细节部分了.

  • 训练阶段, 输入的图像经过卷积神经网络后尺度变为 S × S S×S S×S个grid, 含有目标的groundtruth box的中心点落在哪个grid上, 哪个grid就负责该目标的预测. 然后每个负责预测的grid则会生成B个bbox, 每个bbox会预测出一个置信度(confidence), 即 B × 1 B×1 B×1个置信度, 置信度反映了该grid包含目标的可能程度. 如果模型判定该处不存在目标(置信度过低), 那么就直接输出0就好了, 所以置信度 c o n f i d e n c e confidence confidence等于目标存在的概率乘于groundtruth和prediction的 I O U IOU IOU, P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object) ∗ IOU^{truth}_{pred} Pr(Object)IOUpredtruth.
    借图
    每个生成的bbox还会包含4个参数: x, y, w, h, 即bbox中心点的坐标(x, y)和bbox的宽高w, h. 每个grid还需要输出C个类别的概率, 不过是带条件的, P r ( C l a s s i ∣ O b j e c t ) Pr(Classi |Object) Pr(ClassiObject), 即当在该grid中没有检测到目标是, 那每个类别的概率就为0了.
    最后网络的输出是 S × S × ( B × 5 + C ) S × S × (B × 5 + C) S×S×(B×5+C)的张量. 再次理解一下, 每个预测的bbox需要输出5个值: x , y , w , h , c o n f i d e n c e x, y, w, h, confidence x,y,w,h,confidence, 每个grid需要生成B个bbox, 所以就有了 B × 5 B × 5 B×5, 然后每个grid还需要预测C个类别的概率, 所以就是 B × 5 + C B × 5 + C B×5+C, 一共有 S × S S × S S×S个grid, 所以最终输出的形式是 S × S × ( B × 5 + C ) S × S × (B × 5 + C) S×S×(B×5+C). 但训练时并不是每个grid都参与预测, 所以没有目标中心点包含目标中心点的grid就直接输出0了.
  • 推理阶段, 有区别与训练部分的是, 并不是只有目标中心点所在的grid才需要预测, 而是所有 S × S S×S S×S个grid都需要进行预测, 因为推理的时候没有了groundtruth,也就不知道哪个grid包含了目标的中心点.
    作者在PASCAL VOC数据集上做实验, 取 S = 7 S=7 S=7, B = 2 B=2 B=2. 该数据集有20个类别, C = 20 C=20 C=20. 所以最后输出为 7 × 7 × 30 7 × 7 × 30 7×7×30.
    在这里插入图片描述

1. Network Design

模型设计图如下, 结构较为简单, 最后输出7×7×30的tensor.
在这里插入图片描述
在这里插入图片描述

2. Training

  • 预处理: 将bbox的W和H归一化, bbox的中心点坐标(x, y)表示为该点所在grid左上角的偏移量(offset), 同样进行了归一化. 还将上图中的前20层卷积层经过一个平均池化再接一个全连接层,在ImageNet上做预训练。

  • 激活函数: Leaky ReLU
    ϕ ( x ) = { x , if x > 0 0.1 x , otherwise \phi(x) = \begin{cases} x, & \text{if x > 0} \\[5ex] 0.1x, & \text{otherwise} \end{cases} ϕ(x)=x,0.1x,if x > 0otherwise

  • 损失函数(loss): 在这里插入图片描述

    因为输出有多个参数, 所以loss会由多个部分组成, 每个部分都使用平方和误差.
    x , y , w , h , C , p ( c ) x, y, w, h, C, p(c) x,y,w,h,C,p(c)为groundtruth, 而 x ^ , y ^ , w ^ , h ^ , C ^ , p ^ ( c ) \hat x, \hat y, \hat w, \hat h, \hat C, \hat p(c) x^,y^,w^,h^,C^,p^(c)为则为预测值. 其中 C C C表示置信度, p ( c ) p(c) p(c)表示类别的概率。
    ∑ i = 0 S 2 \sum_{i=0}^{S^{2}} i=0S2表示遍历所用的grid, ∑ j = 0 B \sum_{j=0}^B j=0B, 表示遍历这个grid里面的bbox. 即i表示第i个grid,j表示第j个bbox。 l i j o b j l^{obj}_{ij} lijobj表示 S ∗ S ∗ B S*S*B SSB个bbox中存在object的那几个bbox;而 l i j n o o b j l^{noobj}_{ij} lijnoobj自然表示不存在object的bbox.
    因为w, h和x, y的偏移尺度不相同, 比如 x − x ^ = 0.2 x-\hat x=0.2 xx^=0.2, 而 w − w ^ = 0.6 w-\hat w=0.6 ww^=0.6, 会使梯度往 w w w的方向下降更多, 所以在w和h上开个根号. 同样, 为了平衡坐标x, y, w, h与不存在目标的bbox的权重, 增加了两个参数 λ c o o r d \lambda_{coord} λcoord λ n o o b j \lambda_{noobj} λnoobj, 并分别取5和0.5, 降低 l i j n o o b j l^{noobj}_{ij} lijnoobj的权重是因为很多grid都不包含目标, 负样本数量比较多.
    借图

  • 贴一下详细的超参数设置和训练方式:

    We train the network for about 135 epochs on the training and validation data sets from PASCAL VOC 2007 and 2012. When testing on 2012 we also include the VOC 2007 test data for training. Throughout training we use a batch size of 64, a momentum of 0.9 and a decay of 0.0005. Our learning rate schedule is as follows: For the first epochs we slowly raise the learning rate from 1 0 − 3 10^{−3} 103 to 1 0 − 2 10^{−2} 102. If we start at a high learning rate our model often diverges due to unstable gradients. We continue training with 1 0 − 2 10^{−2} 102 for 75 epochs, then 1 0 − 3 10^{−3} 103 for 30 epochs, and finally 1 0 − 4 10^{−4} 104 for 30 epochs.
    To avoid overfitting we use dropout and extensive data augmentation. A dropout layer with rate = .5 after the first connected layer prevents co-adaptation between layers . For data augmentation we introduce random scaling and translations of up to 20% of the original image size. We also randomly adjust the exposure and saturation of the image by up to a factor of 1.5 in the HSV color space.

Limitations of YOLO

YOLOv1算法的部分差不多就讲完了,不过论文中还讲了该算法的局限性。

  • 由于YOLOv1每个grid只预测两个bbox,并且只预测一个类别,当多个小目标靠一起的时候就比较难预测了,比如鸟群。
  • 对于新的长宽比的object的泛化能力较弱。
  • 损失函数对与大小差异大的bbox的处理能力较弱,同一个误差对小bbox的影响比大bbox的影响要大得多。

Experiments

实验部分就略过了,只放一张效果图吧。
在这里插入图片描述

Conclusion

相较于classifier-based的方法(先生成bbox,再对bbox里的内容分类),YOLOv1直接同时对整张图像进行坐标回归和分类,能更快地完成检测任务。

猜你喜欢

转载自blog.csdn.net/weixin_45612763/article/details/108740672