【YOLO】2017年YOLOv2论文笔记

YOLO9000: better, faster, stronger

原文链接YOLO9000: better, faster, stronger

Abstract

首先得说明,YOLOv2不等于YOLO9000。

YOLOv2是作者们在YOLO的基础上做了一系列改进后得到的模型,是YOLO的升级版;而YOLO 9000是和YOLOv2同样的网络结构,再利用联合训练的方法进行训练,使得模型能检测超过9000个目标类别。

前者在VOC 2007上已经超过了Faster R-CNN和SSD的表现。而后者,作者提供了对目标检测和分类的联合训练方法(COCO检测数据集和ImageNet分类数据集),对于没有检测数据标注的物体类别也能进行检测。


Introduction

通用目标检测应该是快的、准确的且能识别各种各样物体的,但大多数的检测方法还限于很小部分的物体。当下目标检测数据集不如分类数据集广泛和种类繁多,而且检测数据集的标注比分类数据集更加昂贵和费时。

因此,作者提出利用已有的分类数据来提升目标检测模型性能的方法。采用了所谓的目标分类的阶梯式视角。还提出了联合训练算法,使得能够在检测和分类数据上训练模型。(不过这属于YOLO 9000)


Better

YOLOv1有很多缺点,YOLOv2则引入了一些新奇的ideas:

1、Batch Normalization 批量标准化

在收敛方面有极大的改善,同时消除了其他形式的正则化(regularization)。在所有卷积层都要加这个BN,提升超过2%的mAP。甚至可以移除dropout,也不会有过拟合。


2、High Resolution Classifier 高分辨率的分类器

在YOLOv1中,YOLO先在224*224的图片训练分类网络,然后在检测时将分辨率提高到448*448,这导致网络在转换到目标检测的同时,还要始应新的输入分辨率。
因此,在YOLOv2中,作者先在ImageNet的448*448分辨率上微调分类网络10个epochs,使得网络有时间始应更高的分辨率。然后再在检测数据集上微调整个网络。这使得分类网络的性能提高了几乎4% mAP。


3、Convolutional With Anchor Boxes 添加Anchor

YOLO是预测bounding box到所属网格的偏移坐标。受Faster R-CNN的RPN仅使用卷积层来预测anchor boxes的偏移和置信度,YOLOv2也选择并不直接预测这样的坐标,而是基于anchor boxes的偏移。这样看来这个anchor的思想其实和region proposal也很像,原文如下:
在这里插入图片描述
作者们从YOLO中移除了全连接层,使用anchor boxes来预测bounding box。首先,消除一个pooling层使得网络的卷积层输出有更高的分辨率。另外,收缩网络,使之作用于416的图像输入而不是448*448。这么做的原因是,作者们想特征图上有奇数个locations,这样就只有一个中心网格了。因为特别是大的物体倾向于占据图像中心,单个中心网格更好预测这些目标,而不是有4个相邻的中心网格。YOLO的所有卷积层以32的因子对图片进行降采样(即448的输入,448/32 = 14的输出),这样使用416的图像输入,就能得到13*13的特征图输出。

前面不是说消除了一个pooling层吗?YOLOv2的降采样的factor是32,那YOLOv1原本不就应该是64的factor?对的,如图:
在这里插入图片描述
图中6个红框都是降采样的位置,2的6次方即64。

由于使用anchor boxes导致accuracy的微小减小,作者认为是因为YOLO只预测98个boxes/每个图片,而YOLOv2使用anchor boxes的同时要预测超过1000个物体。即便伴随mAP的小小下降,recall的极大提升意味着该模型还有更多改善空间。


4、Dimension Clusters 尺寸聚类

当使用anchor boxes,有两个问题:

问题一:是boxes的尺寸是手选的。这就意味着如果我们选的好,模型就能更好地学会检测任务。原话说的是选一个好的priors。
方法一:作者在训练集的bounding boxes上使用k-means聚类,以此来自动选择好的priors。

