论文地址: YOLO9000: Better, Faster, Stronger
如果对 YOLO 没有概念的朋友,可以先看看YOLO V1 的思路。
在YOLO v1 之后,深度学习出现了许多trick,例如batch Normalization , 多尺度训练等,为了提高检测精度,v2也借鉴 RCNN 体系的anchor box。
Better:
1、加入BN
Batch Normalization(批归一化)map 提升 2%
BN 已经成为一种标配,加入BN 后,可以去掉 dropout。
2、高分辨率预训练
High Resolution Classifier map 提升 %4
3、 Convolutional With Anchor Boxes
在v1上与groundtrue 最接近的框生成loss ,另一个框不做修正,这样两个框在大小,类别上有了分工。但是在全图上直接预测W,H对网络来说难度大,所以回归精度差。所以在V2 上预测 与anchor 的offset。
每个格点指定n个anchor,训练时,最接近ground true 的框产生loss,其余的框不产生loss。引入anchor 后,map 略有下降,但是召回率大幅提升。因为每个格子能预测的物体数增加了。
4、anchor 通过k-mean聚类生成
这是一个创新点。k-mean 需要预设聚类类别数,比如要生成9种anchor , 那k = 9 。而在 rcnn 种anchor 是通过三种宽高比1:1,2:1,1:2组合得到。
定义聚类类点(矩形框(w,h),于中心点无关)距离:
假设所有框的中心点都为(0,0)。分别计算矩形框(wj,hj)与每个类别中心(wci,hci)的距离,距离越小,则矩形框就属于这个类别,同时更新类别中心(wci,hci)。
5、位置预测
Yolo中的位置预测,就是相对于左上角的格点坐标预测偏移量。
其中, tx, ty 是学习参数,xa,ya,wa,ha是先验框anchor的值(初始化已知)。x, y是预测框中心。
作者在引入anchor box的时候遇到的第二个问题:模型不稳定,尤其是在训练刚开始的时候。作者认为这种不稳定主要来自预测box的(x,y)值。我们知道在基于region proposal的object detection算法中,是通过预测下图中的tx和ty来得到(x,y)值,也就是预测的是offset。而作者在此是直接预测(x,y)坐标。
由于 tx,ty不受限制,预测框中心可能会出现任何位置,导致早期训练阶段极其不稳定。而我们知道,其实预测框中心可以只由其左上角的anchor负责预测即可,因此可以将预测值限制在0-1(sigmoid解决),充分利用了网格的特点。因此调整预测公式:
其中,网络预测值 (tx,ty,tw,th), to)**其中anchor 先验值为(cx,cy,pw,ph)**已经是归一化到特征图上。
深度网络学习的目标越明确,任务越简单,则最终学习到的效果就会越好,学习的精度越高。不做任何限制的学习是不明智的,会使得网络丧失学习最优方向。
(Cx,Cy)为当前grid cell相对于图像的左上角的距离,以grid cell为单位,则当前cell的左上角坐标为(1,1);pw,ph为为先验框的宽和高,其值也是相对于特征图的大小,在特征都中每个cell的大小为1。这里记特征图的大小为(W,H)(YOLO V2为(13,13),这样就可以将边框相对于图像的大小和位置计算出来:
在将上面得到的bx,by,bw,bH
乘以图像的宽和高(像素为单位)就可以求得边框在图像的位置。
6、passthrough层检测细粒度特征
map 提升 1%。
对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO2中输入416416经过卷积网络下采样最后输出是1313),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。
YOLO2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说,就是在最后一个pooling之前,特征图的大小是2626512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。
图中示例的是1个44拆成4个22:
7、多尺度训练
mAP有1.4%的提升。
因为整个网络下采样倍数是32,作者采用了{320,352,…,608}等10种输入图像的尺寸,这些尺寸的输入图像对应输出的特征图宽和高是{10,11,…19}。训练时每10个batch就随机更换一种尺寸,使网络能够适应各种大小的对象检测。
8、hi-reslution detector
如果用较高分辨率的输入图像,比如544*544,则mAP可以达到78.6,有1.8的提升
速度更快(Faster)
YOLO2提出了Darknet-19(有19个卷积层和5个MaxPooling层)网络结构。DarkNet-19比VGG-16小一些,精度不弱于VGG-16,但浮点运算量减少到约1/5,以保证更快的运算速度。
loss
误差依然包括边框位置误差、置信度误差、对象分类误差。
公式中:
预测边框中,与真实对象边框IOU最大的那个,其IOU<阈值Thresh,此系数为1,即计入误差,否则为0,不计入误差。YOLO2使用Thresh=0.6。
前128000次迭代计入误差。注意这里是与先验框的误差,而不是与真实对象边框的误差。可能是为了在训练早期使模型更快学会先预测先验框的位置。
一个边框负责预测一个真实对象(边框内有对象)。
不同类型误差的调节系数不同。