YOLO9000_Better Faster
原文链接:
CVPR 2017 Open Access Repository (thecvf.com)
Abstract 摘要
使用新的多尺度训练方法,可以让模型在不同的尺寸下运行,在运行速度和预测准确度之间做选择。
提出了联合训练的方法,可以同时将分类的数据集和物体检测的数据集一起输入,允许模型预测检测数据集中没有的而分类数据集中有的物体类型。
一. Introduction 简介
作者认为物体检测应该不仅快速、准确,还应该能够识别大量类型的物体。当时的研究趋势是物体检测模型向更快更准的方向发展,但大部分的检测方法被限制在只能检测少量的类型。
最主要的问题在于物体检测的标注成本高,数据集少。
文中提出了一个新的方法,能够将当时已有的大量的分类数据集应用起来,扩展检测的数据集。联合训练算法,通过对分类对象层次视图划分,可以将不同的数据集结合在一起,同时在检测数据集和分类数据集上进行训练。此方法分别使用有标注的物体检测数据集来让模型学习准确定位物体,而使用分类数据集来让模型学习更大的词汇量和健壮性。
文中先结合一些当时有效的改进方法在YOLOv1的基础上进行修改,然后结合联合训练算法扩充模型的词汇量。
二. Better
原版的YOLO存在一些问题:相比于Fast R-CNN在定位上出错更多,相比于基于候选区域(region proposal-based method)的方法在召回率(recall)上有落后。因此改进目标为在保持分类准确率的同时提高召回率和定位准确度。
当时cv的发展趋势倾向于让网络更大型、更深层,在一定范围内这确实能提高模型预测的准确度,但会让模型运行速度减慢。为了让YOLO保持轻量,作者没有增加网络的尺度,而是在其他方面做了改进。
- Batch Normalization批量归一化
通过在每个卷积层后批量进行归一化,可以使mAP上升2%,使训练时参数更快的收敛,同时可以起到规范化模型的效果提高泛化能力,可以取代dropout。
- High Resolution Classifier 提高分辨率
在YOLOv1中,模型在224*224的分辨率下进行训练。YOLOv2在其基础上进行了微调,在448*448分辨率的ImageNet中训练了10个epoch。这使得网络更加适应高分辨率的图形输入。随后将训练的网络微调应用于检测,提升了4%的mAP。
- Convolutional With Anchor Boxes 去除全连接层引入锚框
预测时用相对偏置取代绝对坐标可以简化问题,更易于模型学习。YOLOv2相比于v1,去除了全连接层并引入锚框来取代传统的边框。首先去除了一个池化层,使网络卷积层输出拥有更高的分辨率,同时将输入由448*448降为416*416(目的是为了能够在32倍降采样后(13*13)能够在特征层中找到一个中心点)。在引入anchor box时,同YOLOv1中一样将分类机制与空间定位分离,对每一个锚框都进行分类预测。使用anchor box使单个框预测的准确率有一点下降,但anchor box的引入让模型能够做胡更多的预测。整体来看mAP小幅下降而召回率得到了提升,说明模型在这个方向上还有提升的空间。
- Dimension Clusters 聚类分析
在将锚框应用于YOLO中时,我们遇到了两个问题。其一,相比于手动选择初始化锚框规格时,如果能找到更好的初始锚框的规格,就能让模型学习更加高效。为了找到这个最佳值,我们对训练集的边框进行K-means聚类分析。在分析过程中发现,如果使用标准的K-means聚类分析,在计算欧几里得距离时较大的边框会产生更大的误差,而我们希望IOU更大而和边框大小无关,所以对距离的计算方法进行的改写:
d(box, centroid) = 1 - IOU(box, centroid)
聚类分析的结果倾向于选择瘦高的边框。数据显示在K=5时聚类的效果和手动选择的9-anchor box相当,在K=9时平均IOU有明显提升,这说明使用K-means聚类分析生成的初始边框能够使模型学习更高效从而取得更好的表现。
- Direct location prediction 直接预测相对位置而不是偏移量
在将锚框应用于YOLO时,遇到的第二个问题就是模型的稳定性不足,尤其是在迭代的初期。这是由于锚框坐标的计算方式导致的,
在这种计算方式映射下空间的各点是平权的,这使得模型要花更多的代价使随机的初值收敛。
不同于预测偏移量,YOLOv2中采用了一种新的映射方式,预测量仍然是五个维度,他们对于边框的位置坐标和含有物体的概率p有如下映射关系:
这种映射关系时的边框更趋向于向中部集中,同时对参数也进行了归一化处理,使得模型更加稳定且易学。
- Fine-Grained Features 细粒度特征
YOLOv2中添加了一个连通层,将高分辨率的信息与低分辨率的信息相连接(将高分辨率特征层相邻的特征元素堆叠到不同的通道中而不是空间位置,从而将26*26*512的特征层转换为13*13*2048,与后面的低分辨率图层维度一致)
- Multi-Scale Training 在多种尺度下训练
由于YOLOv2全部由卷积层和池化层构成,模型可以在运行中调整大小。为了使模型在各个不同的输入图片尺寸下都有更好的健壮性,每过10个batch网络就会随机的选择新的图片尺寸,并且调整网络适应这个大小继续训练。
这个方法强迫网络学习在多种输入尺寸下进行预测,从而一个网络能够在各个分辨率完成检测任务。在低分辨率下YOLOv2有更快的运行速度,而在高分辨率下YOLOv2预测的准确度更高。
三. Faster
当时大部分的检测框架依赖于以VGG-16为基础的特征提取器。VGG-16虽然在分类任务中表现很出色,但作者认为有一些不必要的冗余。
在YOLOv1中使用的是基于googLeNet的架构,比VGG-16更轻量化,准确率也稍差一点。在此基础上结合当时的技术进行改进,用批量归一化来提升训练的稳定性、收敛速度,并规范化模型,于是得出了YOLOv2所使用的Darknet-19。
Darknet-19网络结构
- Training for classification
采用Darknet的网络框架,使用随机梯度下降,学习率初值为0.1,以指数4的多项式衰减,0.0005的权重衰减以及0.9的动量,在标准的ImageNet 1000类数据集中训练了160个epochs。训练过程中使用了包括随即裁剪、旋转和颜色、饱和度、曝光度变换的多种常规数据增强方法。
- Training for detection
将网络的最后一层卷积层换为了3*3*1024和1*1*(输出维度)的卷积层,并且在倒数第二个3*3*512的卷积层后添加了连通层,使模型可以利用细粒度的特征层来做推断。
四. Stronger
作者提出了联合训练的机制,从检测数据集的标注中学习边框的定位和对常见物体进行分类,而利用分类数据集中的标注扩充分类的词汇量。
而在检测数据集中的标注通常是大类的划分(如“Dog狗”),而在分类数据集中的标注更加细化(如“Norfolk terrier诺福克梗”),要将两种数据集融合,首先需要合并这些标注。由于这些分类中有一部分存在从属关系,而简单的对全部分类用一个softmax逻辑回归层来处理则相当于将全部的类别全部视为扁平的互斥关系,这样是不合理的,所以需要设计一个多重标注的模型来更好的合并不同的数据集。
Hierarchical classification 层次分类
作者设计了一个WordNet的网状分类词汇表,使用有向图的数据结构,每个词指向具有包含关系的同义词,每个新词加入使以尽量添加最少的路径为原则与其他词构建关联边。最高级的根节点为object,即存在一个物体。
预测时从根节点出发,计算每个从属同义词的概率,选出概率最高的作为下一个根节点,直到当前节点下的从属节点的预测概率都低于预设的阈值时,认为这个节点的词就是分类的预测结果。