您的位置:首页 > 其它

目标检测系列(八):YOLO v2

2019-01-16 16:28 323 查看

目标检测系列(八):YOLO v2

References

  1. https://www.geek-share.com/detail/2704129422.html
  2. https://www.geek-share.com/detail/2693981151.html

《YOLO9000:Better, Faster, Stronger》

STAR

S: YOLOv1使用了end-to-end的回归方法,没有region proposal步骤,直接回归便完成了位置和类别的判定。YOLO相较于其他的state-of-the-art的检测系统有一些缺陷,主要表现在两点:
1、和Fast R-CNN相比,YOLO会产生较多的bounding boxes的定位错误。
2、和基于region proposal的检测系统相比,YOLO的Recall较低。
T: 如何提高预测的精度?
A: 在YOLOv1的基础上,使用新的网络结构(darknet19)和技巧(Batch Normalization、High Resolution Classifier、Convolutional With Anchor Boxes等),提高了检测速度和检测精度
R: better, faster, stronger

1. Better

1. Batch Normalization

CNN在训练过程中网络每层输入的分布一直在改变, 会使训练过程难度加大,但可以通过normalize每层的输入解决这个问题。新的YOLO网络在每一个卷积层后添加batch normalization,通过这一方法,mAP获得了2%的提升。batch normalization 也有助于规范化模型,可以在舍弃dropout优化后依然不会过拟合。

2. High Resolution Classifier

目前的目标检测方法中,基本上都会使用ImageNet预训练过的模型(classifier)来提取特征,如果用的是AlexNet网络,那么输入图片会被resize到不足256 * 256,导致分辨率不够高,给检测带来困难。为此,新的YOLO网络把分辨率直接提升到了448 * 448,这也意味之原有的网络模型必须进行某种调整以适应新的分辨率输入。

对于YOLOv2,作者首先对分类网络(自定义的darknet)进行了fine tune,分辨率改成448 * 448,在ImageNet数据集上训练10轮(10 epochs),训练后的网络就可以适应高分辨率的输入了。然后,作者对检测网络部分(也就是后半部分)也进行fine tune。这样通过提升输入的分辨率,mAP获得了4%的提升。

3. Convolutional With Anchor Boxes

加入了anchor boxes后,可以预料到的结果是召回率上升,准确率下降。我们来计算一下,假设每个cell预测9个建议框,那么总共会预测13 * 13 * 9 = 1521个boxes,而之前的网络仅仅预测7 * 7 * 2 = 98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%,说明可以通过进一步的工作来加强准确率,的确有改进空间。

4. Dimension Clusters(维度聚类)

想法起点:如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。

使用了K-means聚类方法类训练bounding boxes,可以自动找到更好的boxes宽高维度。可以看到,平衡复杂度和IOU之后,最终得到k值为5,意味着作者选择了5种大小的box维度来进行定位预测,这与手动精选的box维度不同。结果中扁长的框较少,而瘦高的框更多(这符合行人的特征),这种结论如不通过聚类实验恐怕是发现不了的。

当然,作者也做了实验来对比两种策略的优劣,如下图,使用聚类方法,仅仅5种boxes的召回率就和Faster R-CNN的9种相当。说明K-means方法的引入使得生成的boxes更具有代表性,为后面的检测任务提供了便利。

5. Direct location prediction(直接位置预测)

想法起点:遇到的第二个问题是模型不稳定,尤其是在早期迭代的时候。Faster R-cnn这个公式没有任何限制,使得无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点结束(我的理解是,txtx 没有数值限定,可能会出现anchor检测很远的目标box的情况,效率比较低。正确做法应该是每一个anchor只负责检测周围正负一个单位以内的目标box)。模型随机初始化后,需要花很长一段时间才能稳定预测敏感的物体位置。

tx,ty 经sigmod函数处理过,取值限定在了0~1,实际意义就是使anchor只负责周围的box,有利于提升效率和网络收敛。σ函数的意义没有给,但估计是把归一化值转化为图中真实值,使用 e 的幂函数是因为前面做了 ln 计算,因此,σ(tx)是bounding box的中心相对栅格左上角的横坐标,σ(ty)是纵坐标,σ(to)是bounding box的confidence score。

定位预测值被归一化后,参数就更容易得到学习,模型就更稳定。作者使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。

6. Fine-Grained Features(细粒度特征)

上述网络上的修改使YOLO最终在13 * 13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,但是用上细粒度特征的话,这可能对小尺度的物体检测有帮助。SSD在不同层次的特征图上产生区域建议(SSD直接就可看得出来这一点),获得了多尺度的适应性。这里使用了一种不同的方法,简单添加了一个转移层( passthrough layer),这一层要把浅层特征图(分辨率为26 * 26,是底层分辨率4倍)连接到深层特征图。

这个转移层也就是把高低两种分辨率的特征图做了一次连结,连接方式是叠加特征到不同的通道而不是空间位置,类似于Resnet中的identity mappings。

7. Multi-Scale Training

原来的YOLO网络使用固定的448 * 448的图片作为输入,现在加入anchor boxes后,输入变成了416 * 416。目前的网络只用到了卷积层和池化层,那么就可以进行动态调整(意思是可检测任意大小图片)。作者希望YOLOv2具有不同尺寸图片的鲁棒性,因此在训练的时候也考虑了这一点。

不同于固定输入网络的图片尺寸的方法,作者在几次迭代后就会微调网络。没经过10次训练(10 epoch),就会随机选择新的图片尺寸。YOLO网络使用的降采样参数为32,那么就使用32的倍数进行尺度池化{320,352,…,608}。最终最小的尺寸为320 * 320,最大的尺寸为608 * 608。接着按照输入尺寸调整网络进行训练。

这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。

在小尺寸图片检测中,YOLOv2成绩很好,输入为228 * 228的时候,帧率达到90FPS,mAP几乎和Faster R-CNN的水准相同。使得其在低性能GPU、高帧率视频、多路视频场景中更加适用。

在大尺寸图片检测中,YOLOv2达到了先进水平,VOC2007 上mAP为78.6%,仍然高于平均水准,下图是YOLOv2和其他网络的成绩对比:

2. Faster

1. Darknet-19

多数的检测系统使用VGG-16作为基础特征提取器。VGG-16是一个高精度的有效的分类网络,但是有些过于复杂。VGG-16的卷积层对一张224 * 224 的图像做一次前传计算要做306.9亿次浮点数运算。
YOLOv1使用的网络是基于GoogleNet的。该网络比VGG-16快,对一张224 * 224 的图像做一次前传计算要做85.2亿次浮点数运算,但是精度比VGG-16略低。VGG-16在ImageNet上的Top-5精度为90.0%,YOLOv1的定制网络精度为88.0%。
YOLOv2的分类网络叫做Darknet-19,Darknet-19对一张224 * 224 的图像做一次前传计算要做55.8亿次浮点数运算,在ImageNet上的Top-5精度为91.2%,比YOLOv1更快,比VGG-16更高。

3. Stronger

作者提出了一种联合训练方法,可以同时使用检测数据集和分类数据集来训练检测模型,用分层的观点对物体分类,用检测数据集学习准确预测物体的位置,用分类数据集来增加可识别的类别量,提升鲁棒性。 (这一点了解的不是很明晰)

如需转载请注明出处,谢谢!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: