R-CNN ——Rich feature hierarchies for accurate object detection and semantic segmentation Tech report

                                                         R-CNN

论文原文:https://arxiv.org/pdf/1311.2524.pdf

摘要

目标检测技术在数据集PASCAL VOC上的性能,在过去几年中发展的比较平缓。最好的方法是复杂的集成系统,典型的方法是组合多个低水平的图像特征成为高水平的上下文特征。本文提出了一种简单且可伸缩的目标检测算法,相比之前最好的算法,在2010VOC数据集上mAP有了30%的提升,达到了53.3%. 本文的方法组合了两个关键点:(1)把卷积神经网络应用到候选区域的定位和分隔;(2)当带标签的数据稀少的时候,先用预训练作为辅助任务,然后用特定领域的数据进行微调,也会得到性能的提升。因为本文组合了候选区域和CNN特征,所以该方法成为R-CNN。本文也比较了R-CNN和基于滑窗的检测算法OverFeat,发现在ILSVRC2013数据集上,R-CNN优于OverFeat算法。完整的代码在http://www.cs.berkeley.edu/˜rbg/rcnn.

1. 简介

特征问题。过去几十年中,在视觉识别领域的进步基本上归结为SIFT[29]特征和HOG[7]特征。但是如果观察视觉识别任务在PASCAL VOC数据集上目标检测[15]的性能就会发现,在2010到2012年之间进步很慢。

SIFT和HOG是分块方向直方图,可以关联到V1中复杂细胞的一个表示,而V1是灵长类视觉通路中的第一个皮层区域。我们已经知道,识别发生在多个层次上,分多个阶段计算特征,这使得视觉识别具有更多信息。

Fukushima的受生物启发的层次结构的神经认知机模型[19],是很早就在这方面的尝试,该模型具有平移不变性。但是该模型缺少监督训练算法。Rumelhart[33]、LeCun[26]表明了用反向传播的随机梯度下降算法能有效地训练卷积神经网络(CNNs),它是神经认知机模型的扩展。

CNNs在20世纪90年代大量使用[27],后来因为支持向量机的兴起,才慢慢衰落。在2012年的ImageNet大规模视觉识别挑战赛(ILSVRC)上[9,10],Krizhevsky[25]用CNNs模型展示了很高的准确率,又重新激发了人们对CNNs的兴趣。他们用120万个图片训练了一个CNNs模型,该模型在LeCun的模型上仅仅做了很少的改进,例如用max(x,0)非线性修正单元损失函数(ReLU)和dropout正则化。

关于ImageNet数据集上的分类结果,在2012年ILSVR的研讨会上引起了人们激烈的辩论。辩论的中心焦点是如何把ImageNet上的分类结果推广到PASCAL VOC数据集的目标检测任务上。

我们关于这个问题的答案是在图片分类和目标检测之间建立联系。本文首次表明在PASCALVOC数据集上,与基于HOG的算法相比,一个CNN网络有非常高的目标检测性能。主要关注两个问题:1)用深度网络定位物体;2)用很少的带标签数据来训练一个高精度的模型。

不同于图片分类目标检测需要在图片中定位目标。一种方法是把定位问题看成是回归问题。但是,从Szegedy[38],以及我们的工作表明,这种方法在实际应用中可能不管用,在VOC 2007数据集上,他们的mAP(mean average precision)是30.5%,我们的达到了58.5%。另一种是采用滑窗的检测方法。CNNs采用这种方法已经在目标分类、人脸识别【32,40】、行人检测【35】等任务中使用了20几年了。为了保持高空间分辨率,CNN模型仅仅有两个卷积层和池化层。我们也考虑了用滑窗方法,但是,我们的网络有5个卷积层,而且在输入图片上还有195*195的这么大的感受野、32*32像素的滑动,从而导致了在滑动窗口中精确地定位成为了一个很大的挑战。

相反,我们在候选区域识别的方法解决CNN定位问题【21】,该方法已经成功地应用在目标检测【39】和语义分隔任务中【5】。我们的方法在测试的时,首先在输入图片上生成大约2000个与目标类别无关的候选区域然后在每一个候选区域上用CNN提取出固定长度的特征向量,最后用线性SVM对每一个候选区域进行分类。我们用仿射变换从每一个候选区域中计算固定大小 CNN,而不管候选区域的大小。图1展示了我们方法的大概和我们的结果。因为我们的方法结合了候选区域和CNN,因此我们称该方法为R-CNN,即带CNN特征的候选区域。