如果使用标准的k-means聚类和欧几里得距离(Euclidean distance),更大的boxes比小的boxes产生更多错误。但作者们要的是一个好的priors,这个priors能和训练集有更高的IOU,而这个是和boxes的尺寸无关的。因此,距离度量公式采用如下:(基于欧几里得距离的变式)
在这里插入图片描述
作者们尝试了k-means的各种k值,并画出了不同k值下得到的priors的平均IOU,如下图:
在这里插入图片描述
左边是不同k值对应不同的IOU,可见随着k增多,IOU一直在增加,但增加的幅度在k=5之后也开始放缓。因此选取5个anchor boxes是最好的选择,能够平衡recall和anchor的数量,毕竟数量越多模型复杂度越高,时间消耗越大。
右边则是k=5时得到的这5个priors,蓝色的是COCO数据集上的,作者说COCO的这5个anchor boxes之间的size变化比VOC的要大,不过我感觉不太看得出来,因为也不是那么明显。

可见,这5个由k-means得到的priors和手选的大不一样,谁都看得出来这个可不是由人选得出来的。作者还专门比较了下,到底这个k-means的方法选出来的比自己手选的好多少?手选版如下图所示:
在这里插入图片描述
可见,仅仅5个自动选出的priors达到的平均IOU就可以和9个手选的anchor boxes相匹敌。如果使用9个自动选择的priors能达到更高的平均IOU。足以见得k-means产生的anchor的优越性。不过这个Cluster SSE是什么样的方法,作者也没介绍,可能是因为效果不够好,没有介绍的必要。


5、Direct location prediction 直接预测位置

这里来到当使用anchor boxes的另一个问题

问题二:模型不稳定,特别是在早期迭代阶段。大部分不稳定来自于预测box的(x,y),在RPN中网络预测tx和tx,(x,y)中心坐标被如下计算:
在这里插入图片描述
这个Wa和Xa就表示anchor box的宽和中心点X坐标,而对于tx没有限制,这样处于图像中任何位置的box都能被表示出来。但随着随机初始化,模型训练需要很长时间才能稳定地预测tx、ty这两个offset值。

方法二:因此,作者们选择不预测这个offset(基于anchor box),而是沿用了YOLOv1的方法:预测相对于网格(基于grid cell)的位置坐标,这样坐标的groung truth的值就能落在0-1之间;如果是用相对于anchor的offset,由于不同anchor的size也不一样,和预测物体的相对位置也不一样,tx和ty的值将不会在0-1内。作者选用logistic activation(也就是sigmoid)使预测值落在这个范围。

模型在13*13的输出特征图上的每个网格(而不是YOLOv1那样的原图像)预测5个bounding boxes,每个bounding box由5个坐标组成:tx、ty、tw、th、to。如果网格离图像左上角的偏移为(cx、cy),bounding box prior(即anchor box)有宽高pw和ph,则实际值的计算如下:
在这里插入图片描述
其实这里的σ主要起限制作用,不用也可以的,只不过用了能让参数学习更加容易,使网络更稳定。使用尺寸聚类和直接预测bounding box相对于grid cell的中心坐标,相比于仅有anchor boxes的版本,提升了几乎5%的YOLO性能。

所以总的来说,YOLOv2没有完全基于anchor box,仅在宽高的预测上使用了anchor box,而对于目标坐标的预测还是基于grid cell。如图所示:
在这里插入图片描述


6、Fine-Grained Features 细粒度特征

上面提到,YOLOv2在13*13的特征图上进行预测目标(即ground truth就是以这个feature map来设定的,而YOLOv1是按原图像进行设定的ground truth)。虽然这对于大目标已经足够,但还可能受益于更细粒度的特征来定位更小的目标。Faster-RCNN和SSD都在不同的特征图上进行region proposal,来获得一系列不同分辨率的proposal。而YOLOv2的作者们选择不同的方法:简单地增加一个passthrough layer,这个layer能带来26*26特征图上的特征。

通过将相邻的特征堆叠到不同的通道中,这个passthrough layer连接高低两个不同分辨率的特征图,这类似于ResNet的identity mappings。具体地,就是把2626512变成13132048的特征图,这样就能和输出特征图进行连接了。而连接后的特征图将用于预测目标,因此细粒度的特征就能被获取到了。这样的操作给了1%的性能提升。


7、Multi-Scale Training 多尺度训练

YOLOv1使用448*448的输入,而加入anchor boxes后,作者使用416*416的分辨率。由于模型只使用卷积层和池化层,这个大小可以不停的改变,因为不会受到全连接层的限制。

