1.Rich feature hierarchies for accurate object detection and semantic segmentation(2014)
Abstract
用PASCAL VOC数据集来进行衡量的目标检测性能在近些年趋于稳定,其中性能最好的方法是使用一个复杂的整体系统(complex ensemble system),而不是通常将多个低层图像特性与高层上下文组合在一起(typically combine multiple low-level image features with high-level context)。
本文提出了一种简单可扩展的算法,即RCNN(Regions with CNN features),比现在最好的结果(VOC 2012)可以提高30%的平均准确度(mAP),可以达到53.3%。
这个算法包括两个方面:
(1)我们可以把大容量的卷积神经网络变成自底向上的候选区域,用于定位和分割对象
(2)当标记的训练数据稀缺时,可以先对辅助数据集(任务)进行受监督的预训练, 随后是基于域进行特定调整,产生显着的性能提升。
1.介绍
SIFT和HOG这两个算法的性能在近年来提升缓慢,因为它仅限于与V1层有联系,而V1层是灵长类动物视觉通路的第一层外皮层。但是识别往往还与下层的许多层次有关,所以我们推测,在视觉识别方面可能存在更有效的、分层的、多层次的算法来计算特征。
Fukushima的神经认知机是一个由生物学启发的具有平移不变性的分层模式识别模型,是这一类算法的一种较早的尝试。但是这一尝试缺少受监督的训练算法。
在Rumelhart等人的基础上,LeCun等人发现通过支撑作用的随机梯度下降训练卷积神经网络(CNNs)是一种有效的方法,这种模型超越了神经认识机。
CNNs在20世纪90年代得到了广泛的应用,但是随着支持向量机的兴起,CNNs不再流行。2012年,Krizhevsky等人在ILSVRC上显示了更高的图像分类精度,重新点燃了人们对CNNs的兴趣。他们的成功源于训练了一个120万张标签图片的大型CNN,且加入了LeCun的CNN上的一些转折(例如,max(x,0)校正非线性和“中途退出”正则化)
在2012年ILSVRC研讨会上,关于ImageNet结果的重要性得到了激烈的讨论,核心问题可以归结为:ImageNet上的CNN分类结果在多大程度上可以推广到PASCAL VOC挑战上的目标检测结果。
我们我们通过缩小图像分类和目标检测之间的差距来回答这个问题。本文首次表明,与基于简单的方向梯度直方图(Histogram of Oriented Gradient, HOG)特征的系统相比,PASCAL VOC上的CNN可以显著提高目标检测性能。为了实现这个结果,我们关注两个问题:用深度网络进行对象的定位和用较少的有注释的标注数据训练一个大容量的模型。
与图像分类不同,检测需要在图像中定位(可能有很多)对象。一种方法将定位定义为一个回归问题。然而,Szegedy等人和我们自己的研究表明,这种策略在实践中可能并不成功(他们报告了2007年VOC的30.5%,而我们的方法实现了58.5%)。另一种方法是构建一个滑动窗口检测器。CNNs已经以这种方式使用了至少20年,通常用于约束对象种类,例如人脸和行人。为了保持较高的空间分辨率,这些cnns通常只有两个卷积层和池化层。我们还考虑采用滑动窗口方法。然而,在我们的网络中,有5个卷积层,在输入图像中有非常大的接受域(195 x 195像素)和步长(32 x 32像素),这使得在滑动窗口范例中精确定位成为一个开放的技术挑战。
相反,我们通过在“区域识别”范式内操作来解决CNN的定位问题,该范式在对象检测和语义分割两方面都取得了成功。在测试时,我们的方法对输入图像生成2000个左右的独立分类的候选区域,利用CNN从每个建议中提取一个固定长度的特征向量,然后用特定分类的线性svm对每个区域进行分类。我们使用一个简单的技术(仿射图像扭曲)来计算每个建议区域的固定大小的CNN输入,而不管该区域的形状如何。图1显示了我们方法的概述,并突出显示了我们的一些结果。由于我们的系统将候选区域与CNN相结合,所以我们将方法命名为R-CNN:具有CNN特征的区域。
图1 目标检测系统概述
我们的系统包括这四个步骤:(1)获取一个输入图像 (2)提取2000个左右自底向上的候选区域 (3)使用一个大型卷积神经网络(CNN)计算每个建议的特征 (4)使用特定于类的线性支持向量机对每个区域进行分类。
R-CNN在PASCAL VOC 2010上的平均精度(mAP)达到53.7%。作为对比,空间金字塔和词袋模型方法使用相同的候选区域,但平均精度只能达到35.1%。流行的可变型部件模型的平均精度为33.4%
检测面临的第二个挑战是标记数据稀缺,目前可用的数量不足以训练一个大型CNN。解决这个问题的传统方法是使用无监管预训练,然后进行有监管的微调。本文的第二个主要贡献是证明了在大辅助数据集(ILSVRC)上进行有监管的预训练,然后在小数据集(PASCAL)上进行特定领域的微调,是在数据匮乏时学习大容量CNNs的有效范例。在我们的实验中,用于检测的微调将mAP性能提高了8个百分点。经过微调后,我们的系统在VOC 2010上的mAP为54%,而基于HOG的高调谐可变形部件模型(DPM)的mAP为33%。我们还指出了同时代的Donahue等人的工作,他们指出Krizhevsky的CNN可以作为黑盒特征提取器(无需微调)使用,在场景分类、细粒度子分类和领域适应等多个识别任务上都有出色的性能。
我们的系统也相当高效。唯一的类特定计算是一个相当小的矩阵-向量乘积和贪婪的非最大抑制。这个计算属性在所有种类上遵循共享的特性,在空间上也比之前使用区域特征的方法低两个数量级。
理解我们的方法的失效模式对改善这个方法来说也很重要,所以我们使用检测分析工具Hoiem来报告结果。作为这个分析的一个立即得出的结果,我们证明简单的边界框回归方法显著减少定位错觉的这个说法是占主导地位的错误模式。
在发展中技术细节之前,我们注意到因为R-CNN操作区域可以自然的扩展到语义分割的任务。通过少量的修改,我们在PASCAL VOC的分割任务上也取得了有竞争力的结果,在2011年的VOC测试集上平均分割准确率为47.9%。
2.用R-CNN进行目标检测
我们的目标检测系统由三个模块组成。第一种模块生成分类独立的候选区域。这些候选区域定义了一组对我们的检测器有用的候选检测。第二个模块是一个大型的卷积神经网络,它从每个区域提取一个固定长度的特征向量。第三个模块是一组特定于类的线性支持向量机。在本节中,我们将介绍每个模块的设计决策,描述它们的测试时使用情况,详细说明如何学习它们的参数,并在PASCAL VOC 2010-12上显示结果。
2.1.模块设计
候选区域。最近的许多论文都提供了生成分类独立的候选区域的方法。他们将CNN应用于在规则间隔的方形作物上检测有丝分裂细胞,这是候选区域的一个特例。虽然R-CNN与特定候选区域方法无关,但是我们使用有选择性的搜索与先前的检测工作进行对照比较。
特征提取 我们使用我们自己实现的Krizhevsky等人的CNN,从每个候选区域中提取4096维特征向量,我们建立在开源cuda-convnet代码之上。特征是通过前向传播通过五个卷积层和两个全连接层减去平均的224X224 RGB图像来计算的。 我们建议读者参考了解更多的网络架构细节。 第3节中的消融研究显示了最后三层每层特征的性能如何变化。
为了计算一个候选区域的特征,我们必须首先将该区域中的图像数据转换为与我们的CNN兼容的形式。网络结构需要输入固定的224X224像素尺寸大小。在我们任意形状区域的许多可能的变换中,我们选择最简单的。不管候选区域的大小或宽高比如何,我们将围绕其边界框中的所有像素到所需的尺寸大小。这导致每个区域的固定长度特征向量。 图2显示了围绕训练区域的随机抽样。失真比人们可能想象的先验小。
2.2 结论
我们在一张测试图像上进行选择性搜索,以提取大约2000个候选区域(我们在所有实验中使用选择性搜索的“快速模式”)。我们把每一个候选区域都围成要求的形状大小,并通过CNN向前传播,以便从所需的层读取特征图。然后,对于每个类,我们使用针对该类训练的SVM来对每个提取的特征图进行评分。给定图像中的所有得分区域,我们应用贪心非极大抑制(对于每个类别,独立地)排除区域,如果它具有与交叉联合(IoU)重叠有着较高得分的非抑制区域大于学习阈值 (所有实验中为0.3)。
运行时间分析 两个关键属性使结论非常高效。首先,所有类别共享所有CNN参数。 第二,与其他常见方法相比,由CNN计算的特征向量是低维的,例如具有视觉词袋模型编码的空间金字塔。例如,UVA检测系统中使用的特征比我们(360k对4k维)大两个数量级。
这种共享的结果是计算候选区域和特征(在GPU上的13s /图像或在CPU上的53s /图像)的时间花费平摊到在所有类别上。 唯一的指定类计算是特征与SVM权重和非最大抑制之间的点积。在实践中,一幅图像的所有点积都被分批成为单个矩阵矩阵乘积。特征矩阵通常为2000x4096,SVM权重矩阵为4096xN,其中N为类数。
虽然不是很明显,我们的方法应该容易地扩展到成千上万的对象类,而不使用近似的技术,如散列法。 即使有100k类,在现代多核CPU上进行矩阵乘法只需10秒。 此外,这种效率不仅仅是使用候选区域和共享特征的结果。 由于其高维度特征,UVA系统的速度将会降低两个数量级,而需要134GB的内存才能存储100k线性预测器,相比之下,我们的低维特性只需1.5GB。
将我们的方法与Dean等人最近的工作使用DPM和散列的可扩展检测进行对比也是有趣的。 他们在VOC 2007上报告了大概16%的mAP,每个图像的运行时间为5分钟,当引入10k干扰类时。 通过我们的方法,10k个检测器可以在CPU上运行大约一分钟,并且由于没有近似值,mAP将保持在48%。
2.3 训练
CNN 预训练 我们使用具有图像水平的注释(即无边框标签)的大型辅助数据集(ILSVRC 2012)来“预训练”CNN。 除了两个小的变化(简化实现)之外,我们紧密地遵循了[26]的方法。我们分享了在DeCAF技术报告中详细介绍的相同的实现和训练流程,并向读者介绍细节。简而言之,我们的CNN几乎符合[26]的表现,在ILSVRC 2012验证集上获得了排名第一的错误率仅高出2.2个百分点。这种差异可能是由于我们的简化。
CNN 微调 为了使CNN适应新的任务(检测)和新的领域(围绕的PASCAL窗口),我们只使用PASCAL的包围候选区域继续训练CNN参数。在预训练期间,我们将学习率以10的倍率降低三次。然而,最后的学习率并没有取得什么进展。为了进行微调,我们开始了随机梯度下降(SGD),学习率是初始预训练率的0.01倍。 这允许微调进行,而不会使初始化崩溃。我们对待所有候选区域以≥ 0.5 IoU与真实标定框重叠,作为该标定框类的正样本,其余作为反样本。在每次SGD迭代中,我们采样两张训练图片并且通过从每个图像中的大约2000个中抽取64个候选区域来构建大小为128的小块。由于目标对象很少见,所以我们发现有必要对采样进行偏移平均每个小块的1/4是正样本。
目标类别分类器 考虑训练二分类器来检测汽车。很明显,紧紧围绕汽车的图像区域应该是一个正样本。同样地,很显然,与汽车无关的背景区域应该是一个负样本。 较不清楚的是如何标注部分重叠汽车的区域。我们用IoU重叠阈值来解决这个问题,小于阈值的区域被定义为反样本。通过网格搜索{0,0.1,...,0.5}选择重叠阈值0.3。我们发现,仔细选择这一阈值至关重要。将其设置为0.5,如[36]所示,将使得mAP降低5点。同样,将其设置为0会将mAP降低4点。正样本被简单地定义为每个类的真实标定框。
一旦提取了特征并应用了训练标签,我们可以优化每个类的一个线性SVM。 由于训练数据太大而不适合存储,所以我们采用了standard hard negtive mining method。我们发现该方法迅速收敛,实际上在所有图像中只有单个通道,mAP才会停止增长。训练是快速的,给定预先计算的特征向量,我们存储在磁盘上。所有20个PASCAL目标检测SVMs的训练时间(5k图像)在单个核上需要大约1.5小时。在 GPU上每个区域的特征计算需要大约5ms。
2.4 在PASCAL VOC 2010-12上的结果
根据PASCAL“最佳实践”指南,我们对VOC 2007数据集进行了所有设计决策。对于VOC 2010-12数据集的最终结果,我们对VOC 2012训练的CNN进行了微调(以避免在验证集上过拟合)。然后,我们在VOC 2012训练中训练了我们的检测SVM,并将测试结果提交给评估服务器一次。
表1显示了VOC 2010的完整结果。我们将我们的方法与三个强基准进行比较,但不包括使用背景重排的系统的结果。这样的回顾提高了所有的方法,并且与本文的重点是正交的(为了清楚起见,我们分离出个别的窗口,所以没有使用背景信息)。最相似的对比是UVA系统来自Uijlings等人[36],因为我们的系统使用相同的候选区域算法。为了对区域进行分类,他们的方法构建了一个四级空间金字塔,并用密集采样的SIFT,扩展的对数SIFT和RGB-SIFT算子填充,每个矢量都用4000字的码本进行量化。使用直方图交点内核SVM进行分类。与他们的多特征相比,非线性内核SVM方法,我们实现了mAP的大幅度改进,从35.1%到43.5%的mAP,同时也快得多。我们的方法在VOC 2011/12测试中达到类似的性能,mAP为43.2%。
3. 可视化,消融和错误模式
CNN在实践中运作良好,但是它学到了什么,其设计的哪些方面对于其成功至关重要,以及它如何失败?
3.1 可视化学习特征
第一层滤波器可以直接可视化并且易于理解。它们捕获定向的边缘和对立的颜色。理解后续层次更具挑战性。Zeiler和Fergus在[40]中提出了一种有吸引力的去卷积方法。 我们提出一个简单的(和补充的)非参数方法,直接显示网络学到的内容。
这个想法是在网络中列出一个特定的单位(人造“神经元”),并将其视为自己的目标检测器。也就是说,我们在大量的延伸候选区域(约1000万)中计算神经元的激活函数,将候选区域从最高到最低的响应进行排序,执行非极大抑制(在每个图像内),然后显示最高得分区域。我们的方法让所选单元“自己说话”,通过准确地显示它触发的输入。 因为我们避免平均,我们有机会看到多种视觉模式,并深入了解单元计算的不变性。
我们可以从pool5层中可视化单元,这是网络的第五个maxpolled输出层和最终卷积层。pool5层的特征图是6x6x256 = 9216维。忽略边界效应,每个pool5单元在原始227x227像素输入中具有195x195像素的接受域。 一个中央pool5单元具有几乎全局的视野,而靠近边缘的则有一个小得多的剪切支撑。我们选择了这个层,因为它是最后一个层次,它的单元具有紧凑的接收域,使得更容易显示图像的哪个部分负责激活。 另外,我们对下一层fc6学习的表示获得了一些直观理解,因为它需要pool5激活的多个加权组合。
图3显示了我们在VOC 2007训练中进行了微调的来自CNN的六个单元的前16个激活。 前两个单元被选中,因为它们对应于猫SVM中的大的正负权重(在pool5中训练)。第一种是选择猫脸,而第二种是选择其他动物面孔(主要是狗)。我们还可以看出羊和人的单元。最后两行表示更通用的单元; 一个在一定宽度的对角线上触发,另一个在红色斑点上触发。这些可视化表明了pool5特征的丰富性并暗示其中的多样性,单位范围从特定的动物面孔到更通用的形状和纹理。 随后的全连接层具有对这些丰富特征的大量组合进行建模的能力。额外的可视化包括在附录,图6中。
3.2 消融研究
性能逐层,无需微调。为了了解哪些层对于检测性能至关重要,我们在VOC 2007数据集上分析了每个CNN最后三层的结果。第3.1节简要描述了池化层5。最后两层总结如下。
fc6层全连接到pool5层。 为了计算特征,它通过pool5层特征图(重构为9216维向量)乘以4096x9216的权重矩阵和然后添加一个偏置向量。 该中间矢量是分量半波整流(即x<- max(0,x))。 fc7层是网络的最后一层。 它通过将由fc6层计算的特征乘以4096x4096权重矩阵,并且同样添加偏置矢量并施加半波整流。
我们首先来看看CNN的结果,在PASCAL上没有进行微调,即所有的CNN参数都仅在ILSVRC 2012上进行了预处理。分析性能逐层图(表2第1-3行)显示,fc7层的特征与fc6层的特征相比具有很少或没有优势。 这意味着可以删除CNN参数的29%或约1680万,而不会降低mAP。更令人惊讶的是,删除fc7和fc6都能产生相当好的结果,即使仅使用6%的CNN参数来计算pool5特征。CNN的大部分表示能力来自卷积层,而不是来自全连接层。这个发现表明在计算任意大小图像的HOG意义上的密集特征图的潜在实用性,通过仅使用CNN的卷积层。这种表示将能够在pool5层丰富的特征之上使用包括DPM的滑动窗口检测器。 颜色 为了了解我们的系统从颜色中获益多少(与基于HOG的方法相比,这在很大程度上忽视它),我们在灰度级空间中测试了我们的预训练的CNN。从灰度版本的PASCAL图像上对fc6层特征进行SVMs的训练,并对灰度图像进行测试,将VOC 2007测试中的mAP从43.4%降低到40.1%。
性能逐层,微调 现在,我们在对VOC 2007训练的参数进行了微调后,再来看看CNN的结果。 改进效果是显着的。微调使mAP提高4.6点至48.0%。 对于fc6和fc7,微调的提升比pool5大得多。 这可能表明,从ImageNet中学习的丰富的pool5特征对于PASCAL来说已经足够了,大多数改进是通过学习如何在fc6中进行最优组合而获得的。
与近期特征学习方法的比较 在PASCAL检测中已经尝试了相对较少的特征学习方法。我们来看两种最新的基于可变形零件模型(DPM)的方法。作为参考,我们还包括标准的基于HOG的DPM的结果。
第一个DPM特征学习方法,DPM ST,增加了具有“素描令牌”概率直方图的HOG特征。直观上,素描令牌是通过图像块中心的轮廓的紧密分布。素描令牌概率是通过一个随机森林在每个像素点上进行计算的,被训练为将35x35像素块分类成150个素描标记或背景之一。
第二种方法,DPM HSC,使用稀疏编码的直方图代替HOG。 为了计算HSC,使用100个7x7像素的(灰度)原子学习词典在每个像素处求解稀疏编码激活。所得到的激活以三种方式(全部和两个半波)进行调整,空间池化,单元l2归一化,然后进行功率变换(x<- sign(x)|x|a)。
我们所有的CNN方法都超过三个DPM基线,包括使用特征学习的两个。 与最新版本相比DPM仅使用HOG功能,我们的mAP超过14点:48.0%vs 33.7% - 相对提高42%。 HOG和素描令牌的组合在单独的HOG下获得2.5个mAP点,而HSC在HOG上提高了4点的MAP(与其内部的单独的DPM基线相比,两者均使用非公开DPM的实现不如开源版本)。 这些方法分别达到29.1%和34.3%的mAPs。
3.3 检测误差分析
我们应用了Hoiem等人的优秀检测分析工具,为了揭示我们的方法的错误方式,了解微调如何改变他们,并且看看我们的错误类型与DPM的比较。 分析工具的完整总结超出了本文的范围,我们鼓励读者参考[23]了解一些更精细的细节(如“归一化AP”)。由于分析最好在相关图谱的背景下被吸收,所以我们在图4和图5的标题中提出讨论。
4. 语义分割
区域分类是语义分割的标准技术,使我们能够轻松地将我们的CNN应用于PASCAL VOC分割赛事。为了促进与当前领先的语义分割系统(称为O2P为“二阶池化”)进行直接比较,我们在他们的开源框架内工作。O2P使用CPMC为每个图像生成150个候选区域,使用支持向量回归(SVR)预测每个区域的每个类别的质量。 他们的方法的高性能是由于CPMC区域的质量和多种功能类型(SIFT和LBP的丰富变体)的强大的二阶池化。 我们还注意到,Farabet等最近在使用CNN作为每个像素的分类器的几个密集场景标记数据集(不包括PASCAL)上展示了良好的结果。
我们遵循[2,5]并扩展PASCAL分割训练集,以包括Hariharan等提供的额外注释。设计决策和超参数在VOC 2011验证集上被交叉验证。 最终测试结果仅评估一次。
CNN特征进行细分 我们评估了CPMC区域计算特征的三种策略,所有这些策略都是通过将该区域的矩形窗口包围在到224x224来开始的。 第一个策略(full)忽略了该区域的形状,并直接在包围的窗口上计算CNN特征,就像我们检测到的那样。然而,这些特征忽略该区域的非矩形形状。 两个区域可能具有非常相似的边界框,同时具有非常小的重叠。 因此,第二种策略(fg)仅在区域的前景模版上计算CNN特征。 我们用平均输入替换背景,使平均值减去后的背景区域为零。 第三个策略(full + fg)简单地连接full和fg特征; 我们的实验验证了它们的补充。
VOC 2011的结果 表3显示了与O2P相比,VOC 2011验证集的结果总结(参见附录中的表5,以获得完整的每个类别的结果)。在每个特征计算策略中,fc6层始终优于fc7层,下面的讨论参考fc6层特征。fg策略比full略胜一筹,表明模板区域的形状提供更强的信号,匹配直觉。 然而,full + fg的平均精度达到47.9%,我们的最佳结果为4.2%(略逊于O2P),表明即使给出了fg特征,由full特征提供的背景提供了高度的信息。值得注意的是,在我们的full+ fg特征上训练20个SVR需要大约一个小时在单个核上,而在O2P特征上训练需10个小时。
在表4中,我们展示了VOC 2011测试集的结果,将我们的最佳表现方法fc6(full + fg)与两个强基准进行了比较。 我们的方法在21个类别中的11个中实现了最高的分割准确度,并且最大的总分割准确率为47.9%,在各个类别之间平均(但可能与任何合理的误差范围内的O2P结果有关)。更好的表现可以通过微调实现。
5. 讨论
利用大型辅助数据集是我们方法成功的关键。 为什么不给更多的训练数据到其他方法? 一个问题是从不同领域的数据中受益,这是不寻常的,并且被标记为不同的任务。例如,训练PASCAL的DPM需要PASCAL类别的边界框注释。此外,[42]表明即使有更多数据可用,DPM也不容易从中受益。 第二个问题是许多方法缺乏大量的共享参数来预训练。 例如,一个词袋模型的方法不太可能受益于在ImageNet上训练其码本。这些问题在将来可能会被克服,但它们是自己的研究工作。
本文证明了一个强大的实验说明:大型卷积神经网络在利用“大视觉数据”来学习丰富的特征层次是非常有效的,这将在黄金标准PASCAL VOC挑战赛中产生以前无法实现的目标检测结果。这不是一个小小的壮举。从检测器的优势来看,ILSVRC 2012的标签很弱,甚至缺少关键视觉概念(如人物)的注释。CNN有能力轻松将这些数据转化为最佳性能的检测结果是真正令人兴奋的。我们通过使用计算机视觉和深度学习的经典工具(自下而上的候选区域和卷积神经网络)的组合来实现这些结果是重要的。 这两者不是对立的,而是自然而且不可避免的伙伴。