YOLOv2: YOLO9000: Better, Faster, Stronger

1. 论文简介

论文名:YOLO9000: Better, Faster, Stronge

论文地址 :YOLOv2

论文作者:Joseph Redmon, Ali Farhadi

论文时间:2017年CVPR最佳论文提名

论文主要分为了3部分:Better,Faster和Stronger。在Better和Faster部分主要讲解了YOLOv2的一些改进,Stronger部分主要讲解了YOLO9000。

2. Better部分

作者指出,YOLOv1中存在较多定位错误且召回率比较低,所以作者主要聚焦于在保证分类精度的同时提升召回率,减少定位错误。

YOLOv2的改进如下所示。

(1) Batch Normalization

YOLOv2中每个卷积层后都引入了BN层。BN层在加快网络收敛的同时起到了一定的正则化效果,所以作者去掉了Dropout层。添加BN层使得mAP提升了超过2%

(2) High Resolution Classifier

YOLOv1在训练分类网络的时候采用的输入图片大小为224x224(一般预训练的分类网络是在ImageNet数据集上训练得到的),然后在训练检测网络的时候采用的输入图片大小为448x448,这带来的问题是:检测网络初期需要适应图像分辨率的改变。

YOLOv2中,先采用224x224的输入图片训练分类网络,经过大概160个epoch后,将输入图片的大小调整到448x448,再训练10个epoch,使得网络能够在一定程度上调整参数来更好地适应高分辨率的输入,最后再fine tune检测网络(后面会提到,YOLOv2中,检测网络的输入为448x448的图像)。这一技巧使得mAP提升了将近4%

(3) Convolutional With Anchor Boxes

YOLOv1中,最后的全连接层直接预测Bbox的坐标值。Faster R-CNN中通过卷积层预测Bbox相对于anchor box的偏差。Faster R-CNN中的这种方式使得问题变得简单,网络学习起来更容易。

YOLOv2借鉴了Faster R-CNN的思想,引入了anchor box。作者去掉了原始网络最后一个pooling层使得特征图具有更高的分辨率。此外,作者将输入图片的大小缩减为414x416(原先为448x448),这么做的原因在于,作者希望特征图的高和宽是奇数,这样就能有一个中心(center cell),因为对于大目标而言,它们的中心往往倾向于落在图片的中心,又因为特征图的高和宽是奇数,这样就可以通过一个cell来对目标进行预测而不需要多个cell来对其进行预测。YOLOv1网络的下采样率为32,对于416x416的输入来说,最终会在13x13的特征图上进行预测。
YOLOv1会将输入图像分成7x7的网格,每个网格预测2个bounding box,因此一共预测98个bounding box,而在YOLOv2中,通过引入anchor box,能够预测超过1千个bounding box。例如:feature map大小为13x13,每个grid cell生成9个anchor box,那么就能够预测13x13x9=1521个bounding box。不过后续我们进一步能够看到,最终每个grid cell是生成5个anchor box。(在Faster RCNN中,输入大小为1000*600时,bounding box的数量大概是6000,在SSD300中,bounding box的数量是8732。增加bounding box数量是为了提高目标的定位准确率。)

没有anchor box时,模型的mAP为69.5%,找回率为81%,引入anchor box之后,模型的mAP为69.2%,召回率为88%。虽然mAP有些许降低,但召回率的增加意味着模型有更多的提升空间。

(4) Dimension Cluster

在Faster R-CNN或者SSD中,anchor box的大小和比例是根据工程经验设定的,在训练中会不断调整anchor box的尺寸大小。作者指出,如果一开始就能采用更好的prior(anchor box)的话,那网络也能够更好地进行预测。于是作者使用K-means算法对训练集中的bounding box(GT box)做聚类从而找到更合适的prior。

在使用K-means算法时,作者指出,如果采用欧氏距离来衡量差异的话,较大的box会比较小的box带来更大的误差。而我们希望K-means算法确定的prior能够带来更好的IOU(最终的预测结果与目标的尺寸无关),于是作者在使用K-means算法时使用如下计算记录的公式:

作者做了一系列的实验并绘制了不同k值下的平均IOU,得到以下图。左图是k值与IOU的关系,两条曲线代表两个不同的数据集。当k=5时能够更好地均衡模型复杂度和高召回率。右图展示了两个不同的数据集中选出来的5个prior,可以发现其形状比较类似。由K-means聚类算法得到的prior和人工设定的anchor box有着明显的差异,K-means聚类得到的prior中高瘦的比较多,矮胖的比较少(哈哈,高瘦估计比较帅)。

此外,作者对比了K-means算法聚类得到的prior和和人工指定的anchor box之间的差异(prior其实就可以理解为anchor box,只不过论文中用prior这个单词)。作者计算了最接近某个prior(由K-means算法得到)和anchor box(人工设计)的这些GT box的平均IOU值,发现,5个prior带来的avg IOU为61,9个anchor box(Faster R-CNN中就是用了9个)带来的avg IOU为60.9,而9个prior带来的avg IOU是67.2,效果更好。这意味着,用K-means算法聚类得到的prior效果确实更好。
(5) Direct location prediction

