YOLO V2

YOLOv2YOLOv1的改进,在保证速度的同时mAP更高,并保持着自己作为one-stage方法的优势YOLO V2

1Batch Normalization

Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用droput。使用Batch Normalization后,YOLOv2mAP提升了2.4%

2High Resolution Classifier

目前大部分的检测模型都会在先在ImageNet分类数据集上预训练模型的主体部分(CNN特征提取器),由于历史原因,ImageNet分类模型基本采用大小224*224图片作为输入,分辨率相对较低,不利于检测模型。所以YOLOv1采用224*224分类模型预训练后,将分辨率增加448*448并使用这个高分辨率在检测数据集上finetune。但是直接切换分辨率,检测模型可能难以快速适应高分辨率。所以YOLOv2增加了在ImageNet数据集上使用448*448分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。使用高分辨率分类器后,YOLOv2mAP提升了约4%

3Convolutionlal With Anchor Boxes

YOLOv2移除了YOLOv1中的全连接层而采用了卷积和anchor boxes来预测边界框。为了使检测所用的特征图分辨率更高,移除其中的一个pool层。在检测模型中,YOLOv2不是采448*448图片作为输入,而是采用416*416大小。因为YOLOv2模型下采样的总步长为32,对于416*416大小的图片,最终得到的特征图大小为13*13,维度是奇数,这样特征图恰好只有一个中心位置。对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证最终的特征图有奇数个位置

YOLOv2使用anchor boxes之后,每个位置的各个anchor box都单独预测一套分类概率值。

使用anchor boxes之后,YOLOv2mAP有稍微下降(0.2%),YOLOv2的召回率大大提升,由原来81%88%

YOLO V2

4Dimension Clusters

Faster R-CNNSSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析。因为设置先验框的主要目的是为了使得预测框与ground truthIOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标

d(box, centroid) = 1 − IOU(box, centroid)

VOCCOCO数据集上的聚类分析结果,随着聚类中心数目的增加,平均IOU值(各个边界框与聚类中心的IOU的平均值)是增加的,但是综合考虑模型复杂度和召回率,作者最终选取5个聚类中心作为先验框。对于两个数据集(w,h

COCO: (0.57273, 0.677385), (1.87446, 2.06253), (3.33843, 5.47434), (7.88282, 3.52778), (9.77052, 9.16828)

VOC: (1.3221, 1.73145), (3.19275, 4.00944), (5.05587, 8.09892), (9.47112, 4.84053), (11.2364, 10.0071)

 

YOLO V2

YOLO V2

仅仅5boxes的召回率就和Faster R-CNN9种相当。说明K-means方法的引入使得生成的boxes更具有代表性,为后面的检测任务提供了便利。

5Direct location prediction(直接位置预测

在使用像Faster-RCNNSSD中那样来进行位置偏离计算的方法来预测predicted box的位置时发现训练时非常容易出现震荡甚至无法收敛,尤其是在最开始的几次迭代的时候。大多数不稳定因素产生自预测Bounding Box的中心坐标(x,y)位置的时候。

x = (tx ∗ wa) + xa

y = (ty ∗ ha) + ya

YOLO V2        YOLO V2    YOLO V2

bx,by)就是cx,cy这个Cell附近Anchor Box针对预测值tx,ty)得到Bounding Box的坐标预测结果,同时可以发现这种方式对于较远距离Bounding Box预测值tx,ty)能够得到很大的限制。

YOLO V2

结合聚类分析得到先验框与这种预测方法,YOLOv2mAP值提升了约5%

6Fine-Grained Features 

YOLOv2的输入图片大小为416*416,经过5maxpooling之后得到13*13大小的特征图,并以此特征图采用卷积做预测。13*13大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体

YOLOv2提出了一种passthrough层来利用更精细的特征图。YOLOv2所利用的Fine-Grained Features26*26大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为26*26*512的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个2*2的局部区域,然后将其转化为channel维度,对于26*26*512的特征图,经passthrough层处理之后就变成了13*13*2048的新特征图(特征图大小降低4倍,而channles增加4倍,图6为一个实例),这样就可以与后面的13*13*1024特征图连接在一起形成13*13*3072的特征图,提升1%

YOLO V2

YOLO V2

7)多尺度训练(Muinti-Scale Training)(使mAP提升1%

YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值{320,352,…,608},输入图片最小为320*320,此时对应的特征图大小为10*10(不是奇数了,确实有点尴尬),而输入图片最大为608*608,对应的特征图大小为19*19,在训练过程,每隔10iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。

YOLO V2

8New NetworkDarknet-19

使用Darknet-19之后,YOLOv2mAP值没有显著提升,但是计算量却可以减少约33%

YOLO V2

 

训练

YOLOv2的训练主要包括三个阶段。第一阶段就是先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为224*224,共训练160epochs。然后第二阶段将网络的输入调整为448*448,继续在ImageNet数据集上finetune分类模型,训练10epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。第三个阶段就是修改Darknet-19分类模型为检测模型,并在检测数据集上继续finetune网络。网络修改包括(网路结构可视化):移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个3*3*2014卷积层,同时增加了一个passthrough层,最后使用1*1卷积层输出预测结果,输出的channels数为n_anchor*(5+n_class).

YOLO V2

YOLO V2

损失函数

YOLO V2

在计算obj置信度时,YOLOv1target=1,而YOLOv2增加了一个控制参数rescore,当其为1时,target取预测框与ground truth的真实IOU值。对于那些没有与ground truth匹配的先验框(与预测框对应),除去那些Max_IOU低于阈值的,其它的就全部忽略,不计算任何误差。

第一项loss是计算background的置信度误差,但是哪些预测框来预测背景呢,需要先计算各个预测框和所有ground truthIOU值,并且取最大值Max_IOU,如果该值小于一定的阈值(YOLOv2使用的是0.6),那么这个预测框就标记为background,需要计算noobj的置信度误差。

第二项是计算先验框与预测框的坐标误差,但是只在前12800iterations间计算,我觉得这项应该是在训练前期使预测框快速学习到先验框的形状。

第三大项计算与某个ground truth匹配的预测框各部分loss值,包括坐标误差、置信度误差以及分类误差。

 

先说一下匹配原则,对于某个ground truth,首先要确定其中心点要落在哪个cell上,然后计算这个cell5个先验框与ground truthIOU值(YOLOv2bias_match=1),计算IOU值时不考虑坐标,只考虑形状,所以先将先验框与ground truth的中心点都偏移到同一位置(原点),然后计算出对应的IOU值,IOU值最大的那个先验框与ground truth匹配,对应的预测框用来预测这个ground truth

另外需要注意的一点是,在计算boxes的和误差时,YOLOv1中采用的是平方根以降低boxes的大小对误差的影响,而YOLOv2是直接计算,但是根据ground truth的大小对权重系数进行修正:l.coord_scale * (2 - truth.w*truth.h),这样对于尺度较小的boxes其权重系数会更大一些,起到和YOLOv1计算平方根相似的效果(参考YOLO v2 损失函数源码分析)。

 

原文献:https://arxiv.org/pdf/1612.08242.pdf

参考博客:https://blog.csdn.net/shanlepu6038/article/details/84778770

https://blog.csdn.net/ChuiGeDaQiQiu/article/details/81229245

https://blog.csdn.net/Gentleman_Qin/article/details/84349144