摘要:
论文的前两部分内容(Better和Faster)主要介绍YOLOv2,第三部分(Stronger)主要介绍YOLO9000,此处不介绍。
Better
针对YOLO在定位准确率和召回率(recall)方面的不足进行了改进。
改进措施:
-
Batch Normalization
BN在模型拟合的过程中有显著的作用,而且降低了对其他正则化措施的需求。应用BN之后,移除dropout也没有产生过拟合。 -
High Resolution Classifier
YOLO用224×224
的图像进行分类网络的训练,然后将分辨率提升到448×448
进行检测。这就要求网络必须同步的切换到目标检测的学习过程中去,并且adjust新的输入分辨率。
YOLOv2针对上述问题对网络的训练过程进行了改进。即,在ImageNet上应用448×448
分辨率的图像对分类网络进行fine tune10 epochs
,这就使网络有时间去更好的适应高分辨率的输入。 -
Convolutional With Anchor Boxes
借鉴Faster R-CNN的region proposal network(RPN)机制,将YOLO中的全连接层移除,继而采用anchor boxes
来预测bounding boxes。
首先,移除一个池化层,从而提高网络输出的分辨率。同时将输入图片的尺寸从448×448
变为416×416
,这样做的原因在于希望得到的特征图都有奇数大小的宽和高,奇数大小的宽和高会使得每个特征图在划分cell的时候就只有一个center cell(比如可以划分成7*7
或9*9
个cell,center cell只有一个,如果划分成8*8
或10*10
的,center cell就有4个)。为什么希望只有一个center cell呢?因为大的object一般会占据图像的中心,所以希望用一个center cell去预测,而不是4个center cell去预测。 网络最终将416*416
的输入变成13*13
大小的feature map输出,也就是缩小比例为32
。
YOLO中每张图像预测98
个box,而应用anchor box则会产生超过1000
个box。论文作者的实验表明应用anchor box之后mAP下降了0.3
(69.5 – > 69.2),但是召回率提升了7%
(81% – > 88%),说明更多的box提高了定位准确度。 -
Dimension Clusters
由于anchor box的大小和比例都是按照经验预先设置好的,所以,如果一开始就选择合适的anchor box大小和比例会使网络更容易获得更好的detection。
本文中选用K-means
聚类方法来对训练集中的bounding boxes进行聚类,从而获得合适的anchor box的大小和比例。但是,如果聚类时采用标准的欧氏距离,会使大尺寸的box的偏差大于小尺寸的box的偏差。并且,我们真正想要达到的目的是获得可以使IOU分数更大的anchor box的尺寸,而和box的大小无关,所以选用了如下度量方法:
如图2所示,左边是聚类中心的个数和平均IOU之间的关系,在考虑召回率和模型复杂度的平衡之后,采用了k=5,即5个anchor尺寸。右边即是分别对于VOC和COCO数据集的5个anchor box的示意图。其中高瘦形状居多,矮胖形状比较少,而且COCO的anchor box尺寸更大一些。
如表1所示,利用本文方法产生5
种anchor box时就可以达到Faster R-CNN中9
种anchor box才达到的Avg IOU。 -
Direct location prediction
将anchor box的思想引入YOLO中之后,产生了模型不稳定的现象,尤其是在迭代初期的时候。这些模型不稳定主要来自对box的(x, y)
的位置的预测。
在Faster R-CNN中对bounding box的预测是基于偏移量的(offset),如下面的公式:
即x = (tx * wa) + xa
、y = (ty * ha) + ya
,其中x, y
是预测的box位置,tx
,ty
为偏移量,wa
,ha
,xa
,ya
为anchor的尺寸和位置。
但是在YOLOv2中,并不采用预测偏移量的形式,而是沿用YOLO的方法:预测对应grid cell的相对位置坐标。这种方式将ground truth限定在[0, 1]
的范围内。同时利用logistics activation
将预测输出限定在这个范围。
YOLOv2网络中每个grid cell预测五个bounding box,每个bounding box包含5个预测值,即tx
,ty
,tw
,th
和to
。
由于加入了对未知预测的限制(0到1),所以使得模型更加稳定。 -
Fine-Grained Features
YOLOv2在13×13
的feature map上进行目标检测,对于大目标检测来说已经足够了,但是对于一些小目标,可能经过层层卷积之后,这些小目标的特征就被卷没了,所以YOLOv2添加了一个passthrough layer,类似于ResNet的原理,将前面卷积层的26×26×512
的feature map拼接成13×13×2048
,然后和最后一层的13×13×1024
组合成一个13×13×3072
的feature map。 -
Multi-Scale Training
为了让模型更加鲁棒,作者采用Multi-Scale Training,即在训练时动态的变化输入图像的大小,因为网络模型总的下采样倍数为32
,所以,每10个batch
就随机抽取{320,352,...,608}
之中的一个尺寸作为输入图片尺寸来进行训练。注意这一步是在检测数据集上fine tune时候采用的,不要跟前面在Imagenet数据集上的两步预训练分类模型混淆。
下面是这些优化方法对模型的影响。其中High Resolution Classifier的提升非常明显(近4%),另外通过结合dimension prior+localtion prediction这两种方式引入anchor也能带来近5%mAP的提升。
Faster
1.Darknet-19
如表6所示,YOLOv2采用Darknet-19作为基础网络,这个网络包含19个
卷积层和5个
maxpooling layer,最后用average pooling层代替全连接层进行预测。Darknet-19只需要5.58billion operations,所以提升了YOLOv2的检测速度。这个网络在ImageNet上取得了top-1 72.9% 和 top-5 91.2%的准确率。
2. Training for classification
作者在标准的ImageNet 1000class上进行了160个epoch的训练,采用随机梯度下降(SGD),初始学习率为0.1
,polynomial rate decay with a power of 4, weight decay of 0:0005 and momentum of 0:9
,采用标准的数据增强方法:随机裁剪、旋转、色调、饱和度的调整等。
上文谈及的训练小技巧,即:首先用224×224
分辨率的图像进行训练,然后再用448×448
分辨率的图像fine tune
,在 fine tune 过程中,初始学习率设置为0.001
,而且只 fine tune 10个epoch
,其余参数不变。结果表明fine-tuning后的top-1准确率为76.5%,top-5准确率为93.3%,而如果按照原来的训练方式,Darknet-19的top-1准确率是72.9%,top-5准确率为91.2%。因此可以看出第1,2两步分别从网络结构和训练方式两方面入手提高了主网络的分类准确率。
3 . Training for detection
在前面第二步之后,就修改网络使其进行detection。首先移除最后一个卷积层,然后添加3
个3×3
卷积层,每个卷积层有1024
个filter,并且每个卷积层后面添加一个1×1
的卷积层,1×1
的卷积层的filter个数根detection需要的输出有关。比如:对于VOC数据集,每个grid cell需要检测5
个box,而每个box需要输出5
个位置信息和20
个类别信息,所以每个cell需要输出125
个信息,所以就需要125个filter
。
另外,作者在网络中添加了一个passthrough layer,将最后一个3×3×512
的卷积层和倒数第二个卷积层相连,作者认为这样网络就可以利用细纹特征。( can use fine grain features.)
训练过程为:一共训练160个epoch
,初始学习率为0.001
,学习率在60epoch
和90epoch
时缩小10倍
,weight decay 为 0.0005
, momentum 为0.9
。应用和YOLO、SSD相似的数据增强方法,如随机裁剪、颜色翻转(color shifting)等。
Stronger
详见原论文
Reference
1.https://blog.csdn.net/l7H9JA4/article/details/79955903
2.https://blog.csdn.net/lwplwf/article/details/82895409
3.https://blog.csdn.net/u014380165/article/details/77961414