图1 是R-CNN目标检测流程。1是输入一个图片。2是提取大约2000个候选区域。3是用CNN计算每一个候选区域的特征。4是用线性SVM对每一个候选区域进行分类。R-CNN方法在PASCAL VOC数据集上mAP达到了53.7%。为了比较,【39】中使用相同的候选区域,但是用空间金字塔和视觉词袋方法,其mAP是35.1%。流行的可变形部件模型(DPM)的mAP是33.4%。在200个类别的ILSVRC2013检测数据集上,R-CNN方法的mAP是31.4,相对于OverFeat[34]的24.3%来说,有很大的提高。

本文在200个类别的ILSVRC2013检测数据集上比较了R-CNN和OverFeat方法【34】。OverFeat用滑窗CNN方法来检测目标,达到了目前在ILSVRC2013检测数据集上最好的结果。我但是们的试验表明,R-CNN方法的31.%要明显优于OverFeat的24.3%。

目标检测面临的第二个挑战是带有标签的数据很少,不足以训练大的CNN。解决这个问题的一般方法是首先用无监督的预训练,然后用有监督的模型微调[35]。本文的第二个贡献是首先在辅助数据集(ILSVRC)上用有监督的预训练,然后用特定领域的小数据集(PASCAL)进行微调,当数据量很少的时候,这种方式可以有效地训练高精度的CNN。在我们的实验中,微调可以提高8个百分点的mAP。通过微调之后,我们算法的mAP在VOC2010数据集上达到了54%,而基于HOG的DPM[17,20]算法的mAP是33%。我们也向读者指出,同期的Donahue的工作[12],在场景分类等很多识别任务上取得了非常好的性能,他表明Krizhevsky的CNN模型能够作为黑箱特征提取器。

我们的算法也很高效。与具体类别相关的计算是一个小矩阵与向量的乘积和贪婪非最大抑制。因为不同的类别共享特征,所以比之前的区域特征方法[39]的计算量小两个数量级。

理解失败的模型对于改进模型也很关键。因此,我们从Hoiem的检测分析工具[23]报告了失败模型的结果。作为结论,我们证明了一个简单的边界框回归方法能明显低减少定位错误,尽管它是失败的模型。

在讲解技术细节之前,我们注意到R-CNN在区域上计算,很自然地把它扩展到语义分隔任务上。经过很小的改进,我们在PASCAL VOC分隔任务上取得了很好的结果,而且在VOC2011测试集上的平均分隔精度达到了47.9%。

2. 用R-CNN进行目标检测

我们的目标检测系统由三个模块组成第一个模块是用来生成若干个与目标类别无关的候选区域。这些候选区域组成了候选检测集合。第二个模块是一个从每一个候选区域中提取固定长度特征向量的深度神经网络第三个模块是一组与具体目标类别相关的线性支持向量机。

本节介绍这三个模块的具体设计、测试时长、学习参数的细节,并且给出在PASCALVOC2010-2012和ILSVRC2013上的检测结果。

2.1 模块设计

候选区域

最近有大量的论文提出了与类别无关的候选区域生成方法。例如:对象性[1]、选择搜索[39]、类别无关的候选目标[14]、约束参数最小切割(CPMC)[5]、多尺度组合[3]、Ciresan[6]等。Ciresan用CNN检测有丝分裂的细胞,是候选区域方法的一个特例。当然,R-CNN是一种选择搜索的候选区域方法,用选择搜索是为了方便与之前的检测方法比较[39,41]。

特征提取

用Caffe[24]实现Krizhevsky的CNN网络,从每一个候选区域中提取一个4096维的特征向量。该前向传播网络输入是227*227大小的RGB图片,有5个卷积层和2个全连接层。欲知该网络的详情,请参考[24,25]。

为了计算每个候选区域的特征向量,首先要把该候选区域变换成227*227大小,因为网络输入需要这样大小的图片。我们选择最简单的变换。尽管候选区域的大小和宽高比不同,可以用一个紧边界框来把它变成需要的大小。在变换之前,先扩大紧边界框,使得变换后的正好有p个像素(本文取 p=16),而且原始边界框包含图片背景。图2是部分用来训练的变换后的候选区域。

2.2 测试时间

