YOLO v2论文理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wwwhp/article/details/81183861

Abstract

  • YOLO9000:Better,Faster,Stronger
  • YOLO9000可以检测9000多种目标类别,其方法是根据YOLO v1进行各种改进,可以在不同的尺寸运行在速度和准确性之间提供了一个简单的折中,67FPS时YOLO v2在VOC2007上获得76.8的mAP,40FPS时获得78.6mAP;文章最后提出联合训练目标检测和分类的方法,在COCO数据集和ImageNet检测验证集上同时训练YOLO9000;

 Introduction

  • 提出新方法通过已有的大量分类数据扩大当前检测系统的类别范围,使用目标分类的分层视图可以将不同的数据集组合在一起;
  • 提出联合训练算法:允许在检测和分类数据集上训练目标检测器,利用标记检测图像来学习精确定位目标,同时利用分类图像来增加词汇量和鲁棒性;

Better

  • 如上图所示,和YOLO v1比较YOLO v2有很多改进的地方 

  • Batch Normalization:Batch Normalization可以提高模型收敛速度,减少过拟合。作者在所有卷积层应用了Batch Normalization,使结果提升了2%。同时,Batch Normalization的应用,去除了dropout,而不会过拟合;

  • High Resolution Classiflier:目前最好的图像分类器采用基于ImageNet数据集预训练模型。大部分类器输入图像尺寸小于256×256。原始YOLO接受图像尺寸为224×224。在YOLOv2中,作者首先采用448×448分辨率的ImageNet数据finetune使网络适应高分辨率输入;然后将该网络用于目标检测任务finetune。高分辨率输入使结果提升了4%的mAP;

  • Convolutional With Anchor Boxes:原来的YOLO是利用全连接层直接预测bounding box的坐标,而YOLOv2借鉴了Faster R-CNN的思想,引入anchor。首先将原网络的全连接层和最后一个pooling层去掉,使得最后的卷积层可以有更高分辨率的特征;然后缩减网络,用416*416大小的输入代替原来448*448。这样做的原因在于希望得到的特征图都有奇数大小的宽和高,奇数大小的宽和高会使得每个特征图在划分cell的时候就只有一个center cell(比如可以划分成7*7或9*9个cell,center cell只有一个,如果划分成8*8或10*10的,center cell就有4个)。为什么希望只有一个center cell呢?因为大的object一般会占据图像的中心,所以希望用一个center cell去预测,而不是4个center cell去预测。网络最终将416*416的输入变成13*13大小的feature map输出,也就是缩小比例为32;YOLO算法将输入图像分成7*7的网格,每个网格预测两个bounding box,因此一共只有98个box,但是在YOLOv2通过引入anchor boxes,预测的box数量超过了1千(以输出feature map大小为13*13为例,每个grid cell有9个anchor box的话,一共就是13*13*9=1521个,当然由后面第4点可知,最终每个grid cell选择5个anchor box)。顺便提一下在Faster RCNN在输入大小为1000*600时的boxes数量大概是6000,在SSD300中boxes数量是8732。显然增加box数量是为了提高object的定位准确率;这部分实验证明:虽然加入anchor使得MAP值下降了一点(69.5降到69.2),但是提高了recall(81%提高到88%);

  • Dimension Clusters:在Faster R-CNN中anchor box的大小和比例是按经验设定的,然后网络会在训练过程中调整anchor box的尺寸。但是如果一开始就能选择到合适尺寸的anchor box,那肯定可以帮助网络越好地预测detection;文中采用k-means的方式对训练集的bounding boxes做聚类,试图找到合适的anchor box,另外作者发现如果采用标准的k-means(即用欧式距离来衡量差异),在box的尺寸比较大的时候其误差也更大,而我们希望的是误差和box的尺寸没有太大关系;所以通过IOU定义了如下的距离函数,使得误差和box的大小无关:d(box, centroid)=1-IOU(box, centroid);如下图所示,左边是聚类的簇个数核IOU的关系,两条曲线分别代表两个不同的数据集;在分析了聚类的结果并平衡了模型复杂度与recall值,作者选择了K=5,这也就是右边的示意图是选出来的5个box的大小,这里紫色和黑色也是分别表示两个不同的数据集,可以看出其基本形状是类似的;而且发现聚类的结果和手动设置的anchor box大小差别显著。聚类的结果中多是高瘦的box,而矮胖的box数量较少;作者采用的5种anchor(Cluster IOU)的Avg IOU是61,而采用9种Anchor Boxes的Faster RCNN的Avg IOU是60.9,也就是说本文仅选取5种box就能达到Faster RCNN的9种box的效果;

  • Direct Location Prediction:在YOLO模型上采用anchor boxes的第二个关键是模型不稳定性,特别是在前面几轮训练。大部分不稳定因素来源于预测boxes位置(x,y)。作者将预测偏移量改变为YOLO的预测grid cell的位置匹配性(location coordinate),将预测值限定在0-1范围内,增强稳定性。网络对feature map中的每个cell预测5个bounding boxes。对每一个bounding boxes,模型预测5个匹配性值(t_{x},t_{y} ,t_{w} ,t_{h} ,t_{o})。采用聚类方法选择boxes维度和直接预测bounding boxes中心位置提高了将近5%的mAP;

  • Fine-Grasined Features:文中主要是添加了一个层:passthrough layer。这个层的作用就是将前面一层的26*26的feature map和本层的13*13的feature map进行连接,有点像ResNet。这样做的原因在于虽然13*13的feature map对于预测大的object已经足够了,但是对于预测小的object就不一定有效;也容易理解,越小的object,经过层层卷积和pooling,可能到最后都不见了,所以通过合并前一层的size大一点的feature map,可以有效检测小的object;

  • Multi-Scale Training:为了让YOLOv2模型更加鲁棒,文种引入了Muinti-Scale Training,简单讲就是在训练时输入图像的size是动态变化的,注意这一步是在检测数据集上fine tune时候采用的,不要跟前面在Imagenet数据集上的两步预训练分类模型混淆,本文细节确实很多。具体来讲,在训练网络时,每训练10个batch(10个epoch?),网络就会随机选择另一种size的输入。那么输入图像的size的变化范围要怎么定呢?前面我们知道本文网络本来的输入是416*416,最后会输出13*13的feature map,也就是说downsample的factor是32,因此作者采用32的倍数作为输入的size,具体来讲文中作者采用从{320,352,…,608}的输入尺寸;这种网络训练方式使得相同网络可以对不同分辨率的图像做detection。虽然在输入size较大时,训练速度较慢,但同时在输入size较小时,训练速度较快,而multi-scale training又可以提高准确率,因此算是准确率和速度都取得一个不错的平衡;如图在检测时,不同输入size情况下的YOLOv2和其他object detection算法的对比。可以看出通过multi-scale training的检测模型,在测试的时候,输入图像在尺寸变化范围较大的情况下也能取得mAP和FPS的平衡。不过同时也可以看出SSD算法的表现也十分抢眼;

  • 扫描二维码关注公众号,回复: 2916837 查看本文章