在引入anchor box之后,作者遇到了第二个问题,也就是,如果直接采用类似于Faster R-CNN中的相对于anchor box的回归预测,模型训练的前期很不稳定,而这种不稳定性主要来自于对(x,y)的预测。在Faster R-CNN中,是通过以下两个公式(原论文中公式稍微有点问题,这里调整了一下)来得到x和y的值:

x=(t_{x}*w_{a})+x_{a}

y = (t_{y}*h_{a})+y_{a}

实际上,Faster R-CNN模型预测的是t_{x}t_{y},也就是预测的是offset。其中,x_{a}y_a是anchor box的中心坐标,w_{a}h_{a}是anchor box的宽和高,x和y是中心坐标的预测值,t_{x}t_{y}是偏移量。

根据这两个式子,当t_{x}预测为1时,那么这个anchor box的中心点就会向右调整到移动了anchor box的宽度这么长的距离,而 当t_{x}预测为-1时,那么这个anchor box中心点就会向左调整到移动了anchor box的宽度这么长的距离。

由于这两个式子没有限制anchor box移动的距离,就会导致调整后的anchor box可能出现在任一处。权重随机初始化的情况下,模型需要花费较长的时间使得offsets预测相对稳定下来。

因此,YOLOv2并不是预测基于anchor box的offsets,而借鉴YOLOv1,预测的是相对于grid cell的坐标值,这也意味着预测的值是在0-1之间。于是可以通过logistic(sigmoid)激活函数将预测值限制在这个范围。

同样,对于feature map中的每个grid cell来说,会为每个bounding box预测5个值:t_{x},t_{y},t_{w},t_{h},t_{o}。有了这几个预测值之后,就可以通过以下公式调整anchor box的位置和尺寸。

b_{x} = \sigma (t_{x})+c_{x}

b_{y}=\sigma (t_{y})+c_{y}

b_{w}=p_{w}e^{t_{w}}

b_{y}=p_{h}e^{t_{h}}

Pr(object)\ast IOU(b,object)=\sigma(t_{o})

其中,(c_{x},c_{y})表示当前的grid cell的坐标(相较于左上角的坐标),p_{w},p_{h}表示anchor box(prior)的宽和高。\sigma(t_{o})也就是置信度,其值也就是IOU。

具体如下图所示。蓝色框即为调整后的bounding box。

因为限制了位置坐标,网络的学习更稳定。作者指出,采用K-means算法得到prior加上直接预测坐标的方式使得模型的mAP提升了近5%。也就是最前面图中的74.4和69.6。

(6) Fine-Grained Features

Faster R-CNN和SSD中是在不同的预测特征层上进行预测,从而能够更好地检测不同尺寸的目标。YOLOv2中,作者添加了pass through layer使得最终13x13的特征图能够包含来自于浅层特征图的信息,因为底层的特征图包含了图像更多细节的信息,使得对于小目标的检测更有效。
关于pass though layer,作者在原论文中提到:The passthrough layer concatenates the higher resolution features with the low resolution features by stacking adjacent features into different channels instead of spatial locations, similar to the identity mappings in ResNet。也就是,ResNet是在空间位置上将元素进行相加,而pass through layer是将高分辨率的特征图上的元素在通道上进行堆积。具体如下图所示。左边特征图上对应数字所在位置的值放在会在同一个通道上,最后得到右边的结果。可以看到,经过这样的操作,特征图的大小变成原来的一半,而通道数量变为原来的4倍。也就是原论文中提到的:This turns the 26 × 26 × 512 feature map into a 13 × 13 × 2048 feature map。也就是,在backbone网络中26x26大小的特征图上加一个分支,经过pass through layer之后得到13x13大小的特征图,再与13x13的特征图进行拼接。

通过融合底层信息,使得模型的mAP提升了1%。

(7) Multi-Scale Training

YOLOv1中输入图像大小为448x448,YOLOv2中添加了anchor box,输入图像大小调整为416x416。又由于YOLOv2中只用了卷积层和池化层,因此对于输入图像的大小并没有限制。

为了提升模型的鲁棒性,在训练过程中,作者不再固定图像输入尺寸,而是每隔10个batch就随机选择一种新的图片尺寸。由于YOLOv2的缩放因子(下采样率)是32(416x416-->13x13),所以输入网络的图像尺寸都是32的倍数,也就是,随机从{320,352,...,608}中选择一种尺寸。
所以,同样的网络能够对不同分辨率大小的图像都有很好的检测效果。YOLOv2在较小的图像上预测速度更快一些,精度也非常高。对于288x288的输入来说,YOLOv2速度达到90FPS,mAP几乎赶上Fast R-CNN。所以YOLOv2对于小GPU、高帧率视频以及多通道视频流的场景来说是比较适合的。在输入为高分辨率图像时,YOLOv2的mAP也达到了78.6。

下图展示了YOLOv2在VOC2007测试数据集上的性能,可以看到,总体上来说,YOLOv2的mAP相较于其他检测网络来说是非常优秀的。而Multi-Scale Training的方式使得其在准确率和速度之间取得了一个不错的平衡。

3.Faster 部分

后续补充

为啥叫YOLO9000:通过yolov2的框架在Pascal VOC数据集和ImageNet数据集上联合训练,最终能够检测超过9000的目标数。

4.Stronger部分

后续补充

猜你喜欢

转载自blog.csdn.net/m0_55308155/article/details/125626037