Object Detection : One-stage Detector YOLO

现有的目标检测器主要分为两种类型:两阶段(two-stage)和单阶段(one-stage)。这两种检测器的设计思想有很大的不同:两阶段检测器主要将检测问题归结为分类问题(classification),而单阶段检测器主要是将检测问题定义为回归问题(regression)。不仅如此,两种检测器在时间、性能上也有一定的差距。接下来我将会沿着单阶段的主线,根据时间顺序,进一步了解单阶段检测器的发展。

YOLO -> DenseBox -> SSD -> YOLO v2 -> Retina -> YOLO v3 -> CornerNet -> CenterNet -> AlignDet

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

论文地址:1506.02640

1. YOLO的优缺点(Pros and Cons)

【从摘要(Abstract)和介绍(Introduction)】
在这里插入图片描述

  • 优点
    • 速度快(fast):采用回归思想,无需产生区域提议(proposals),是一个端到端的模型
    • 利用全局信息(global):输入是整张图片(entire image),而不是图片其中的一部分(part)
    • 泛化能力(generalization):在非自然图片(natual image)如艺术作品领域(artwork),检测结果(results)较好
  • 缺点
    • 准确率不如两阶段检测器(accuracy behind):体现在定位(localization)不够准确,小目标(small object)检测难
    • YOLO在检测框的预测上有较强的空间限制(strong spatial constraints):一个网格单元预测两个检测框,并且一个网格单元内只能有一种类别预测。这导致模型缺乏对相邻的多个目标检测的能力,尤其是一大群小目标(small objects that appear in groups)
    • YOLO对新的或者不寻常(new or unusual)的纵横比、设置(configurations)的泛化能力较弱:因为模型是从数据中学习如何预测检测框,有一定的数据依赖性
    • 损失函数的设计有缺陷:对于大检测框与小检测框的错误一视同仁:对于某些小错误,在小检测框会对IOU有很大的影响,在大检测框上相对影响小一些。

2. YOLO的设计思想(Design)

YOLO 使用全图特征去预测检测框(bounding boxes)及其类别(classes)。与两阶段检测器的区域提议(region proposals)不同的是,YOLO不预先产生可能包含目标(objects)的区域(proposals),而是将一张图片分割成S x S的网格(grid),每个网格单元(cell)都可能包含目标,换句话说,这些网格单元便是YOLO给出的可能包含目标的区域。对于每个网格单元,如果目标的中心(center)落在其中,该网格便负责对该目标进行检测。
在这里插入图片描述
每个网格单元负责预测B个候选框及其对应的B个置信度(confidence scores), 此处置信度指网格单元包含目标及检测框预测准确的置信度(原文链接1),定义为Pr(Object)IOUpredtruthPr(Object)*IOU_{pred}^{truth}

当预测的检测框(predicted boxes)中包含目标时,Pr(Object)=1Pr(Object)=1,即置信度等于预测检测框与真实标注GT(ground truth)之间的IOU(intersection over union);当预测的检测框中不包含目标时,Pr(Object)=0Pr(Object)=0,即置信度为0.

原文链接1: These confidence scores reflect how confident the model is that the box contains an object and also how accurate it thinks the box is that it predicts.

每个检测框包含五个预测值:x,y,w,h,confidencex, y, w, h, confidence。其中(x,y)(x, y)是该检测框与负责它的网格单元边界的相对座标(relative coordinates / offset),w,hw, h是该检测框与原图长宽的相对值,即x,y,w,hx,y,w,h都是在(0, 1)。confidenceconfidence是上文提到的置信度。

每个网格单元除了预测B个候选框,还预测C个类别条件概率(conditional class probabilities),定义为Pr(ClassiObject)Pr(Class_i|Object)。需要注意的是,虽然每个网格单元预测B个候选框,但是只预测一组C个类别的条件概率。

在测试阶段,通过将类别条件概率与检测框预测的置信度进行乘积可以得到每个检测框的类别置信度(class-specific confidence scires),此处的置信度指该预测是该类及检测框合适的置信度(原文链接2)

原文链接2: These scores encode both the probability of that class appearing in the box and how well the predicted box fits the object.

在PASCAL VOC数据集上,作者设置S = 7, B = 2,C = 20,所以最后YOLO输出的预测结果是 7x7x(2x5+20) = 7x7x30。

2.1 网络的设计

在这里插入图片描述
论文中提出了两种版本:YOLO (45 FPS)与 Fast YOLO (155 FPS)

  • YOLO:24 layers + 2 FC
  • Fast YOLO: 9 layers + 2 FC (fewer filters)
    除了以上区别,训练、测试的所有参数YOLO和Fast YOLO是一致的。

作者对模型的训练模式:预训练(pretrain) + 微调(finetune)

  • 预训练:取Figure 3中的前20层+1 平均池化(average pooling)+1全连接层(fully connected layer)
  • 微调:取预训练模型的前20层+4层卷积层(convolutional layers)+2 全连接层 (新添加的层是随机初始化参数),有篇研究认为这样可以提升性能(详见原文链接3)

原文链接3: Ren etal. show that adding both convolutional and connected layers to pretrained networks can improve performance.

因为目标检测任务需要更细粒度 (fine-grained)的视觉信息,所以作者将输入的图片尺寸从 224x224 增加到448x448。