当我读到这里,我就觉得,作者写论文是按照时间线来写的,读到后面反而会有一些新的ideas推翻前面的设定。因为前面选择anchor时才提到,固定到416是因为想要有奇数个locations,这样就只有一个中心网格,能更好地预测目标;但作者在这一节又提到改变,那前面的目的岂不是就面临被推翻的危险?是的,毕竟从最初的anchor提出到这一节,中间又加了很多优化,甚至比之前的idea更好,总体来说是在往更好的方面优化。

作者说道,每过一些迭代,就做出改变,而不是固定输入图像的大小。每10个batches网络就随机选择新的图像尺寸。但也不是乱选,毕竟downsample的factor为32,因此要在32的倍数里面选:320,352…608。因此最小的是320320,最大是608608。

这种方法有利于网络在不同尺寸上预测目标。这也是一种速度和精度的权衡,图像小速度就更快,图像大精度就更高。

其实即便是在低分辨率上,YOLOv2就表现很好,如288*288上,速度超过90FPS而精度几乎和Fast R-CNN相当。而在高分辨率上其在VOC 2007上的mAP达到SOTA的78.6,而且速度仍在实时之上。如下图所示:
在这里插入图片描述
做了这么多优化,可以看看官方总结:
在这里插入图片描述
可以看到,原始的anchor boxes确实在后面没有采用了,而是采用修改版的anchor。


Faster

大部分检测框架都依赖于VGG-16作为特征提取器,它确实很强大、精确,却也不必要地复杂。对于一张224*224的图片通过一次网络结构,它的卷积层需要30.69 billion次浮点运算。

而YOLO使用基于Googlenet结构的定制网络,比VGG-16更快,前向传播只有8.52 billion次运算,当然,精度比VGG-16要略微差一点。


1、Darknet-19

类似于我们常用的VGG模型,3*3的filters和每步池化后通道数量增加一倍。作者选择使用global average polling做预测,并用11的filter来压缩33卷积间的特征表示。使用batch normalization来稳定训练过程,加速收敛并调整模型。

该模型叫做Darknet-19,有19个卷积层和5个max polling层。详细描述图如下:
在这里插入图片描述


2、Training for classification

在ImageNet的1000个类别(正好对应1000的输出)的分类数据集上训练160个epochs,使用随机梯度下降(stochastic gradient descent),初始lr为0.1,幂为4的多项式衰减(polynomial rate decay),weight decay为0.0005,momentum为0.9,并使用Darknet神经网络框架编程(当然,是基于C语言的神经网络框架…读起来真是吐了)。训练时使用标准的数据增强方法包括随即裁剪、旋转、色调、饱和度和曝光度的调节。

然后在448*448的图像上进行微调,参数和上面一样,只不过只用10个epochs、且lr初始为0.001,此时模型的top-1准确率为76.5%,top-5准确率为93.3%(top-5的意思就是前5个里面有对的就算预测正确)。


3、Training for detection

然后,移去最后一个卷积层(当然也包括avgpool和softmax),并加上3个filters为1024的3*3的卷积层,每个后面都有一个1*1的卷积层。还从最后一个3*3*512的层(即最后一个output为14*14的那一层)到倒数第二个卷积层间加上一个passthrough layer。在VOC里,每个网格预测5个bounding boxes,每个box有5个坐标和20个类别(可见,这使得同一个grid里的不同bounding box的预测类别可能不同,不再像YOLOv1那样一个box只能预测一个类别的物体),所以需要输出的filters是5*(5+20)=125(即125个通道)。然后再按一定参数训练160个epochs。

总结

好了,到这里YOLOv2的所有tricks基本介绍完成了。我们可以发现,真的很坑,原因在于作者少给了两个很重要的东西:损失函数和bounding box和ground truth的匹配问题。在YOLOv1中,匹配很简单,谁和ground truth的IOU大,谁就负责;但YOLOv2中还需要考虑类别问题,因为每个bounding box都有各自的类别预测,即便是在同一个grid中,这是原文没讲清楚的。而且损失函数也没给出。听说Ng都说YOLO很难懂…去看源代码更是崩溃,一个注释都没有。

还有YOLO 9000的部分,看不下去了,先放一放吧。

参考

[1] Redmon, J. and Farhadi, A., 2017. YOLO9000: better, faster, stronger. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 7263-7271).
[2] https://blog.csdn.net/u010712012/article/details/85274711
[3] https://blog.csdn.net/kk123k/article/details/86605099

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值