目录
- 前言
- YOLO v2:Better,Faster
- YOLO9000:Stronger
- 参考文献
前言
今天给大家介绍斩获CVPR 2017 Best Paper Honorable Mention的YOLO v2的论文,YOLO9000:Better, Faster, Stronger。准确来说这篇论文提出了两个模型:YOLO v2和YOLO9000,本篇论文主要的工作可以概括为2步:
- 作者在YOLO v1的基础上,借鉴了很多trick,比如
Batch Normalization
、High Resolution Classifier
等,提出YOLO v2,让预测变得更准确(Better),更快速(Faster),以下是用到的trick以及相对应提高的mAP。
作者也给出了YOLO v2在速度和准确性与其他算法如Faster R-CNN,SSD的对比:
- 如果说前面的很多trick只是参考别的论文没有太大的创新,那么YOLO9000则提出了一种让世人称赞不已的策略:分类和检测的联合训练策略,让模型识别的种类不再局限于像
COCO
数据集的80种,模型可以因此联动像ImageNet
这样拥有上万种种类的分类数据集以及像COCO这样的检测数据集一起训练,最终YOLO9000可以识别超过9000种种类,YOLO9000也因此命名。
YOLO v2:Better,Faster
1.Batch Normalization(批度归一化)
- 批度归一化有助于解决反向传播过程中出现的梯度消失和梯度爆炸问题,降低对一些超参数的敏感性,并且起到一定的正则化效果(YOLO2不再使用dropout),从而能够获得更好的收敛速度和收敛效果,加了BN层后mAP提高了2%。
2.High Resolution Classifier(使用高分辨率图像微调分类模型)
- 目前先进的目标检测方法中,基本上都会先在
ImageNet
上进行预训练,而ImageNet
的输入采用的是224×224,导致分辨率不够高,给检测带来困难。YOLO v1网络把分辨率直接提升到了448×448,但是直接切换分辨率,检测模型可能难以快速适应高分辨率,这也意味之原有的网络模型必须进行某种调整以适应新的分辨率输入。 - 所以YOLO v2增加了在
ImageNet
数据集上使用448×448输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集(eg:COCO)上finetune之前已经适应高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%。
3.Convolutional With Anchor Boxes(使用先验框Anchor Box替换全连接层)
在之前的YOLO v1中,直接采用全连接层来预测边界框,效果不好。作者借鉴了Faster R-CNN中使用RPN预测偏移量offsets和置信度confidences的思想,预测bounding box与Anchor框的偏移(offset)而不是直接预测bounding box的坐标。
- 首先作者去除了一个池化层,来使得输出的卷积特征图有更高的分辨率。
- 其次作者缩减了网络,把原本网络的输入448×448缩减成416×416。因为YOLO v2模型下采样的总步长为32,对于416×416大小的图片,最终得到的特征图大小为13×13,维度是奇数,这样特征图恰好只有一个中心位置。作者发现对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点而不是四个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证输入对应的最终的特征图有奇数个位置(Multi-Scale Training部分有点打脸==)
- 使用anchor boxes之后,mAP下降了0.3,但召回率提高了7%。这是因为YOLOv1只能预测98个边界框(7×7×2),而YOLO v2使用anchor boxes之后可以预测上千个边界框(13×13×num_anchor),这使得模型拥有进一步的改进空间。
4.Dimension Clusters(使用聚类算法提取anchor boxes的宽高)
- 之前anchor boxes都是手工设定的,网络微调anchor boxes到实际位置的难度不小。而YOLO v2的做法是对训练集中标注的边框进行聚类分析,以自动找到更好的尺寸。
- 聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差,但我们关心的是anchor boxes和ground truth的IOU。所以,YOLO2在聚类时巧妙地采用以下公式来计算两个边框之间的距离:
,centroid是聚类时被选作中心的边框,box就是其它anchor boxes。IOU越大,距离越近。YOLO2给出的聚类分析结果如下图所示:
- 随着聚类中心数目的增加,我们可以看到平均IOU值是增加的,但是综合考虑模型复杂度和召回率,作者最终选取5个聚类中心作为先验框,其相对于图片的大小如右边图所示。
5.Direct location prediction(直接位置预测)
- 作者发现使用anchor boxes的时候模型不稳定,尤其是在早期迭代的时候。而大部分的不稳定现象出现在预测box的 (x,y) 坐标上了,而以往计算的公式如下(图中的两个减号应是加号,作者写错):
- 这个公式没有任何限制,使得无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点结束(这是因为偏移量tx,tx 没有大小限制,可能会导致出现anchor偏离ground truth很远的情况。正确做法应该是每一个anchor只负责检测周围正负一个单位以内的目标box)。YOLO v2调整了预测公式,将预测边框的中心约束在网格内:
- 其中,
是预测边框的中心和宽高。
是预测边框的置信度,YOLO v1是直接预测置信度的值,这里对预测参数进行σ变换后作为置信度的值。是当前网格左上角到图像左上角的距离,要先将网格大小归一化,即令一个网格的宽=1,高=1。是先验框的宽和高。σ是sigmoid函数。
是要学习的参数,分别用于预测边框的中心和宽高,以及置信度。
- 作者使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。
6.Fine-Grained Features(细粒度特征)
- 作者发现YOLO使用13*13的特征图进行预测大物体拥有很好的效果,而相对比较小的物体则效果一般。YOLO2引入一种称为passthrough层的方法在特征图中保留一些细节信息。
- YOLO v2所利用的Fine-Grained Features是26×26大小的特征图(最后一个maxpooling层的输入)。passthrough层与ResNet网络的identity mappings类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个2×2,然后将其转化为channel的维度,对于26×26×512的特征图,经passthrough层处理之后就变成了13×13×2048的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的13×13×1024特征图连接在一起形成13×13×3072大小的特征图。
7.Multi-Scale Training(多尺寸训练)
- 因为Yolo v2去掉了全连接层,只有卷积层与池化层,所以对于网络的输入大小,并没有限制,整个网络的降采样倍数为32,只要输入的特征图尺寸为32的倍数即可。所以Yolo v2可以使用不同尺寸的输入图片训练,来使模型适应不同分辨率的图片,让模型更鲁棒。
- 具体来说就是在训练过程中每间隔一定的iterations(论文中是10)之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:{320,352,……,608},输入图片最小为320×320,此时对应的特征图大小为10×10(和Convolutional With Anchor Boxes中提到要是奇数相悖,但是问题也不是很大),而输入图片最大为608×608,对应的特征图大小为19×19。在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
- 在小尺寸图片检测中,YOLO v2效果很好,输入为228×228的时候,帧率达到91FPS,mAP几乎和Faster R-CNN的水准相同。在大尺寸图片检测中,YOLO v2也达到了先进水平,在VOC2007数据集上mAP为78.6%,仍然高于平均水准,下图是YOLO v2和其他网络的效果对比:
8.Darknet-19
- YOLOv2采用了一个新的网络,称为Darknet-19,包括19个卷积层和5个maxpooling层,在
ImageNet
数据集上,Darknet-19的top-1准确度为72.9%,top-5准确度为91.2%,但是模型参数相对小一些。使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约33%。
tips:YOLO v2具体的训练方式这里不多赘述,在YOLO v3的介绍中会重点侧重实现。
YOLO9000:Stronger
- 众所周知,检测数据集的标注要比分类数据集打标签繁琐的多,所以ImageNet分类数据集比VOC等检测数据集高出几个数量级。在YOLO中,边界框的预测其实并不依赖于物体的种类标签,所以YOLO可以实现在分类数据集和检测数据集上的联合训练。对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。那具体是怎么做的呢?
- 联合训练方法思路简单清晰,Yolo v2中物体矩形框生成,不依赖于物理类别预测,两个预测互相独立。当输入是检测的数据集时,标注信息既有位置信息也有类别信息,那么对整个loss函数计算loss;当输入是分类数据集时,标注信息只有类别信息,那么整个loss函数只计算分类loss,其余部分loss为零。
- 作者先在检测数据集上训练一定的epoch,待预测框的loss基本稳定后,再联合分类数据集、检测数据集进行交替训练,同时由于ImageNet样本比COCO多得多,所以对COCO样本会多做一些采样,适当平衡一下样本数量。
- 但是这个方法会遇到一个问题,传统的最后一层分类的各个种类之间都是互斥的,但是这里ImageNet和COCO数据集的类别之间并不一定是互斥关系,可能是包含(人与男人)、相交(运动员与男人)等的关系,作者这里提出了一种层级分类方法(Hierarchical classification),主要思路是根据各个类别之间的从属关系(根据WordNet)建立一种树结构WordTree,结合COCO和ImageNet建立的WordTree如下图所示:
- WordTree中的根节点为"physical object",每个节点的子节点都属于同一子类,可以对它们进行softmax处理(而不是对所有的种类进行softmax)。在给出某个类别的预测概率时,需要找到其所在的位置,遍历这个path,然后计算path上各个节点的概率之积。
如图中所示,同一颜色的种类之间进行softmax操作,使得同一颜色中只有一个类别预测分值最大。在预测时,从树的根节点开始向下检索,每次选取预测分值最高的子节点,直到所有选择的节点预测概率连乘后小于某一阈值(论文中取0.6)时停止。eg:
- 通过联合训练策略,YOLO9000可以快速检测出超过9000个类别的物体,总体mAP值为19.7。
参考文献
- YOLO9000:Better, Faster, Stronger