赞
踩
YOLO v1虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了提升定位准确度,改善召回率,yolov2在yolov1的基础上提出了几种改进策略,如下图所示,一些改进方法能有效提高模型的mAP。
yolov2中在每个卷积层后加Batch Normalization(BN)层,去掉了dropout层。 Batch
Normalization层可以起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。YOLO v2通过使用BN层使得mAP提高了2%。
BN做法:
位于Y = weight*X+Bias之后,激活函数(非线性函数)变换之前,即作用在Y上,作为激活函数输入。
过程:
#input={x1,x2,x3…xn}
#1 计算 x1-xn的均值u
#2 计算x1-xn的方差v
#3 e是一个小小偏置,防止分母趋向于0
x_new = (x–u)/(sqrt(v^2)+e)
#4 在对结果进行scale于shift操作
x_out = scale*x_new + shift
ps:第四步存在的原因是batch_normal后,数据趋向标准正态,会导致网络表达能力变差,这里加入后标准正态分布有些偏移,变得不那么标准了。这两个参数时学习而来。
目前的大部分检测模型都会使用主流分类网络(如vgg、resnet)在ImageNet上的预训练模型作为特征提取器,而这些分类网络大部分都是以小于256 × 256的图片作为输入进行训练的,低分辨率会影响模型检测能力。
yolov2将输入图片的分辨率提升 448×448,为了使网络适应新的分辨率,yolov2先在ImageNet预训练模型基础上以 448×448的分辨率对网络进行10个epoch的微调,让网络适应高分辨率的输入。通过使用高分辨率的输入yolov2的mAP提升了约4%。
ps:ImageNet是数据集,尺寸224X224,
yolov1利用全连接层直接对边界框进行预测,导致丢失较多空间信息,定位不准。 yolov2去掉了全连接层。
使用Anchor Boxes预测边界框,同时为了得到更高分辨率的特征图, YOLOv2还去掉了一个池化层。由于图片中的物体都倾向于出现在图片的中心位置,若特征图恰好有一个中心位置,利用这个中心位置预测中心点落入该位置的物体,对这些物体的检测会更容易。所以总希望得到的特征图的宽高都为奇数。
yolov2通过缩减网络,使用416×416的输入,模型下采样的总步长为 32,最后得到13×13的特征图,然后对 13×13的特征图的每个cell预测5个anchor boxes,对每个anchor box预测边界框的位置信息、置信度和一套分类概率值。使用anchor boxes之后,yolov2可以预测 13 × 13 × 5 = 845个边界框,模型的召回率由原来的81%提升到88%,mAP由原来的69.5%降低到69.2%.召回率提升了7%,准确率下降了0.3%。
在Faster R-CNN和SSD中,先验框都是手动设定的,带有一定的主观性。 yolov2采用k-means聚类算法对训练集中的边界框做了聚类分析,选用boxes之间的IOU值作为聚类指标。综合考虑模型复杂度和召回率,最终选择5个聚类中心,得到5个先验框(可以看成w与h比例),通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均IOU值,这使得模型更容易训练学习。
yolov2采用Darknet-19(参考了Vgg19),其网络结构如下图所示,包括 19个卷积层和 5个max pooling层,主要采用3×3卷积和1×1卷积,每个卷积层后使用BN层以加快模型收敛同时防止过拟合。最终采用global avg pool 做预测。采用后yolov2,模型的mAP值没有显著提升,但计算量减少了。
ps:这里1×1卷积可以压缩特征图通道数以降低模型计算量和参数,
Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,会导致模型不稳定,加长训练时间。yolov2沿用 yolov1的方法,根据所在网格单元的位置来预测坐标,则Ground Truth的值介于0到1之间。网络中将得到的网络预测结果再输入sigmoid函数中,让输出结果介于0到1之间。设一个网格相对于图片左上角的偏移量是cx,cy。先验框的宽度和高度分别是 pw 和 ph ,则预测的边界框相对于特征图的中心坐标(bx,by) 。bw、bh的计算公式如下图所示。YOLO v2结合Dimention Clusters,通过对边界框的位置预测进行约束,使模型更容易稳定训练,这种方式使得模型的mAP值提升了约5%。
yolov2借鉴SSD使用多尺度的特征图做检测,提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。yolov2提取Darknet-19最后一个max pool层的输入,得到26×26×512的特征图。经过1×1×64的卷积以降低特征图的维度,得到26×26×64的特征图,然后经过pass through层的处理变成13x13x256的特征图(抽取原特征图每个2x2的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与13×13×1024大小的特征图连接,变成13×13×1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features,yolov2的性能提升了1%。passthroug具体是怎么1拆4的呢?并不是简单的“两刀切4块”,而是在每个2×2的小区域上都选择左上角块。
ps:这也是yolov2替换yolov1全联接层重要一环,同时可以更好的检测小目标。
训练主要包括以下三个阶段:
第①阶段:先在ImageNet分类数据集上预训练Darknet-19,此时模型输入224×224,共训练160个epochs。
第②阶段:将网络的输入调整为448×448,继续在ImageNet数据集上finetune分类模型,训练10个epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。
第③个阶段:修改Darknet-19分类模型为检测模型:即移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个 3 × 3 × 2014卷积层,同时增加了一个passthrough层,最后使用1×1卷积层输出预测结果,并在检测数据集上继续finetune网络。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。