在测试时,在测试数据上用选择搜索方法提取大约2000个候选区域,(我们的实验用的是快速版本的选择搜索)。为了计算特征训练,需要先变换每个候选区域,然后经过CNN的前向传播,最后,用该类已经训练的SVM对每个特征向量打分。对于图片中所有打分候选区域,按照贪婪非极大抑制(NMS)方法,如果该区域的交并比(IoU)大于阈值,则移除该区域。

运行时间分析

有两个方法可以提高检测效率。第一个是所有类别共享CNN参数。第二个是相对于其它方法,例如视觉词袋(bag-of-visual-word)空间金字塔方法,用CNN来提取特征向量是低维的。在UVA检测系统[39]中,特征向量的维数比我们的大两个数量级,UVA的特征向量维数是360k,我们的是4k维。

由于参数共享,所以计算候选区域和特征向量的时间分摊到在所有类别中(在GPU上一个图片是13秒,在CPU上,每个图片是53秒)。计算特定类别时,是特征向量和SVM的权重的点积运算。实际上,图片的所有点积运算都是矩阵的乘积。特征矩阵是2000*4096大小,SVM权重矩阵是4096*N大小,其中N是类别数量。

上面的分析表明,R-CNN能够扩展到数千个类别上,而不需要逼近技术,例如哈希方法。

如果多达10万个类别,在现代多核CPU上,结果矩阵的相乘也仅仅需要10秒钟。这种高效性,还不仅仅是用候选区域和参数共享的结果。UVA系统由于高维特征,需要134G的内存来存贮10万个线性预测模型。而我们的方法由于是低维特征,只需要1.5G内存即可。可见,UVA需要的内存比我们的大2个数量级。

把R-CNN方法与用DPM和哈希方法的伸缩检测方法【8】做对比,也很有意思。该方法在VOC2007数据集上的mAP大约是16%,并且在1万个不同类别上处理一个图片需要5分钟。R-CNN方法在CPU上,1万个类别大约需要1分钟,并且mAP是59%,见3.2节。

2.3 训练

监督预训练

我们在一个大的辅助数据集(ILSVRC2012分类数据集)上,仅仅用图像级标来预训练CNN,对于这个数据集不能获取边界框标签。在开源Caffe CNN库【24】上执行预训练。简单来说,我们的CNN性能接近Krizhevsky方法【25】,在ILSVRC2012分类验证集上top-1错误率比他的高2.2%百分点。这种差距来源于训练过程的简化。

特定领域微调

把我们的CNN应用到新的检测任务和新的领域时,用随机梯度下降方法(SGD)训练CNN的参数,仅仅需要区域变换过程。除了替换CNN的分类时1000个神经元(ImageNet是1000个类别)和随机初始化的(N+1)个神经元之外,CNN的结构无需修改,其中N是目标类别数量,+1是一个背景。对于VOC数据集来说,N=20,而对于ILSVRC2013数据集来说,N=200。把IoU 0.5的候选区域看成是前景,作为该类的正类样本,其它的作为负样本。SGD的初始学习率是0.001,初始预训练学习率的1/10,在微调时可以改进而不会与初始值冲突。在每个SGD迭代步,取32个正样本(前景)和96个负样本(背景)作为一个最小批次,因此一个批次共有128个样本。它们不取一样多,是因为正样本比负样本少。

目标分类

考虑训练检测汽车的二分类器。大部分有汽车的图片是正样本。没有汽车的图片是负样本。当图片中只有小部分是汽车,那么这个图片是正样本还是负样本,就不好区分了。可以设定交并比(IoU)阈值来判断样本的类别,如果小于该阈值,则认为是负样本。IoU的阈值用网格搜索方法,在验证集上从{0,0.1,…,0.5}中选择,我们选择的是0.3。我们发现仔细选择该阈值很重要。【39】选择0.5时,导致mAP下降了5个百分点,而选择0导致mAP下降了4个百分点。正样本是每个类别的前景。

当提取特征和训练标签准备完毕之后,开始对每个类别优化一个线性的SVM。由于训练数据太大而不能放进内存,所以我们采用标准的难分负样本挖掘方法【17,37】。难分负样本挖掘方法收敛很快,并且在计算一轮全部图片后mAP停止增加。

在附录B中,我们讨论了在微调时和训练SVM时,正样本和负样本的定义为什么不同。还讨论了为什么要用训练SVM来分类,而不是简单地用微调CNN最终的softmax层的输出。

2.4 在PASCAL VOC2010-2012数据集上的结果