Faster

  •  Net:在YOLO v1中,作者采用的训练网络是基于GooleNet,这里作者将GooleNet和VGG16做了简单的对比,GooleNet在计算复杂度上要优于VGG16(8.25 billion operation VS 30.69 billion operation),但是前者在ImageNet上的top-5准确率要稍低于后者(88% VS 90%)。而在YOLO v2中,作者采用了新的分类模型作为基础网络Darknet-19;Darknet-19只需要5.58 billion operation。这个网络包含19个卷积层和5个max pooling层,而在YOLO v1中采用的GooleNet,包含24个卷积层和2个全连接层,因此Darknet-19整体上卷积卷积操作比YOLO v1中用的GoogleNet要少,这是计算量减少的关键。最后用average pooling层代替全连接层进行预测。这个网络在ImageNet上取得了top-5的91.2%的准确率;

  • Training For Classification:在ImageNet上进行预训练,主要分两步:1.从头开始训练Darknet-19,数据集是ImageNet,训练160个epoch,输入图像的大小是224*224,初始学习率为0.1。另外在训练的时候采用了标准的数据增加方式比如随机裁剪,旋转以及色度,亮度的调整等。2.再fine-tuning 网络,这时候采用448*448的输入,参数的除了epoch和learning rate改变外,其他都没变,这里learning rate改为0.001,并训练10个epoch。结果表明fine-tuning后的top-1准确率为76.5%,top-5准确率为93.3%,而如果按照原来的训练方式,Darknet-19的top-1准确率是72.9%,top-5准确率为91.2%。因此可以看出第1,2两步分别从网络结构和训练方式两方面入手提高了主网络的分类准确率;

  • Training For Detection:基于检测的数据再进行fine-tuning,把最后一个卷积层去掉然后添加3个3*3的卷积层,每个卷积层有1024个filter,而且每个后面都连接一个1*1的卷积层,1*1卷积的filter个数根据需要检测的类来定。比如对于VOC数据,由于每个grid cell我们需要预测5个box,每个box有5个坐标值和20个类别值,所以每个grid cell有125个filter(与YOLOv1不同,在YOLOv1中每个grid cell有30个filter,还记得那个7*7*30的矩阵吗,而且在YOLOv1中,类别概率是由grid cell来预测的,也就是说一个grid cell对应的两个box的类别概率是一样的,但是在YOLOv2中,类别概率是属于box的,每个box对应一个类别概率,而不是由grid cell决定,因此这边每个box对应25个预测值(5个坐标加20个类别值),而在YOLOv1中一个grid cell的两个box的20个类别值是一样的)。另外作者还提到将最后一个3*3*512的卷积层和倒数第二个卷积层相连。最后作者在检测数据集上fine tune这个预训练模型160个epoch,学习率采用0.001并且在第60和90epoch的时候将学习率除以10,weight decay采用0.0005;

Stronger

  • 关于YOLO 9000,使用目标分类分层视图WordTree将目标分类和检测的数据集组合在一起,然后使用联合训练算法训练组合的数据集(主网络和YOLO v2类似,grid cell只采用3个box prior)

 Related Source

猜你喜欢

转载自blog.csdn.net/wwwhp/article/details/81183861