YOLO 9000: Better, Faster, Stronger
论文链接: https://arxiv.org/abs/1612.08242
一、Problem Statement
作者改进了YOLOv1以及提出了目标分类与检测联合训练的方法,通过这种方法,YOLO9000可以同时在COCO和ImageNet数据集中进行训练,训练后的模型可以实现多达9000种物体的实时检测。
二、Direction
Better, Faster: YOLOv2
Stronger: YOLO9000
作者认为YOLOv1在定位问题上较为严重,低召回率。因此作者在YOLOv2主要提升localization和recall。主要在以下几个方面:
- Batch Normalization
- High Resolution Classifier
- Convolutional with Anchor Boxes
- Dimension Clusters
- Direct location prediction
- Fine-Grained Features
- Multi-Scale Training
- Backbone Darknet-19
三、Method
1、 Batch Normalization
作者在所有卷积层使用了BN,mAP提升超过2%。把Dropout替换掉。
2、 High Resolution Classifier
YOLOv1分类器网络训练使用224x224的分辨率输入,作者在YOLOv2上提升到448x448。作者首先对分类网络(自定义的darknet)进行了fine tune,分辨率改成448x448,在ImageNet数据集上训练10轮(10 epochs),训练后的网络就可以适应高分辨率的输入了。然后,作者对检测网络部分(也就是后半部分)也进行fine tune。这样通过提升输入的分辨率,mAP获得了4%的提升。
3、 Convolutional with Anchor Boxes
YOLOv1直接采用全连接层预测bounding box的坐标。作者借鉴了Faster-RCNN中RPN对anchor boxes预测offsets和confidences的经验,移除了全连接层,使用Anchor boxes来预测bounding boxes。 作者认为预测offsets而不是直接预测坐标点简化了问题而且使得网络更容易去学习。具体实施: 首先把一个pooling layer删除掉,保证网络输出高分辨率的特征。然后通过缩减网络,使其可以输入分辨率为416x416的图片,而不是448x48。这样做的目的是为了能够在输出的特征图上获得一个奇数的长宽,这样就只有一个center cell。 因为如果特征图有多个中心,目标,特别是大目标就会占据多个center,这样预测会效率较低。之后作者把YOLO网络降采样32倍,从416x416的输入得到13x13的特征图输出。既然使用了anchor boxes,作者就对每一个anchor box预测class和objectness。objectness仍然延续YOLOv1的传统,根据anchor box和ground truth的IoU来进行判定。但是使用了anchor boxes稍微降低了一点精度。YOLOv1对每一张图片预测了7x7x2=98个boxes,但是YOLOv2预测了13x13x9=1521个boxes。
4、 Dimension Clusters
在YOLO中使用anchor boxes,作者考虑了两个问题:
- box的维度是手动精选的(hand-picked)。虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。
作者使用了对训练集的bounding boxes进行了K-means聚类,自动找出较好的先验框(anchor box priors)。 - K-means聚类的方法
传统的K-means聚类使用的是Euclidean distance, 但作者没有使用Euclidean distance去进行聚类,因为大的boxes比小的boxes会产生更大的error。而我们想的先验框是有好的IoU scores, 这个是与框的大小没有关系的。因此作者使用了
d ( b o x , c e n t r o i d ) = 1 − I O U ( b o x , c e n t r o i d ) d(box, centroid)=1-IOU(box,centroid) d(box,centroid)=1−IOU(box,centroid)
平衡复杂度和IOU之后,最终得到k值为5,意味着作者选择了5种大小的box维度来进行定位预测,这与手动精选的box维度不同。结果中扁长的框较少,而瘦高的框更多(这符合行人的特征)。
5、 Direct location prediction
在YOLO中使用了anchor boxes,作者还考虑了模型稳定性的问题。作者认为大多数的不稳定性来自于预测框的(x,y)坐标。在RPN中,网络预测了
t
x
,
t
y
t_x, t_y
tx,ty,然后中心点坐标(x,y)通过计算得出:
x
=
(
t
x
∗
w
a
)
+
x
a
y
=
(
t
y
∗
h
a
)
+
y
a
x=(t_x*w_a)+x_a\\y=(t_y*h_a)+y_a
x=(tx∗wa)+xay=(ty∗ha)+ya
上面公式时没有限制的,也就是说任何一个anchor box可以最终落在图片任何位置,这样的话随机初始化后,网络需要花很长一段时间才能稳定预测敏感的物体位置。
所以作者没有直接预测offsets,而是预测相对于grid cell的localization coordinates,ground truth限定在0-1并且使用logistic函数把预测值也限定在0-1的范围内。
网络在一个特征图上对每个grid cell输出5个bounding boxes,对每个bounding boxes输出5个值,分别为
t
x
,
t
y
,
t
w
,
t
h
t_x,t_y,t_w,t_h
tx,ty,tw,th和
t
o
t_o
to。如果这个cell相对于图片的offsets是
(
c
x
,
c
y
)
(c_x,c_y)
(cx,cy),且我们知道anchor boxes的长宽
p
w
,
p
h
p_w,p_h
pw,ph,我们可以计算得出预测框的坐标为:
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
0
)
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_0)
bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phethPr(object)∗IOU(b,object)=σ(t0)
6、 Fine-Grained Features (细粒度特征)
使网络输出13x13的特征图,并在其上进行预测,虽然这足以胜任大尺度物体的检测,但是用上细粒度特征的话,这可能对小尺度的物体检测有帮助。Faser R-CNN和SSD都在不同层次的特征图上产生区域建议,获得了多尺度的适应性。这里使用了一种不同的方法,简单添加了一个转移层( passthrough layer),这一层要把浅层特征图(分辨率为26x26连接到深层特征图,类似于ResNet的操作。
7、 Multi-Scale Training
由于YOLOv2只采用卷积层和池化层,所以可以任意输入图片大小。不同于固定输入网络的图片尺寸的方法,作者在几次迭代后就会微调网络。每经过10次训练(10 epoch),就会随机选择新的图片尺寸。YOLO网络使用的降采样参数为32,那么就使用32的倍数进行尺度池化{320,352,…,608}。最终最小的尺寸为320x320,最大的尺寸为608x608。接着按照输入尺寸调整网络进行训练。这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。
8、 Multi-Scale Training
使用Darknet-19, 19个卷积层和5个maxpooling layers。
四、Conclusion
使用K-means聚类产生的anchor box大小代替Faster R-CNN和SSD手工设计的anchor boxes;在高分辨率图像上进行迁移学习,提升网络对高分辨图像的响应能力;训练过程图像的尺寸不再固定,提升网络对不同训练数据的泛化能力。除了以上三点,YOLOv2还使用了残差网络的直接映射的思想,R-CNN系列的预测相对位移的思想,Batch Normalization,全卷积等思想。
References
- https://zhuanlan.zhihu.com/p/42861239
- https://blog.csdn.net/wfei101/article/details/79398563