按照PASCAL VOC的最佳实践【15】,我们在VOC 2007数据集上验证模型和超参数。关于VOC 2010-2012数据集上的最终结果,我们在VOC2012训练数据集上微调CNN,并且在VOC2012训练验证数据集上优化SVM。当两个算法的结果不同时(带和不带边界框回归),我们仅仅向评估服务器提交一次测试结果。

表1展示了在VOC2010上最好的结果。我们比较了四个基准算法。包括SegDPM[18],该算法结合DPM检测器和语义分隔系统的输出【4】,而且利用额外的内部检测器上下文和图片分类器复制。最直接的比较是Uijlings的UVA系统【39】,因为我们的R-CNN也是用相同的候选区域算法。为了分类候选区域,他们的方法构建了一个四级的空间金字塔,并且组装了密集采样SIFT、扩展OpponentSIFT、RGB-SIFT描述子,最终每个向量量化成4000词的编码本,最后利用直方图交集核支持向量机进行分类。相对于他们的多特征、非线性核SVM方法,我们的mAP从35.1%提高到53.7%,而且更加快(见2.2节)。我们的算法在VOC2011-2012测试集上的mAP差不多都是53.3%。

表1 在VOC2010测试集上的平均检测精度。R-CNN分别与UVA、Regionlets能最直接比较,因为这三个方法都是用候选区域的选择搜索。边界框回归(BB)在C节介绍。在本文发表时,SegDPM在PASCAL VOC上高级榜首。DPM和SegDPM用其它方法没有用到的上下文复制。

2.5 在ILSVRC2013检测数据集上的结果

我们在200个类别的ILSVRC2013检测数据集上运行R-CNN算法,超参数和PASCAL VOC上的相同。向ILSVRC2013的评估服务器提交两次测试结果,一次是带有边界框回归,另一次是不带边界框回归。

图3比较了R-CNN和ILSVRC2013参赛的算法和OverFeat的结果【34】。R-CNN的mAP达到了31.4%,远远超出第二名OverFeat的24.3%,并且绘制箱形图展示所有类别的(平均精度)AP。表8给出了每一类别的AP。

利用卷积神经网络的最具竞争力的算法(OverFeat,NEC-MU,UvAEuvision,Toronto A,UIUC-IFP)表明,在进行目标检测时,CNN的一些细微的差别,导致了结果的很大不同。

图3:左图是在ILSVRC2013检测任务的测试数据集上的mAP。带*号的方法是训练集之外的(ILSVRC分类任务数据集的所有类别的图片和标签)。右图是每个算法的200个AP值的箱形图。赛后的OverFeat结果没有绘制,因为每个类别的AP已经不可用。红色的线是mAP,箱形图的下面和上面分别是25和75百分位数。连接最小值和最大值的是盒须线(whiskers)。盒须线上绿色点是AP。


 

3 特征可视化、模型比较、模型误差

3.1 特征可视化

网络第一层的滤波器可以直接可视化,并且很容易理解[25]。它能提取目标的边和色彩。理解后面的层更具挑战性。Zeiler和Fergus在[42]中提出视觉吸引力的反卷积网络。我们提出了一个简单、互补的非参数方法,能直接展示网络学到的内容。

基本想法是挑选一个特定的神经元(特征),并且将其看作一个目标检测器。也就是说,在大量的候选区域(约1000万个)上计算该神经元的激活函数,然后把这些候选区域按照激活值从高到低排序,接着用非极大抑制选择候选框,最后展示得分最高的候选区域。我们的方法让挑选的神经元“自己说出”哪些是它关注的焦点。为了观察不同的视觉模式,并深入了解神经元计算的不变性,所以不用平均化。

我们的可视化神经元来自于pool5层,它是网络第5层输出的最大池化。Pool5层的特征图大小是6*6*256 = 9216维。忽略边界的影响,pool5层的每个神经元的感受野是195*195个像素大小,其输入是227*227。Pool5层中心的神经元全局感受野,然而靠近边界的神经元有更小的、被裁剪掉的感受野。

图4中,每行表示pool5层的一个神经元最高的16个激活值,数据是VOC2007训练验证集。在256个功能独特的神经元中,只可视化了其中的6个(附录D包含更多的可视化)。选择这些神经元来展示网络从哪些地方学到什么内容。在第2行,我们看到神经元焦点集中在狗的脸上和点阵上。第3行中,神经元焦点在红色块上,这时神经元就是一个红色块检测器。也有人脸检测器和更抽象的检测器,例如第4行的文本和第5行带窗户的三角形结构。网络好像学会把少量的类别特征和分散的特征(例如形状、纹理、颜色、材质)组合起来。全连接的fc6层具有把大量的子特征构建成丰富特征的能力。