对于激活函数(activation),YOLO最后一层(final layer)使用的是线性激活函数,其他层使用的是Leaky ReLU(leaky rectified linear activation)
ϕ(x)={x, if x>00.1x, otherwise  \phi(x)=\left\{\begin{array}{ll} {x,} & {\text { if } x>0} \\ {0.1 x,} & {\text { otherwise }} \end{array}\right.

对于损失函数(loss fucntion),YOLO使用易于优化的平方和误差(sum square error, SSE)。不过需要考虑的是:

  • 赋予定位误差(localization error)和分类误差(classification error)以不同的权重
  • 增加包含目标的预测检测框座标的损失(coordination prediction loss),减少不包含目标的预测检测框置信度的损失:网格单元大多数不包含目标,这些单元预测的置信度为0,对模型的学习不会产生太大的帮助,即无效梯度(原文链接4),会导致模型的不稳定(instablity)。
  • 大检测框(large boxes)与小检测框(small boxes)的预测损失应当不一致:在小检测框里的小改变(small deviation)应当比大检测框里的小改变更重要(原文链接5)

原文链接4: Also, in every image many grid cells do not contain any object. This pushes the “confidence” scores of those cells towards zero, often overpowering the gradient from cell that do contain objects. This can lead to model instability, causing training to diverge early on.
原文链接5: Our error metric should reflect that small deviations in large boxes matter less than in small boxes. To partially address this we predict the square root of the bounding box width and height instead of the width and height directly.

作者通过引入两个参数来解决优化时遇到的前两个问题:λcoord=5,λnoobj=0.5\lambda_{coord}=5,\lambda_{noobj}=0.5,通过预测检测框长宽的平方根来进一步减少第三个问题对模型训练的影响 (partially address),即并没完全解决这个问题。

回到训练时预测的检测框,YOLO规定每个网格单元产生的B个检测框中与标注(GT)之间的IOU最大的检测框,将负责该目标的检测。这样做的好处是可以使得检测框的预测更加专业(specialization),能够更好的预测特定大小(size),特定纵横比(aspect ratio),特定类别(class)的目标,从而提升召回率(原文链接6)。

原文链接6: We assign one predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the ground truth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratio, or classes of objects, improving overall recall.

所以,最终优化的损失函数如下:
在这里插入图片描述

2.2 训练细节

  • 数据集: Pascal VOC 2007 + 2012 train set && val set
  • 迭代周期(epochs): 135 epochs
  • 学习率(learning rate schedule) : 在第一个epoch,学习率从10310^{-3}缓缓提升到10210^{-2},然后以10210^{-2}再训练74个epochs,接着用10310^{-3}训练30个epochs,最后用10410^{-4}训练30个epochs,一共135个epochs。一开始如果以较高的学习率可能会导致模型因为不稳定的梯度(unstable gradient)出现偏离(diverges),所以在第一个epoch设置了学习率的热身(warm-up)。
  • 批大小(batch size):135
  • 动量(momentum):0.9
  • 权重衰减(weight decay):0.0005
  • dropout层放在第一个全连接层之后,用于避免层间协同适应(co-adaptation)
  • 数据增强(data augmentation):(1)随机尺度(random scales) 和 平移(translation),平移的最大距离是原图片尺寸的20%;(2)通过HSV颜色空间(color space)随机调整曝光值(exposure)和饱和度(saturation),最大调整比例为1.5

2.3 预测细节

在Pascal VOC上,YOLO对于一张图片预测98 (7x7x2) 个检测框,并为每个检测框产生一组类别概率 (训练中是给每个网格单元生成一组类别概率而不是为每个检测框产生一组)

对于一些大目标(large objects)或者靠近(near)多个网格单元边界(border)的目标会被多个网格单元定位(localize),从而产生重叠的检测(multiple detections)。作者采用非极大值抑制(Non-maximal supression, NMS)的方法去解决这个问题,可以提升(adds) 2~3% mAP。

3. 实验部分

  • 与其他实时(real-time)、接近实时(less than real-time)检测器的对比:

YOLO是当时实时检测器中性能最好的,甚至Fast YOLO的性能是其他实时检测器的两倍。但是与两阶段检测器相比,还是有些许性能的差距。
在这里插入图片描述

  • VOC 2007 错误分析(error analysis)

论文中定义了五类错误:

Correct: correct class && IOU >.5
Localization: correct class && .1 < IOU < .5
Similar: class is similar, IOU > .1
Other: class is wrong, IOU > .1
Background: IOU < .1 for any object

从下图不难发现,YOLO在定位上(localization)上逊色于Fast R-CNN,但在假阳性(False Positive,FP)样本上的错误更少,这意味着YOLO将背景类识别成目标的比例要低于Fast R-CNN。
在这里插入图片描述

  • 结合Fast R-CNN 和 YOLO

从上文的VOC 2007 错误分析,不难发现Fast R-CNN与YOLO可以进行优势互补。分别训练两个模型进行预测,对于二者预测相似的检测框,根据YOLO给出的概率(probability)和两个检测框的交叠(overlap)对预测进行改进(boost)。也就是将两个模型的结果进行融合(combination),在速度上并没有什么增益。
在这里插入图片描述

  • Pascal VOC 2012的结果
    在这里插入图片描述
  • 泛化性:艺术作品中人物检测

艺术作品(artwork)与自然图片(natural image)在像素层面上(pixel level)上有很大的不同,但在目标的大小(size)和形状(shape)方面相似,这也是YOLO为何能做出预测的可能解释。
在这里插入图片描述

4. 总结

YOLO是非常经典的单阶段检测器,首先它采用回归思想实现端到端训练的目标检测器,大大减少了模型的训练时间;其次,通过全图的特征去预测检测框和类别,而不去产生区域提议,大大提升了模型的检测速度。


下面推荐一篇解析YOLO不错的文章:
目标检测|YOLO原理与实现


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章