YOLOv2是在YOLOv1的基础上进行的改进,如下表,yolov2在yolov2的基础上添加的一些结构或技巧后在voc2007数据集上mAP的变化情况。
下面对上面提到的改进策略进行详细的介绍。
Batch Normalization
应用batch Normalization可以提升模型收敛速度,并且起到了一定正则化的作用,降低了模型过拟合。在YOLOV2中,每个卷积层后面都添加了Batch Normalization层,并且删除了dropout,使用了Batch normalization,yolo mAP提升了2.4%。
High Resolution Classifier
目前大部分检测模型都是用ImageNet分类数据集上预训练模型,大多数的分类模型采用的输入分辨率都小于256*256,在yolov1中采用了224*224的分类预训练模型,之后用448*448的分辨率进行测试。但是由于直接切换分辨率,检测模型可能很难快速适应。所以在yolov2中增加了在ImageNet数据集上使用448*448输入来微调分类网络,这个过程用了10epochs。这可以使网络更好的适应高分辨的输入,对检测时的微调结果也会更好。使用高分辨率分类器后,yolov2的mAP提升了4%。
Convolutional with Anchor Boxes
yolov1直接使用全连接层来预测目标框的坐标,Yolov2借鉴了Faster R-CNN中RPN网络的先验框策略。RPN对CNN特征提取得到的特征图进行卷积来预测每个位置的边界框以及置信度(是否含有物体),并且各个位置设置不同尺度和比例的先验框,所以RPN预测的是边界框相对于先验框的offsets值,使用先验框会使模型更容易学习。
yolov2剔除了yolov1中的全连接层,使用anchor boxes来预测目标框。为了使检测所用的特征图分辨率高,删除了一个池化层。yolov2不是采用448*448作为输入,而是用416*416,这样做是因为yolov2模型下采用的总步长是32,对于416*416大小的图片,最终得到的特征图大小是13*13,维度是奇数,这样特征图就只有一个中心位置。对于一些大物体,它们中心点往往落入图片的中心位置,此时使用特征图的一个中心点去预测这些物体的边框相对容易些。所以在YOLOv2设计中要保证最终的特征图有奇数个位置。
yolov2使用了anchor boxes每个位置的各个anchor box预测的值与yolov1相同,包含边界框位置和大小,物体的概率和预测框与ground truth 的IOU。YOLOV1只能预测98个边界框,而YOLOv2使用anchor boxes之后可以预测上千个边界框,所以使用anchor boxes之后,yolov2的召回率大大提升,由原来的81%升至88%。
Dimension Clusters
通常目标框的维度是手动挑选的,然后网络通过学习来适当的调整目标框,如果起始选择的比较好,则训练的过程也相对容易一些。Yolov2不选择手动挑选,在训练时应用k-means聚类来做最优的分析。选择传统的Euclidean距离计算方法,会使得大目标框的误差要高于小目标框。设置先验框的主要目的是为了使预测框与ground truth的IOU更好,所以聚类分析时备选box与聚类中心box之间的IOU值作为距离指标:
Fig2为聚类框在VOC和COCO数据集上的聚类分析结果,随着聚类中心数目的增加,平均IOU值也是增加的,综合考虑模型的复杂度和召回率,作者选择5个聚类中心作为先验框。
Direct location prediction
使用anchor boxes来预测边界框相对于先验框的offsets,边界框的实际中心坐标(x,y),根据预测的坐标偏移值,先验框的尺度
以及中心坐标
来计算:
当时边界框将向右偏移先验框的一个宽度大小,当
时边界框将向左偏移先验框的一个宽度大小,因此每个anchor box都能落在图片中的任何位置,这样会导致训练的不稳定性。替代使用偏移框我们采用yolov1的方法,就是预测边界框的中心点相对于cell左上角的相对偏移值,这样数据值就可以落到0到1之间。
每个cell预测5个框,每个边界框预测包含4个值,cell的左上角坐标是
,先验框的宽度和高度分别为
和
,则预测的关系式可以表示为:
采用这种方法预测位置训练过程更容易,模型也更稳定,结合聚类分析得到先验框与这种预测方法,YOLOv2的mAP值提升了约5%。
Fine-Grained Features
Yolov2预测的特征图大小是13*13,对于大的目标是足够了,但对于小目标则需要更精细的特征图(Finer grained features).FAster RCNN和SSD都采用了多尺度的特征图来检测不同大小的物体,前面精细的特征图可以用来预测小物体。本文作者采用了不同的策略,简单的增加passthrough层,用26*26大小的特征图来获取精细特征。
passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面特征图维度是后面特征图的2倍。对于26*26*512的特征图经过passthrough层处理后变成了13*13*2048的新特征图。使用Fine-Grained Features之后YOLOv2的性能有1%的提升。
Multi-Scale Training
YOLOv2只有卷积层和池化层,所以其输入可以不限于416*416.为了增强模型的鲁棒性,Yolov2采用了多尺度输入的训练策略。具体来说就是每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOV2的下采样步长是32,所以输入图片大小选择一系列32倍的数值:{320,352,......608},最小的输入图片大小是320*320,最大的是608*608。在训练过程中每10个batches我们的网络就自由选择一个新的输入图片的尺寸值。
采用多尺度训练策略,yolov2可以适应不同大小的图片,并且预测出更好的结果。yolov2在低分辨时,速度快,但mAP值略低,采用高分辨率时,mAP值更高,但速度略有下降
模型结构 Darknet-19
Yolov2采用了一个新的模型称为Darkent-19,它有19个卷积层和5个maxpooling层,如下图所示
与VGG模型类似,采用3*3的卷积,2*2maxpooling后,特征图的维度降低2倍。与NIN(Network in Network)类似,Darkent-19最终采用global average pooling做预测,并且在3*3卷积之间使用1*1卷积来压缩特征图以降低模型计算量和参数。Darknet-19每个卷积层后面同样使用了batch norm层以加快收敛速度,降低模型过拟合。在Imagenet分类数据集上,Darknet-19的top-1准确率为72.9%,top-5的准确率为91.2%.
训练
yolov2训练过程包括三个过程:
- 第一个过程是先用Imagenet分类数据预训练Darknet-19,共训练160epochs,输入的尺寸是224*224;
- 第二个过程是将网络调整输入为448*448,继续训练10epochs,此时分类的模型top-1准确率为76.5%,top-5的准确率为93.3%;
- 第三个过程是在修改分类网络为检测网络后训练,网络修改包括:移除最后一个卷积层、global averagepooling层以及softmax层,并新增加了三个3*3*1024卷积层,同时增加一个passthrough层,最后使用1*1卷积层输出预测结果,输出的channels数为num_anchors*(5+num_classes),此过程共训练160个epochs。