图4 pool5层的6个神经元的最高区域。白色框内是感受野和激活值。一些神经元与概念对齐,例如人(第1行)或文本(第4行)。其它神经元提取了纹理和材质,如点阵列(第2行)和镜面反射(第6行)。
 

3.2模型比较

没有微调时每层的性能

为了理解哪些层是检测的关键,我们分析了CNN最后3层在VOC2007数据集上的结果。已经在3.1节简要介绍了pool5层。下面是介绍最后两层。

fc6层是连接到pool5层的全连接层。为了计算特征,需要pool5层的9216维特征向量乘以一个4096*9216的权重矩阵,并且加上偏置向量。最后的结果是对应元素的RelU修正。

fc7层是网络的最后一层,需要fc6层的特征乘以4096*4096的权重矩阵,并且加上偏置向量,最后的向量是对应元素的RelU。

我们从PASCAL上不带微调的CNN的结果开始,这些CNN的所有参数仅仅在ILSVRC2012数据集上预训练过。逐层分析表明,fc7层的特征比fc6等的更差,见表2的1-3行。这就意味着,可以去掉29%的参数而不降低mAP,大约是1680万个参数。更令人兴奋的是,尽管用6%的参数计算pool5的特征,fc7和fc6层也能够得到非常好的结果。CNN的表示能力大部分来源于卷积层,而不是连接层的密集连接。这个发现表明,在计算密集层的特征图时,只用CNN的卷积层可以接收任意大小的图片。这种表示可以用在滑窗类型检测器上,例如DPM。

