YOLO9000: Better, Faster, Stronger (CVPR17)
YOLO9000: Better, Faster, Stronger
Abstract
- YOLO9000使用了一种新的、多尺度的训练方法,可以对多种大小的图像进行识别,能够在速度与精确度之间进行权衡。
在VOC2007数据集上,YOLOv2帧率为67FPS情况下的mPA为76.8,帧率为40FPS情况下的mPA为76.8,相比Faster RCNN和SSD精确度更高,速度更快。
文章提出了一种将目标检测与分类的训练相结合的方法。使用该方法YOLO9000能够同时在COCO目标检测数据集及ImageNet分类数据集上进行训练。该种训练结合方法能够使模型对没有检测标签(detection labels)的物体类别进行检测,并使用ImageNet检测任务对该方法进行验证。
YOLO9000在ImageNet检测任务上,200个类中仅有40个类有检测标签的情况下,取得了19.7的mPA。在156个类别不在COCO数据集中取得了16.0的mPA。相比YOLO仅能检测200个类别,YOLO9000能够在保证实时的情况下,检测多于9000个类别的物体。
1. Introduction
与分类等任务相比,目标检测的数据集十分有限,并且短期难以增大。文章提出了一种新的方法以利用大量的分类数据来拓展检测系统的识别范围,实现差异较大的数据集的融合。
文章还提出了一种将分类与检测相结合训练方法。该方法使用标记好的检测数据实现目标的精确定位,利用分类数据提高其识别范围及稳健性。
文章利用该方法对YOLO9000进行了训练,使其能够检测超过9000种不同物体。首先,文章对YOLO检测系统进行改进得到YOLOv2—当前最佳的实时目标检测器。之后利用数据集融合及结合训练的方法对模型在超过9000个类的ImageNet分类数据集及COCO检测数据集进行训练
2. Better
YOLO的缺陷:
- 相比Fast R-CNN, YOLO localization errors较多
- 相比 region proposal-based methods,召回率较低
为了保证速度与精确度,与扩大网络规模相反,作者对网络进行精简,使表征更容易学习。作者根据以往工作的一些创新点,提出一种新的概念,以提升YOLO的性能。具体的改动如下图所示:
Batch Normalization
批量归一能够显著地提升网络的收敛。在YOLO的每个卷积层之后添加BN层之后,mPA提升了2%。批量归一同样能够正则化模型,从而在不使用dropout的情况下防止过拟合。
High Resolution Classifier
当前所有目标检测方法均基于在ImageNet预训练的分类器。从AlexNet开始,大多数分类器的输入都小于256x256。原始的YOLO在224x224分辨率下训练网络,并在检测时将分辨率提升到448。这意味着网络必须同时学习目标检测及调整适应新的分辨率。
对于YOLOv2,首先在ImageNet上以448x448的分辨率对分类器微调十次(epoch),使分类器适应高分辨率的输入。对网络微调使其适应检测任务。高分辨率的分类网络提升了4%的mPA。
Convolutional with Anchor boxes
YOLO在最后的特征图之后使用全连接层进行类别和box的预测,而Faster-RCNN则通过先验anchors和卷积核预测bounding boxes的offset。预测offset相比预测坐标而言,使问题更加简化,易于网络学习。
作者将YOLO的全连接层去除,使用anchor boxes预测边框。首先,去掉一个池化层以产生高分辨率的输出。同时使网络输入减小为416而非480x480,使特征图大小为奇数,此时特征图中央只有一个单元。由于较大的物体通常在图像中心位置,因此中心的一个单元相比邻近的四个单元的预测效果更好,YOLO卷积层对输入图像的下采样比率为32,因此输出特征图大小为13x13。
将预测类别和预测空间位置解耦
加入anchors之后,召回率Recall上升,准确率有所下降。假设每个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%,说明可以通过进一步的工作来加强准确率,的确有改进空间。
Dimension Clusters
两个问题:
一、 anchor box dimensions是人为设置的,虽然网络可以去学习调整boxes, 但是使用更合适的anchor box会更容易学习和做出精确的预测
解决办法就是统计学习中的K-means聚类方法,通过对数据集中的ground true box做聚类,找到ground true box的统计规律。以聚类个数k为anchor boxs个数,以k个聚类中心box的宽高维度为anchor box的维度。
如果按照标准k-means使用欧式距离函数,大boxes比小boxes产生更多error。但是,我们真正想要的是产生好的IOU得分的boxes(与box的大小无关)。因此采用了如下距离度量:
随着k的增大,IOU也在增大(高召回率),但是复杂度也在增加。所以平衡复杂度和IOU之后,最终得到k值为5。上面右图:5聚类的中心与手动精选的boxes是完全不同的,扁长的框较少瘦高的框较多(这就是统计规律的力量)
作者做了对比实验,5种boxes的Avg IOU(61.0)就和Faster R-CNN的9种Avg IOU(60.9)相当。 说明K-means方法的生成的boxes更具有代表性,使得检测任务更好学习。
Direct location prediction
二、使用anchor boxes的另一个问题是模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的(x,y)坐标时。
在faster RCNN的RPN网络中, 预测坐标就是预测tx,ty。对应的中心点(x,y)按如下公式计算:
见预测tx=1就会把box向右移动anchor box的宽度,预测tx=-1就会把box向左移动相同的距离。
这个公式没有任何限制,无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点。模型随机初始化之后将需要很长一段时间才能稳定预测敏感的物体偏移。因此作者没有采用这种方法,而是预测相对于grid cell的坐标位置,同时把ground truth限制在0到1之间(利用logistic激活函数约束网络的预测值来达到此限制)。
约束了位置预测的范围,参数就更容易学习,模型就更稳定。使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。
Fine-Grained Features
修改后的网络最终在13 13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,如果用上细粒度特征的话可能对小尺度的物体检测有帮助。Faser R-CNN和SSD都在不同层次的特征图上产生区域建议以获得多尺度的适应性。YOLOv2使用了一种不同的方法,简单添加一个 passthrough layer,把浅层特征图(分辨率为26 26)连接到深层特征图。
passthroughlaye把高低分辨率的特征图做连结,叠加相邻特征到不同通道(而非空间位置)
,类似于Resnet中的identity mappings。这个方法把26 26 512的特征图叠加成13 13 2048的特征图,与原生的深层特征图相连接。
YOLOv2的检测器使用的就是经过扩展后的的特征图,它可以使用细粒度特征,使得模型的性能获得了1%的提升。
Multi-Scale Training
原始YOLO网络使用固定的448 448的图片作为输入,加入anchor boxes后输入变成416 416,由于网络只用到了卷积层和池化层,就可以进行动态调整(检测任意大小图片)。为了让YOLOv2对不同尺寸图片的具有鲁棒性,在训练的时候也考虑了这一点。
在低分辨率图片检测中,YOLOv2是检测速度快(计算消耗低),精度较高的检测器。输入为228 * 228的时候,帧率达到90FPS,mAP几乎和Faster R-CNN的水准相同。使得其更加适用于低性能GPU、高帧率视频和多路视频场景。
在高分辨率图片检测中,YOLOv2达到了state-of-the-art,VOC2007 上mAP为78.6%,而且超过实时速度要求。
3. Faster
从VGG换到GoogLeNet, 一次224224前向传播的的运算次数由306.9亿次改善到85.2亿次,不过它的精度要略低于VGG-16。224 224图片取 single-crop, top-5 accuracy,YOLO的定制网络得到88%(VGG-16得到90%)。
Darknet-19
YOLOv2使用了一个新的分类网络作为特征提取部分.
最终得出的基础模型就是Darknet-19,包含19个卷积层、5个最大值池化层(max pooling layers )。Darknet-19处理一张照片需要55.8亿次运算,imagenet的top-1准确率为72.9%,top-5准确率为91.2%。 \
Training for classification
作者使用Darknet-19在标准1000类的ImageNet上训练了160次
Training for detection
为了把分类网络改成检测网络,去掉原网络最后一个卷积层,增加了三个 3 3 (1024 filters)的卷积层,并且在每一个卷积层后面跟一个1 1的卷积层,输出维度是检测所需数量。
对于VOC数据集,预测5种boxes,每个box包含5个坐标值和20个类别,所以总共是5 * (5+20)= 125个输出维度。
4. Stronger
作者提出了一种在分类数据集和检测数据集上联合训练的机制。使用检测数据集的图片去学习检测相关的信息,例如bounding box 坐标预测,是否包含物体以及属于各个物体的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。
训练过程中把监测数据和分类数据混合在一起。当网络遇到一张属于检测数据集的图片就基于YOLOv2的全部损失函数(包含分类部分和检测部分)做反向传播。当网络遇到一张属于分类数据集的图片就仅基于分类部分的损失函数做反向传播。