13.YOLO系列算法详解1:YOLOV2

2019-03-11 14:50:58 浏览数 (3)

这部分基本是在YOLOV1的基础上的一些改进,并且还提出了YOLO9000(9000类检测,恐怖)。 文章主要是三个部分,名字也起的很简洁: BetterFaster,Stronger

1. Better。

作为YOLO来说,有两个缺点:

  1. 定位不够准确。
  2. 和基于region proposal类的方法相比召回率更低。
1.1 Batch Normalization.

简单来讲就是在每个卷积层的后面(也就是每个卷积层的输入)都加了BN层,这样会收敛快一点,加入BN之后把dropout去掉,实验证明可以提高2%的mAP. (作者也就只讲了这一段,所以就这样了)

1.2 High Resolution Classifier.

这个主要是介绍了一下检测模型的一般训练策略。一般都不会从随机初始化所有的参数来开始的,一般都是用预训练好的网络来fine-tuning自己的网络,预训练的网络一般是在ImageNet上训练好的分类网络。 在fine-tuning的时候:

  • YOLOV1预训练的时候使用224*224的输入,检测的时候采用的是448*448的输入,这会导致分类切换到检测的时候,模型需要适应图像分辨率的改变。
  • YOLOV2中将预训练分成两步:①:先用224*224的输入来训练大概160个epoch, 然后再把输入调整到448*448再训练10个epoch,然后再与训练好的模型上进行fine-tuning,检测的时候用448*448就可以顺利过渡了。

这个方法竟然提高了4%的mAP.

1.3 Convolutional With Anchor Boxes

这段作者简单借鉴了Faster Rcnn的做法,引入anchor. YOLOV2主要做了下面的改变:

  1. 删除了全连接层和最后一个pooling层,使得最后的卷积层可以有更高的分辨率。
  2. 缩减网络,用416*416的输入代替448*448,这样做是希望得到的特征图都是奇数大小的宽和高,奇数大小的宽和高会使得每个特征图在划分cell的时候只有一个中心cell,因为大的目标一般会占据图像的中心,所以希望用一个中心cell去预测,而不是四个中心cell。

YOLOv1中将输入图像分成77的网格,每个网格预测2个bounding box,一共只有772=98个box。 YOLOv2中引入anchor boxes,输出feature map大小为1313,每个cell有5个anchor box预测得到5个bounding box,一共有13135=845个box。增加box数量是为了提高目标的定位准确率。 作者:零尾 来源:CSDN 原文:https://blog.csdn.net/lwplwf/article/details/82895409

按照作者的说法,这个改进的的效果是非常small的,YOLOV1只需要预测98个box,而加入anchor的话快要上千,召回率从0.81上升到0.88, mAP从69.5下降到69.2。

1.4:Dimension Clusters

作者说他们在试图吧anchor box用在YOLO的时候遇到了两个issues。

  1. Faster R-CNN中的anchor box的大小和比例是按照经验来设定的(hand picked),然后在训练的时候调整anchor box的尺寸,

作者想的是可不可以通过一定的方式事先确定这样的候选框呢,最终作者采用了K-means方法,但是如果用标准的K-means(欧式距离)的话会导致大的box会比小的box获得更大的误差,更准确的方式是使用IOU来算,所以作者定义了IOU距离,按照IOU越高距离越小的需求,很容易写出这样的公式:

上图是在VOC和COCO上的聚类结果,综合来说,随着K的增加,平均的IOU是增加的,但是为了综合考虑模型的复杂度和召回率。最终选择K=5

作者还发现:The cluster centroids are significantly different than hand-picked anchor boxes. There are fewer short, wide boxes and more tall, thin boxes.这个是个无关紧要的结论了。

最终实验对比发现:

  1. 采用聚类的5中box就能达到Fast-RCNN 9中box的效果。
  2. 采用聚类分析得到的先验框比手动设置的平均的IOU值更高,模型更容易训练和学习。


未完待续

0 人点赞