表2 在VOC2007数据集上的检测精度(%)。第1-3行是没有微调的R-CNN精度。第4-6行是在ILSVRC2012上预训练,然后在VOC2007训练验证集上微调(TF的精度。第7行包括简单的边界框回归(BB)用来减少错误(见C节)。第8-10行,是用DPM作为测试基准,第一个是只用HOG,其后两个是用不同的特征学习方法,例如增强或替换HOG。

有微调时每层的性能

下面看看我们的CNN在VOC2007训练验证集上微调参数之后的性能。从表2的第4-6行可以看出,通过微调,mAP增加了8个百分点,达到了54.2%,可见增加了很多。fc6和fc7增加的比pool5的多,这表明,从ImageNet学到的特征是通用的,而mAP提高的来源是从特定领域学到的非线性分类器。

与特征学习算法的比较

在PASCAL VOC上的特征学习方法相对较少。我们发现了两个建立在DPM上的方法,为了便于参考,我们也包括了标准的基于HOG的DPM结果[20]。

DPM ST[28]是第一个DPM特征学习方法,它用“草图标记”(Sketch token)概率直方图增强HOG特征。直觉上,草图标记是一个通过图像块中心的轮廓的紧密分布。在每一个像素上,用一个随机森林模型计算草图标记的概率,也就是训练一个该随机森林模型用来分类35*35像素的图像块是草图标记还是背景。

第二个方法是DPM HSC[31],该方法用稀疏编码的直方图(HSC)替换HOG。为了计算HSC,用词典来计算稀疏编码激活函数,该词典在每个像素上用100个7*7像素的灰度图。结果的激活值用三种方法修正:空间池化、单位l2正则化、指数变换

从表2的第8-10行还可看出,R-CNN所有变体的性能都好于这三个基准DPM和两个利用了特征学习的方法。相对于仅仅用了HOG特征的DPM的最后一版本,我们R-CNN方法的mAP提高了20个百分点,从33.7%提高奥54.2%,提高了61%。HOG与HSC组合方法比只用HOG方法的mAP提高了2.5个百分点。HSC比HOG提高了4个百分点,它们的mAP分别是29.1%、34.3%。

3.3 网络结构

本文的网络结构大部分来自于Krizhevsky[25]。然而,我们发现网络结构的选择对R-CNN的检测性能有很大影响。在表3中,我们展示了用Simonyan最近提出的16层深度网络在VOC2007测试集上的结果。该网络是ILSVRC2014分类挑战赛的冠军之一,它有相同的13个3*3卷积核的卷积层,还有5个最大池化层穿插于其中,最后是3个全连接层。我们把OxfordNet简称为O-网络,基准网络TorontoNet简称为T-net。

为了在R-CNN中用O-Net,需要在Caffe Model Zoo下载公开可用的预训练网络权重VGG_ILSVRC_16_layers,网址是https://github.com/BVLC/caffe/wiki/Model-Zoo。然后用与T-Net相同的配置来微调网络。唯一的不同是用更小的每批样本的数量,这里每批用24个样本只是为了GPU内存的限制。表3的结果表明,带有O-Net的R-CNN明显地好于带T-Net的R-CNN,mAP从58.5%增加到66.0%。然而需要考虑的缺点是,O-Net的计算时间是T-Net的7倍。

3.4 检测误差分析

本文用Hoiem[23]的非常优秀的检测分析工具来评估模型的误差,并且来理解微调如何改进,还与DPM的误差进行比较。本文不会介绍该工具,预知详情请参看【23】。图5和图6是检测误差分析结果。

图5 排序的假正类(FP)的分布。每个图展示表示FP类型分布的演变,按照FPs得分降序排序。每个FP被分配到4个类型之一,这四个类型是Loc-定位不良(与正确类别的IoU在0.1到0.5或副本);Sim-与相似类别的混淆;Oth-与不相似目标类别混淆;BG-FP集中在背景上。与DPM[23]相比,本文方法的误差主要来源于Loc-定位不良,而不是与背景或其他目标类别混淆。这表明,CNN提取的特征比HOG更具判别性。本文方法的宽松定位可能是由于从下到上的候选区域和在预训练分类器时从整张图片学到的位置不变性。

图6目标特征的敏感性。每个图是6个不同目标特征的最高和最低性能子集的正则化mAP[23],6个特征分别是:遮挡、截断、边界框区域、纵横比、视点、部分可见。该图展示的带微调和边界框回归的R-CNN、不带微调和边界框回归的R-CNN、DPM voc-release5版本。总体来看,微调没有减少敏感性(最大值与最小值之差),但是确实增加了几乎所有特征的最高和最低的性能子集。这表明,相对于宽高比和边界框面积,微调能够更多地增加最低性能子集。微调也改进了包括遮挡、截断、视点和部分可见性在内的所有特征的鲁棒性。

3.5 边界框回归

基于上面的检测eucalyptus分析,本文也用简单的方法来减少定位误差。受DPM[17]边界框回归的启发,本文训练了一个线性回归模型用来预测新检测窗口,该新检测窗口需要给定选择搜索候选区域的pool5层的特征。附录C给出了细节。结论在表1、表2、图5中,结果表明,固定大量的误定位的检测,可以提高mAP 3到4个百分点。

3.6 定性结果

在数据集ILSVRC2013上定性检测结果在图8、图9中展示。每个图是从val2中随机抽样。所有检测器的精度都大于0.5。注意,这些图片不是经过精心挑选的(curated),它们给实际使用中的检测器以真实的印象。图10、图11给出了更加定性的结果,但是这些是精心挑选的。我们选择每个图像是因为它包含有趣,令人惊讶或有趣的结果。这里,所有检测器比展示的mAP高0.5。

4 ILSVRC2013检测数据集

在第二节中,展示了在ILSVRC2013检测数据集上的结果。这个数据集比PASCAL VOC相同类别的图片少,需要选择怎样使用该数据集。这个问题很复杂,本节就来介绍。

4.1 ILSVRC2013数据集概述

ILSVRC2013检测数据集被分割成3个子集:训练集(395918)、验证集(20121)、测试集(40152)。圆括号中的数字表示图片数量。验证集和测试集与PASCAL VOC有相同的图片分布,它们的场景看起来很相近,并且复杂程度也很相似,例如目标数量、混乱程度、姿态变化程度等。验证集和测试集有详尽的标注,200个类别中所有图片都标注有边界框。相反地,训练集来源于ILSVRC2013的分类任务的图片。这些图片更加复杂,并且在图片的中心有一个目标物体。不像验证集和测试集,由于训练集太大,所以没有全部标注,有些图片有标注,而有些图片没有标注。除了这三种类型的数据集之外,每个类别还有负样本图片。负样本图片手动检查,来验证不包含对与其应类别的目标。在本文中,没有用到负样本图片。关于负样本图片详情,请参考[11,36]。

检测数据集的这种分割为训练R-CNN带来了跟多的选择。训练集不能用来挖掘负样本,因为其标注不完全。那么负样本从哪里来呢?并且,训练集也比验证集和测试集更加难以统计。是否应该完全使用训练图像,如果可以,使用程度如何?尽管我们没有详尽评估大量选择,但根据以往的经验,我们提出了最明显的选择。

我们基本策略是严重依赖验证集,并且把部分训练集作为辅助正样本。为了在训练和验证过程中利用验证集,我们把验证集等分为“val1”和“val2”两个子集。因为在验证集中,有些类别的图片很少,最少的只有31个图片,所以在分割时保持类别均衡很重要。为了达到这一要求,可以生成大量的候选分隔,从中选择最大相对不均衡数最小的那个分隔。相对不均衡数的计算公式是|a-b|/(a+b),其中a、b分别是分隔后的每分子集的图片数量。对验证集图片聚类生成每一个候选分隔,聚类的特征是类别数量,然后进行随机局部搜索以改善分割平衡。一个特殊的分隔是最大相对非均衡数大约是11%,中值相对非均衡数是4%.。val1/va2分隔和及其代码将会公开,以便用于其它研究。

4.2 候选区域

我们用与在PASCAL数据集上检测任务相同的候选区域方法。在val1、val2、测试集上而不是在训练集上运行选择搜索【39】的快速模式。因为选择搜索不是尺度不变性的,而且生成的候选区域依赖于图片的分辨率,所以需要很小的改动。ILSVRC的图片大小不一,从很小到几百万像素,因此在选择搜索前要把图片都缩放到500像素固定的宽度。在验证集上,选择搜索平均在每个图片上生成2403和候选区域,并且当IoU阈值是0.5时,对于所有的前景边界框,召回率是91.6%。这个召回率明显比在PASCAL数据集上的98%要低。这表明在候选区域阶段,有很大的提升空间。

4.3 训练集

来源于val1数据集中的背景边界框;从训练集的每个类别中的N个边界框(如果一个类别中训练集的背景边界框数量少于N,则取全部的背景边界框)。把这样的数据集和边界框称为val1+trainN。在后面的4.5节简化模型中,我们将在val2数据集上分别计算N取0、500、1000时的mAP。

在R-CNN中,训练数据需要进行三个处理步骤:(1)CNN微调;(2)训练SVM检测器;(3)边界框回归训练。CNN微调时,在val1+trainN数据集上进行了5万步迭代,其他设置与在PACSAL数据集上相同。在单个NVIDIA Tesla K20上用Caffe微调用了13小时。对于SVM训练,把val1+trainN的所有背景边界框作为对应类别的正样本。随机从val1中选择5000个图片来挖掘难分负样本。实验表明,用5000个图片子集来挖掘负样本,比用val1的所有图片,mAP仅仅下降了0.5个百分点,而训练SVM的时间减少了一半。没有从训练集中抽出负样本,是因为标注不详尽。没有用额外的负样本图片。边界框回归是在val1上进行训练的。

4.4 验证和评估

在把结果提交给评估服务器之前,我们在val2数据集上验证了微调和边界框回归的有效性。所有的超参数(例如SVM的惩罚因子C、卷积时边界填充、NMS阈值、边界框回归超参数)都固定不变,与在PASCAL数据集上的值相同。毫无疑问地,这些超参数的选择对于ILSVRC数据集来说是次最优的。然而,本项工作的目标是在ILSVRC上生成一个初级的R-CNN结果,而不是在一般的数据集上微调。在val2上选择最佳超参数之后,我们向ILSVRC2013评估服务器提交了两个结果文件。第一个结果文件是没有边界框回归,第二个结果文件带有边界框回归。对于这两个提交的文件,分别用val+train1k、val来扩展SVM、边界框回归的训练集。在val1+train1k上用CNN为了避免重复微调和特征重复计算。

4.5 简化模型

表4展示了在不同数量的训练集上微调、边界框回归的效果。从该表中可以看出,val2上的mAP与测试集上的很接近。这说明在val2上的mAP是测试集性能的一个很好的指标。第一个结论是:用CNN在ILSVRC2012分类数据集上预训练,没有微调时R-CNN的mAP达到20.9%,这非常接近在小训练集val1(在val1中有一半的类别样本数量在15到55)。把训练集扩展到val1+trainN时,性能提升到24.1%,并且在N=500和N=1000时,本质上是相同的。仅仅用val1来进行微调CNN,mAP稍微提高到26.5%,然后这可能由于正训练样本太少导致过拟合了。把微调数据集扩展到val1+train1k,这就给训练集的每个类别增加了1000个正样本,使得mAP显著增加到29.7%。边界框回归使得mAP增加到31.0%,这比在PASCAL上增加的少。

4.6 R-CNN与OverFeat的关系

R-CNN与OverFeat之间的关系很有意思:OverFeat可以看成是R-CNN的一种特例。如果用多尺度金字塔替换选择搜索候选区域,并且把每类的边界框回归变成单个边界框回归,那么这两个系统就非常相似了(一些潜在的不同是在训练阶段,CNN检测微调、SVM等)。

值得注意的是OverFeat在训练速度上很大优势,比R-CNN快9倍,并且每个图片上是2秒[34]。OverFeat的快速是因为它采用滑窗方法,不是在图片级别的变换,因此可以在重叠的窗口上可以重用而不必重复计算。通过运行整个网络,可以在任意大小的输入上以卷积形式实现共享计算结果。可以从多个角度来加速R-CNN,也是未来的工作方向。

5 语义分隔

的图像分隔挑战赛任务上。为了便于和当前领先的语义分隔算法(二阶池化,O2P)[4]进行直接比较,我们在这个开源系统中运行。O2P用CPMC算法首先为每个图片生成150个候选区域,然后用支持向量机回归预测每个类别的每个候选区域的质量。O2P算法的高效性是由于CPMC候选区域的质量和多特征类型的二阶池化(SIFT和NBP的增强)。我们也注意到了最近Farabet【16】在多个稠密场景标记数据集上(不包括PASCAL)用CNN作为多尺度逐像素分类器的方法。

我们沿着【2,4】并且把PSACAL图像分隔训练集扩展到包括额外标记的数据集上【22】。通过在VOC2011验证集上进行交叉验证来选择超参数。最终测试结果只评估一次。

用来进行图像分隔的CNN特征。我们评估计算CPMC区域特征的三种策略,计算CPMC区域特征都从包围227*227大小的矩形窗口开始。第一种策略(full)忽略区域的形状,并且直接从包围矩形窗口计算CNN特征,与检测时完全一样。但是这种特征忽略了非矩形区域。两个区域可能有非常相似的边界框而很少重叠。因此,第二种策略(fg)仅仅在区域的前景掩码上计算CNN特征。我们用输入图片的均值替换背景,因此背景区域在减去均值后的均值是零。第三种策略(full+fg)是把第一种策略(full)和第二种策略(fg)进行简单的拼接,我们验证的它们的互补性。

在VOC2011数据集上的结果。表5显示了我们在VOC2011验证集上计算O2P的结果。

(附录E计算了每个类别的O2P)。

在每一种计算策略中,第6层fc6总是优于fc7,下面的讨论都是指fc6从特征。fg策略的略优于full,这表明掩码区域的形状提供了强烈的信号,与我们的直觉相符。然而,full+fg的平均精度达到了47.9%,比我们最好的结果高4.2%(也优于O2P),这表明full特征提供的上下文比fg特征提供的更加丰富。注意,用full+fg策略的特征在单个核上训练20个SVR需要一个小时,然而在O2P上训练需要10多个小时。

6 结论

近年来,目标检测技术的性能停滞不前。最好的检测系统组合多个底层的图像特征和高层的上下文环境。本文提出了简单且可伸缩的目标检测算法,在PASCAL VOC2012数据加上,比之前最好的算法有了30%的性能提升。

本文通过两种方式提升性能。第一是应用卷积神经网络从下到上的计算候选区域,以便来定位和语义分隔。第二是当训练集很少时,用来训练大的CNN的方法。用大量的数据(图片分类)作为辅助任务来有监督的预训练网络,然后在少量数据上对特定任务进行微调网络(检测),我们的实践证明这种方式是很高效的。我们猜测有监督的预训练、特定领域的微调这种方式对数据稀少时的视觉任务很有效。

需要注意的是:我们取得这样的成果是用组合了计算机视觉经典的工具和深度学习(候选区域和卷积神经网络),这两种方法不是对立的,而是很自然的结合。



作者:空林玄一
链接:https://zhuanlan.zhihu.com/p/89714009
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

编写此篇博客只是为了自己阅读学习使用,如有侵权请联系删除!!

猜你喜欢

转载自blog.csdn.net/qq_41251963/article/details/108704093