本章论文:
YOLOv2论文(YOLO9000: Better, Faster, Stronger)(原文+解读/总结+翻译)
系列论文:
YOLOv1论文解读/总结_yolo论文原文_耿鬼喝椰汁的博客-CSDN博客
前言
在YOLOv1推出一年以后,YOLOv2诞生了,新的YOLO版本论文叫《YOLO9000: Better, Faster, Stronger》,作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上,进行了改进,不仅提出了 YOLOv2 ,还提出了YOLO9000,一种实时的目标检测系统,可以检测9000多个目标类别,重点解决YOLOv1召回率和定位精度方面的不足。
论文原文:YOLO9000: Better, Faster, Stronger
论文翻译:YOLOv2论文翻译(已校正)_耿鬼喝椰汁的博客-CSDN博客
Yolov2 的主要工作
这篇论文的主要工作有:
1. 使用一系列的方法对YOLOv1进行了改进,在保持原有检测速度的同时提升精度得到YOLOv2;
2. 提出了一种目标分类与检测的联合训练方法,同时在COCO和ImageNet数据集中进行训练得到YOLO9000,实现9000多种物体的实时检测。
这篇文章包含两个模型:YOLOv2和YOLO9000,不过后者是在前者基础上提出的,两者模型的主体结构是一致的。
同yolov1论文题目一样,yolov2论文题目也体现了它改进后的三个优点:Better、Faster、Stronger。之前提出的YOLO v1虽然检测速度快,但在定位方面不够准确,并且召回率较低。为了解决这些问题,YOLO v2在YOLO v1的基础上提出了几种改进策略,如下图所示,一些改进方法能有效提高模型的mAP。
Yolov2 改进策略
1. Batch Normalization(批次归一化)
Batch Normalization有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。 YOLO v2中在每个卷积层后加Batch Normalization(BN)层,去掉了dropout层。 Batch Normalization层可以起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。
YOLO v2通过使用BN层使得mAP提高了2%。
2. High Resolution Classifier(高分辨率分类器)
图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224*224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448×448 的图像作为输入。但这样切换对模型性能有一定影响。
所以YOLO2在采用 224×224 图像进行分类模型预训练后,再采用 448×448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448×448 的分辨率。然后再使用 448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。
YOLO v2通过使用高分辨率分类器使得mAP提升了3.7。
3.Convolutional With Anchor Boxes(带有锚框的卷积)
在yolov1中使用全连接层来预测box的坐标,并不像Faster R-CNN中RPN生成预选框,RPN只需预测偏移量,而不是整个坐标,这样简化了网络学习。yolov2模型有几点改进:
1、移除最后一层的全连接层,并使用anchor boxes来预测
2、移除一层pooling层,为了使得有不错分辨率
3、将输入448 x 448改为416 x 416,论文中提到因为416除32等于奇数,就会有单个单元格对应。
yolov1只有7 x 7 x 2个box,而yolov2有13 x 13 x 9个box,在结果对比起来,yolov2的准确率只降低0.4map,但recall上升了7%,可见有效。
4.Dimension Clusters(维度聚类)
在Faster R-CNN和SSD中,先验框的维度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框维度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析,以寻找尽可能匹配样本的边框尺寸。
聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差。而且设置先验框的主要目的是为了使得预测框与ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标:
centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。YOLO2给出的聚类分析结果如下图所示:
上图左边是选择不同的聚类k值情况下,得到的k个centroid边框,计算样本中标注的边框与各centroid的Avg IOU。显然,边框数k越多,Avg IOU越大。YOLO2选择k=5作为边框数量与IOU的折中。对比手工选择的先验框,使用5个聚类框即可达到61 Avg IOU,相当于9个手工设置的先验框60.9 Avg IOU。
上图右边显示了5种聚类得到的先验框,VOC和COCO数据集略有差异,不过都有较多的瘦高形边框。
5.Direct location prediction(直接的位置预测)
Faster R-CNN使用anchor boxes预测边界框相对先验框的偏移量,由于没有对偏移量进行约束,每个位置预测的边界框可以落在图片任何位置,会导致模型不稳定,加长训练时间。 YOLO v2沿用 YOLO v1的方法,根据所在网格单元的位置来预测坐标,则Ground Truth的值介于0到1之间。网络中将得到的网络预测结果再输入sigmoid函数中,让输出结果介于0到1之间。设一个网格相对于图片左上角的偏移量是 c x , c y cx,cy cx,cy。先验框的宽度和高度分别是 p w 和 p h pw和ph pw和ph,则预测的边界框相对于特征图的中心坐标 ( b x , b y ) (bx,by) (bx,by)和宽高 b w 、 b h bw、bh bw、bh的计算公式如下图所示。
YOLO v2结合Dimention Clusters, 通过对边界框的位置预测进行约束,使模型更容易稳定训练,这种方式使得模型的mAP值提升了约5%。
6.Fine-Grained Features(细粒度的特征)
YOLO v2借鉴SSD使用多尺度的特征图做检测,提出pass through层将高分辨率的特征图与低分辨率的特征图联系在一起,从而实现多尺度检测。 YOLO v2提取Darknet-19最后一个max pool层的输入,得到 26 × 26 × 512 26×26×512 26×26×512的特征图。经过 1 × 1 × 64 1×1×64 1×1×64的卷积以降低特征图的维度,得到 26 × 26 × 64 26×26×64 26×26×64的特征图,然后经过pass through层的处理变成13x13x256的特征图(抽取原特征图每个2×2的局部区域组成新的channel,即原特征图大小降低4倍,channel增加4倍),再与 13 × 13 × 1024 13×13×1024 13×13×1024大小的特征图连接,变成 13 × 13 × 1280 13×13×1280 13×13×1280的特征图,最后在这些特征图上做预测。使用Fine-Grained Features, YOLO v2的性能提升了1%.
7.Multi-Scale Training(多尺寸训练)
YOLO v2中使用的Darknet-19网络结构中只有卷积层和池化层,所以其对输入图片的大小没有限制。 YOLO v2采用多尺度输入的方式训练,在训练过程中每隔10个batches,重新随机选择输入图片的尺寸,由于Darknet-19下采样总步长为32,输入图片的尺寸一般选择 32 32 32的倍数{320,352,…,608}。采用Multi-Scale Training, 可以适应不同大小的图片输入,当采用低分辨率的图片输入时,mAP值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高mAP值,但速度有所下降。
YOLO v2借鉴了很多其它目标检测方法的一些技巧,如Faster R-CNN的anchor boxes, SSD中的多尺度检测。除此之外, YOLO v2在网络设计上做了很多tricks,使它能在保证速度的同时提高检测准确率,Multi-Scale Training更使得同一个模型适应不同大小的输入,从而可以在速度和精度上进行自由权衡。
8.New Network:Darknet-19
YOLO v2采用Darknet-19网络结构,YOLOv2使用了一个新的分类网络作为特征提取部分,参考了前人的先进经验,比如类似于VGG,作者使用了较多的3 * 3卷积核,在每一次池化操作后把通道数翻倍。借鉴了network in network的思想,网络使用了全局平均池化(global average pooling),把1 * 1的卷积核置于3 * 3的卷积核之间,用来压缩特征。也用了batch normalization(前面介绍过)稳定模型训练。
最终得出的基础模型就是Darknet-19,如下图,其包含19个卷积层、5个最大值池化层(maxpooling layers ),下图展示网络具体结构。Darknet-19运算次数为55.8亿次,imagenet图片分类top-1准确率72.9%,top-5准确率91.2%。
采用 YOLO v2,模型的mAP值没有显著提升,但计算量减少了。以下是网络结构图:
YOLOv2训练
(1)在ImageNet训练Draknet-19,模型输入为224×224,共160个epochs
(2)将网络的输入调整为448×448,继续在ImageNet数据集上finetune分类模型,训练10 个epochs。参数除了epoch和learning rate改变外,其他都没变,这里learning rate改为0.001。
(3)修改Darknet-16分类模型为检测模型(看上面的网络微调部分),并在监测数据集上继续finetune模型
YOLO 9000
YOLO 9000 是什么?
YOLO 9000 是一种实时的目标检测系统,可以检测9000多个目标类别。其主要检测网络是YOLO v2,同时使用WordTree来混合来自不同的资源的训练数据,并使用联合优化技术同时在ImageNet和COCO数据集上进行训练,目的是利用数量较大的分类数据集来帮助训练检测模型,因此,YOLO9000的网络结构允许实时地检测超过9000种物体分类,进一步缩小了检测数据集与分类数据集之间的大小代沟。
小结
YOLO-V2是一个先进的实时检测系统,提升速度与精度上提出了很多新奇有效的方法,可以运行在不同尺寸大小图片的上,也使得可以很好地权衡速度与精度。同时YOLO9000使用WordTree来结合来自不同来源的数据,并使用联合优化技术在ImageNet和COCO上同时进行训练。YOLO-v2的很多技巧都可以很好地运用在其他场合任务中。
这篇论文的学习和总结到这里就结束啦,如果有什么问题可以在评论区留言呀~
如果帮助到大家,可以一键三连支持下~