YOLO 9000论文翻译 | YOLO9000:Better, Faster, Stronger
tianbing010@126.com
作者:马春杰杰
2017年6月14日22:30:01
最近要做关于YOLO的东西,所以找时间将这片文章翻译了一下,有些地方理解不对,希望大家能够共同交流。
摘要
我们介绍了YOLO9000,这是一种世界最先进的、实时的目标检测系统,可以检测超过9000个类别。首先,我们对YOLO做了一些改进,得到了提升后的模型YOLO v2,这是一种先进的标准检测,比如Pascal VOC以及COCO,使用一种新奇的、多尺度的训练方法,YOLO v2可以运行不同的尺寸,可以在速度与精度之间提供一个很好的平衡。在67帧率的时候,YOLO V2 可以获得76.8的mAP在VOC2007上,40帧率的时候,可以获得78.6的mAP值,这比Faster R-cnn要好。最后,我们提出了一种联合训练的方法来进行目标检测和分类。使用这种方法,我们训练了YOLO 9000,它可以在ImageNet和COCO上同时进行训练,我们的这种联合训练方法允许YOLO9000可以进行无标签目标的预测。我们在ImageNet检测任务中验证了我们的方法,在44类已有数据集中YOLO9000获得了19.7的mAP值,在其余的156类没有的样本中,获得了16.0的mAP值。但是YOLO9000可不是只能预测200类数据,它可以同时检测出9000种目标,并且仍然可以实时的进行。
1. Introduction
目标检测的总体目标应该是速度、精度都很高,并且能够检测出非常多的目标种类。由神经网络的出现,检测框架已经变得越来越快,精度也是。然而,大多数的检测方法仍然限制在小部分目标中。
与标记的分类数据集相比,目标检测数据集比较少。最常见的检测数据集包含数千到数十万个具有数十到数百个标签的图像。 分类数据集具有数百万个具有数十或数十万种类别的图像。
我们想要检测像分类数据那么多的种类,然而,对检测数据进行加标签所花费的精力远超对分类数据加标签。所以,在最近,我们不可能拥有如分类数据集那么多的检测数据集。
我们提出了一种新的方法来控制我们已经有的巨大数量的分类数据集,并利用它来扩展现有的检测系统的范围。我们使用了分层方法,使得不同的数据集得以连接到一起。
我们同样提出了一种联合训练算法,允许我们使用检测和分类数据集来训练目标检测器。我们使用标记的检测图像来提升定位的精度,使用分类图像来提升它的鲁棒性。
使用这种方法,我们训练了YOLO 9000,这是一种实时的目标检测器,可以同时检测超过9000种不同的目标。首先,我们在YOLO的基础上做了提升,获得了YOLO v2,然后我们使用我们的数据集连接方法以及联合训练算法去训练一个模型,数据集使用了ImageNet数据集和COCO数据集。
2 better
YOLO 相对于世界上最好的检测系统来说,有一些缺点。对于YOLO 进行了错误分析显示,YOLO 在定位误差方面比较严重,另外,YOLO与基于region proposal的方法相比,召回率比较低。因此,我们主要提升定位准确性以及召回率。
计算机视觉的趋势是更大、更深的神经网络。更好的表现通常需要使用更大的网络来训练,然而,对于YOLO V2来说,我们既想要精度高,还想要速度快。在不扩大网络尺寸的情况下,我们简化了网络,并且使特征更易被学习。我们从以前的工作中得到了很多的灵感,总体概况在表2.
Batch Normalization
batch normalization 通常导致收敛显著,同时呢,也消除了其他形式的正则化需要。YOLO通过在整个卷积层增加BN,我们得到了2%的提升。BN同样帮助我们归一化模型。使用BN,我们可以在不overfitting的前提下去除dropout。
High Resolution Classifier
在ImageNet中,所有表现好的检测方法都使用了预训练的方法。使用Alexnet,许多的输入都是256*256,原始的YOLO使用224*224的图像大小,为了提高分辨率,我们使用了448*448的图像。这就意味着这个网络在在学习目标检测的同时还要调整新的输入分辨率。
对于YOLO v2来说,我们首先fine tune这个分类网络在448*448的分辨率下,一共在ImageNet上进行10次epochs。这就给了网络一定的时间来调整它的卷积核去更好的工作。这种高分辨率的分类网络为我们带来了4%的提升。
Convolutional With Anchor Boxes
YOLO直接使用全连接层来预测bbox。而Faster r-cnn使用hand-picked priors来代替这一步,仅仅使用卷积层来预测anchor box的offset以及confidence。由于预测层是卷积层,所以RPN(region proposal network)预测了特征图的每一个位置的offset。用预测offset来取代coordinate简化了问题,并且使得网络更容易被学习。
我们移除了全连接层,并且使用anchor boxes 来预测bbox。首先,我们去除了一个pooling层来增加输出的尺寸分辨率,同样的,我们在输入的时候,使用416来代替448.我们这样做是因为我们希望在特征图中有奇数个位置,这样就会有一个位于中心的cell了。目标,尤其是大目标,通常会占据图像的中心,,所以有一个cell位于中心是非常好的,这样中间这个cell来预测这个物体,而不是像原来那样,使用四个相邻的cell来预测这个物体。YOLO的卷积层下采样率为32,所以对于416的输入图像,最后会获得13*13的特征图。
当我们移动anchor boxes的时候,我们同样将类型的预测与空间位置分离,由anchor box同时预测类别和坐标。像YOLO一样,我们仍然会计算IOU值,以及类型的可能性。使用anchor boxes,在精度上面,有一点小的下降。对于每张图片YOLO仅仅预测98个bbox,而现在,我们会预测超过一千张。没有anchor boxes,我们获得了69.5的mAP值,召回率为81%,使用了anchor box之后,mAP值为69.2,召回率为88%。尽管mAP值下降了,但是召回率上升意味着我们的模型有更多的room去提升。
Dimension Clusters
在使用anchor boxes的时候,我们遇到了两个问题,首先是box的个数以及维度是手工设定的,网络可以自适应的调整box,但是如果我们提供了更好的priors,那么我们的网络就更容易学习预测好的目标。
取代手工选择priors,我们使用k-means聚类的方法,在训练的时候使bbox自动寻找好的priors。如果我们使用标准的k-means对大的box之间的欧氏距离进行计算,会产生比小box更大的误差。然而,我们真正想要的是,priors可以获得好的IOU值,而与box的尺寸无关。因此,对于距离矩阵来说,我们使用下式:
我们对不同的k值进行k-means,如图2
我们选择k=5作为模型复杂性与高召回率之间最好的平衡。聚类中心与手工选值明显不同,它们的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 locaion prediction
当使用anchor boxes的时候,遇到了第二个问题,那就是模型的不稳定性。尤其是在早期的iterations。大多数的不稳定性来自于预测box的(x,y)。在RPN中,它们是通过下式来预测的:
例如,tx=1,盒子就会往右移,tx=-1,盒子就会往左移。
这个公式没有任何的限制,无论任何在任何位置进行预测,任何的anchor boxes可以在图像中的任意一点。模型随机初始化之后将需要很长一段时间才能稳定预测敏感的物体偏移。
取而代之,我们使用YOLO的方法,预测相对于grid的box的坐标。并且把ground truth约束在0-1之间(利用logistic激活函数约束网络的预测值来达到此限制)。
这个网络对于每一个cell都会预测5个bbox,每个bbox预测5个坐标值,tx,ty,tw,th以及to。如果这个cell距离图像左上角的边距为cx,cy,以及该cell对应的box 的长和宽分别为(pw,ph),那么对应的box为:
因为我们限制了位置,所以预测的参数是很容易被学习的。这会使得网络更加的稳定。使用dimension cluster来直接预测bbox的中心,与使用anchor boxes相比,帮助YOLO提升了5%(所以,很显然,作者最后没有使用anchor boxes)
Fine-Grained Features
修改后的网络最终在13 * 13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,如果用上细粒度特征的话可能对小尺度的物体检测有帮助。Faser R-CNN和SSD都在不同层次的特征图上产生区域建议以获得多尺度的适应性。YOLOv2使用了一种不同的方法,简单添加一个 passthrough layer,把浅层特征图(分辨率为26 * 26)连接到深层特征图。
passthrogh 层把高低分辨率的特征图做连结,叠加相邻特征到不同通道(而非空间位置),类似于Resnet中的identity mappings。这个方法把26 * 26 * 512的特征图叠加成13 * 13 * 2048的特征图,与原生的深层特征图相连接。
YOLOv2的检测器使用的就是经过扩展后的的特征图,它可以使用细粒度特征,使得模型的性能获得了1%的提升。
Multi-Scale Traning
原始的YOLO使用了448*448的输入图像,在增加了anchor boxes之后,我们调整为了416*416,然而,由于我们的方法仅仅使用了卷积层以及池化层,所以它可以检测任意图像大小。我们希望v2可以鲁棒的检测各种尺寸,所以我们在训练的时候考虑了这一点。
取代固定的输入尺寸,我们在每一次iteration的时候改变网络,每隔10个batches,我们的网络就会随机的选择一个新的图像尺寸,图像尺寸为32的倍数,比如320/352等等。最小的是320*320,最大的是608*608.改变尺寸之后,继续训练。
这种机制使得网络可以更好地预测不同尺寸的图片,同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。
在低分辨率图片检测中,YOLOv2是检测速度快(计算消耗低),精度较高的检测器。输入为228 * 228的时候,帧率达到90FPS,mAP几乎和Faster R-CNN的水准相同。使得其更加适用于低性能GPU、高帧率视频和多路视频场景。
在高分辨率图片检测中,YOLOv2达到了先进水平(state-of-the-art),VOC2007 上mAP为78.6%,而且超过实时速度要求。下图是YOLOv2和其他网络在VOC2007上的对比:
Further Experiments
我们在VOC2012中对YOLO v2进行了训练。表4显示了对比结果。当速度最快的时候YOLO v2达到了73.4的mAP值,我们同样训练了COCO与其他方法进行对比,如表5.在VOC矩阵中(IOU=0.5),YOLO获得了44%的mAP值。
3 Faster
我们想要检测的精确些,但是我们同样想要检测的快。对于检测的大部分应用,比如机器人技术、自动驾驶汽车,需要非常低的延迟。为了表现的更好,我们设计YOLO V2,使其变得更快。
大多数的框架依赖于VGG-16作为基本的特征提取器。这是一种强大的、精确的分类网络,但是非常复杂。对于224*224分辨率的每一张图片来说,VGG-16的卷积层需要306.9亿次浮点运算。
YOLO使用了一种基于Googlenet的自建网络。这种网络比vgg-16要快,只需要85亿次运算,然而,他的精度比VGG-16只是下降了一点。224 * 224图片取 single-crop, top-5 accuracy,YOLO的定制网络得到88%(VGG-16得到90%)。
Darknet-19
对于YOLO v2来说,我们使用了一种新的分类模型。我们的模型参考了前人的经验,类似于VGG,我们使用3*3的卷积核,每次池化之后,通道数翻倍。借鉴了network in network的思想,网络使用了全局平均池化(global average pooling)做预测,把1 * 1的卷积核置于3 * 3的卷积核之间,用来压缩特征。使用batch normalization稳定模型训练,加速收敛,正则化模型。
我们最终的模型称为Darknet-19,拥有19个卷积层,5个最大池化层。见表6.Darknet-19处理一张照片需要55.8亿次运算,imagenet的top-1准确率为72.9%,top-5准确率为91.2%。
Training for classification
我们在标准的ImageNet1000类分类数据集上进行训练,一共160个epochs,使用随机梯度下降法,开始学习率为0.1,polynomial rate decay为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据扩充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。(参数都是基于作者的darknet框架)
作为以上的讨论,在进行了224*224的训练之后,我们fine tune为448*448.我们仍然用上面的参数来训练,但是仅仅进行10个epochs,初始学习率为0.001.高分辨率下训练的分类网络top-1准确率76.5%,top-5准确率93.3%。
Training for detection
把分类网络改为检测网络,去掉最后一个卷积层,增加了3个3*3的卷积层,并且在每个卷积层后面都跟一个1*1的卷积层,输出的维度为需要检测的数量。对于VOC数据集,预测5种boxes,每个box包含5个坐标值和20个类别,所以总共是5 * (5+20)= 125个输出维度。也添加了passthrough layer,从最后3 * 3 * 512的卷积层连到倒数第二层,使模型有了细粒度特征。
我们训练了160个epochs,出是学习率为0.001,在第60、90次epochs的时候,将学习率降为原来的十分之一,。weight decay为0.0005,momentum为0.9,以及类似于Faster-RCNN和SSD的数据扩充(data augmentation)策略: random crops, color shifting, etc。使用相同的策略在 COCO 和VOC上训练。
4 Stronger
我们提出了一种联合训练机制,用来将检测数据集和分类数据集联合训练。我们的方法使用含有标签的检测数据集去学习检测相关的信息,比如bbox的坐标预测,是否包含目标,以及包含目标的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。
在训练的时候,我们把检测和分类数据集混合起来,当网络遇到一张属于检测数据集的图片就基于YOLOv2的全部损失函数(包含分类部分和检测部分)做反向传播。当网络遇到一张属于分类数据集的图片就仅基于分类部分的损失函数做反向传播。
这种方法出现了新的挑战。检测数据集仅仅含有通用的目标,以及抽象的标签,比如“狗”“船”。分类数据集有更宽、更深的类别,比如ImageNet数据集拥有超过100种的狗。如果我们想要去训练这两个数据集,我们需要一种方式来整合他们的标签。
大多数的分类方法使用softmax进行计算最终的结果。但是softmax假设类别之间互不包含,但是整合之后的数据是类别是有包含关系的,例如 “Norfolk terrier” 和 “dog”。 所以整合数据集没法使用这种方式(softmax 模型)。
我们采用一种不要求互不包含的多标签模型(multi-label model)来整合数据集。这种方法忽略了数据集的结构(例如 COCO数据集的所有类别之间是互不包含的)
Hierarchical classification
ImageNet标签参考了Wordnet,这是一种结构化概念及概念之间关系的语言数据库。在wordnet中,Norfolk terrier以及Yorkshire terriers都是terrier,这是一种hunting dog,同时也是狗的一种,是canine的一种,等等。大多数的分类方法需要扁平化的标签数据,而在这里,我们需要结构化的标签数据。
WordNet是一个有向图结构(而非树结构),因为语言是复杂的(例如“dog”既是“canine”又是“domestic animal”),为了简化问题,我们从ImageNet的概念中构建了一个层次树结构(hierarchical tree)来代替图结构方案。
为了建立这个tree,我们遍历了ImageNet中的视觉名词,在WordNet上找到从它所在位置到根节点(“physical object”)的路径。 许多同义词集只有一条路径。所以先把这些路径加入层次树结构。然后迭代检查剩下的名词,得到路径,逐个加入到层次树。路径选择办法是:如果一个名词有两条路径到根节点,其中一条需要添加3个边到层次树,另一条仅需添加一条边,那么就选择添加边数少的那条路径。
最后的结果就是一个wordtree,这是一种视觉上的层次模型,在使用wordtree进行分类的时候,我们预测每个节点的条件概率(conditional probability)。比如说,在terrier节点处,我们预测:
如果我们想要计算某个特定节点的绝对概率,我们只需要沿着路径做连续乘积。例如 如果想知道一张图片是不是“Norfolk terrier ”需要计算:
分类时,假设图片包含了物体,即Pr(physical object) = 1.
为了验证这种方法,我们在WordTree(用1000类别的ImageNet创建)上训练了Darknet-19模型。为了创建WordTree1k作者天添加了很多中间节点,把标签由1000扩展到1369。训练过程中ground truth标签要顺着向根节点的路径传播:例如 如果一张图片被标记为“Norfolk terrier”它也被标记为“dog” 和“mammal”等。为了计算条件概率,模型预测了一个包含1369个元素的向量,而且基于所有“同义词集”计算softmax,其中“同义词集”是同一概念的下位词。见图5
使用相同的训练参数,层次式Darknet-19获得71.9%的top-1精度和90.4%top-5精度。尽管添加了369个额外概念,且让网络去预测树形结构,精度只有略微降低。按照这种方式执行分类有一些好处,当遇到新的或未知物体类别,预测精确度降低的很温和(没有突然巨幅下降)。例如:如果网络看到一张狗的图片,但是不确定狗的类别,网络预测为狗的置信度依然很高,但是,狗的下位词(“xx狗”)的置信度就比较低。
这个策略野同样可用于检测。不再假设每一张图片都包含物体,取而代之使用YOLOv2的物体预测器(objectness predictor)得到Pr(physical object)的值。检测器预测一个bounding box和概率树(WordTree)。沿着根节点向下每次都走置信度最高的分支直到达到某个阈值,最终预测物体的类别为最后的节点类别。
Dataset combination with wordtree
可以使用WordTree把多个数据集整合在一起。只需要把数据集中的类别映射到树结构中的同义词集合(synsets)。使用WordTree整合ImageNet和COCO的标签如下图:
Joint classification and detection.
现在,我们可以使用wordtree来联合数据集,我们可以在分类和检测数据集上训练我们的联合模型。我们希望训练一个非常广的检测器,所以,我们使用COCO检测数据集和全部ImageNet的前9000类创造一个联合数据集。为了评估我们使用的方法,也从ImageNet detection challenge 中向整合数据集添加一些还没有存在于整合数据集的类别。相应的WordTree有9418个类别。由于ImageNet是一个非常大的数据集,所以通过oversampling COCO数据集来保持平衡,使ImageNet:COCO = 4:1。
使用这个数据集,我们训练了YOLO9000,我们使用了YOLO v2的结构,anchor box数量由5调整为3用以限制输出大小。当网络遇到一张检测图片就正常反向传播。其中对于分类损失只在当前及其路径以上对应的节点类别上进行反向传播。For example, if the label is “dog” we do assign any error to predictions further down in the tree, “German Shepherd” versus “Golden Retriever”, because we do not have that information.
当网络遇到一张分类图片仅反向传播分类损失。在该类别对应的所有bounding box中找到一个置信度最高的(作为预测坐标),同样只反向传播该类及其路径以上对应节点的类别损失。反向传播objectness损失基于如下假设:预测box与ground truth box的重叠度至少0.31IOU。
采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。
我们在ImageNet detection task上评估YOLO9000。ImageNet detection task和COCO有44个物体类别是相同的。这意味着YOLO9000只从大多数测试数据集中看到过分类数据而非检测数据。最终整体精度为19.7mAP,在从未见过的156个物体检测数据类别上精度为16.0mAP。这个结果高于DPM,但是YOLO9000是在不同数据集上进行半监督训练。而且YOLO9000可以同时实时检测9000多种其它物体类别。
当我们在ImageNet中分析YOLO9000的时候,它在学习新的动物类型表现很好,但是对于像衣服、设备这种类别表现不好。因为从COCO数据集上动物类别那里学习到的物体预测泛化性很好。但是COCO数据集并没有任何衣服类别的标签数据(只有”人”类别),所以YOLO9000很难对“太阳镜”,“游泳裤”这些类别建模。
5 Conclusion
我们介绍了YOLO v2和YOLO9000,这是一种实时的检测系统。YOLO v2是最先进的,比其他的检测系统更快。另外,它可以在不同的图像尺寸上运行,这样就可以在速度与精度之间提供一个非常好的平衡。
YOLO9000是一个实时的检测框架,通过联合检测机制,它可以检测超过9000种类别。我们使用wordtree来整合不同的资源,使用我们的联合训练技术在ImageNet和COCO数据集上进行训练。YOLO9000是缩小检测数据集和分类数据集之间尺寸差异的巨大一步。
我们的许多技术不仅仅是关于目标检测的,我们的wordtree对于图像分类来说,提供了更丰富、更详尽的输出空间。使用分层分类的数据集联合在分类以及分割领域是非常有用的。多尺度的训练技术对于不同的视觉任务来说是非常有用的。
对于未来的工作,我们希望利用类似的技术进行弱监督的图像分割。我们还计划在训练期间对弱监督标签的分类数据使用更加强大的匹配策略提升我们的检测结果。计算机视觉在海量的标记数据上是非常好的,我们将会继续寻找将不同资源整合在一起进行训练的模型。