目标检测:YOLOV2

发表于CVPR2017

1YOLOV2对比YOLOV1改进的尝试:

1)加入了BN层:YOLOv2的第二个改进是在网络中加入了Batch Normalization,使用Batch Normalization对网络进行优化,让网络提高了收敛性,同时还消除了对其他形式的正则化(regularization)的依赖。有了BN便可以去掉用dropout来避免模型过拟合的操作。提升mAP约2%。

2)采用更高分辨率的分类器(HighResolution Classifier):采用448×448的大分辨率输入。这种高分辨率分类网络使我们的mAP几乎提高了4%。

3)尝试基于anchor的机制:作者认为基于anchor偏移的预测,相比于直接预测坐标而言能简化边界框预测的问题,也能使网络更加容易学习和收敛。(Faster R-CNN并不是直接预测坐标值。Faster R-CNN只是用RPN种的全连接来为每一个box预测offset(坐标的偏移量或精修量)以及置信度(得分)。(说明:faster r-cnn的box主体来自anchor,RPN只是提供精修anchor的offset量))

4)Dimension Clusters:在Faster RCNN、SSD等网络中的预设anchor,基本都是根据经验得到,或手动挑选的。YOLOV2采用训练集中所有目标bbox的位置通过k-means方法聚类得到相应的anchor。一开始就选用更合适的anchor,可以使网络学习的更轻松。

5)Direct location prediction:当在YOLO中使用anchor boxes机制的时候,模型不稳定。尤其是早期迭代的时候。不稳定的因素主要来自于为box预测(x,y)位置的时候。这个公式没有加以限制条件,所以任何anchor box都可以偏移到图像任意的位置上,而不是只在本网格中。随机初始化模型会需要很长一段时间才能稳定产生可靠的offsets(偏移量)。我们并没有“预测偏移量”,而是遵循了YOLO的方法:直接预测对于网格单元的相对位置(通过sigmod函数变到0~1之间)。

6)Fine-Grained Features:调整后的yolo将在13X13的特征图上做检测任务。虽然这对大物体检测来说用不着这么细粒度的特征图,但这对小物体检测十分有帮助。Fast R-CNN和SSD都是在各种特征图上做推荐网络以得到一个范围内的分辨率。YOLOV2采用不同的方法,只添加了一个passthrough层,从26x26的分辨率得到特征。

Passthrough层将不同分辨率的低层特征和高层特征进行融合

高分辨率的低层特征图如下图,生成4个低分辨率的特征图,通道数变为4倍,再与低分辨率的高层特征图进行concat融合

7)multi-scale training:用多种分辨率的输入图片进行训练

由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416x416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的epochs之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:

输入图片最小为320x320,此时对应的特征图大小为10x10,而输入图片最大为608x608,对应的特征图大小为19x19,在训练过程,每隔10个epochs随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。

2、backbone

用darknet-19作为yolo_v2的backbone网络。共有19个卷积层。

每一个卷积层包含下图三步:Conv2d,BN,LeakyReLU。conv2d是不包bias的,如果使用BN层,bias就不起任何作用。

检测网络把darknet-19最后的卷积层,平均池化层和softmax去掉,后加上后续检测如下图

最后一层的conv2d是没有BN层和激活函数,直接输出结果:(5+C)*K,其中C是类别数,K是anchor的个数。

猜你喜欢

转载自blog.csdn.net/wanchengkai/article/details/124398931