卷积神经网络——目标检测之RCNN论文翻译

论文连接
https://arxiv.org/abs/1311.2524

0.摘要

目标检测的性能最近几年性能一直停滞不前。之前性能最好的方法是一个将低级别(low-level)的图像特征与高级别(hight-level)的上下文信息结合在一起的一个复杂系统。作者提出的方式简单、可扩展,mAP提高了30%,达到了53.3%。
该方法结合了两个关键的思想:
1. 在候选区域上执行大容量的神经网络(CNN),以便对对象进行定位和分割;
2. 当标记的训练数据比较少的时候,先对辅助任务进行有监督的预训练,然后对特定区域进行微调(fine-tune),可以使性能得到明显的提升。

我们将候选区域与CNN结合在一起,称该方法为R-CNN(Regions with CNN features)。
还与一种基于CNN的滑动窗口的检测器OverFeat进行了比较,性能表现远远超过OverFeat。

1. 介绍

特征很重要。过去十年视觉识别任务基本上都是基于SIFT和HOG,但是在2010到2012期间已经发展到了瓶颈,仅通过建立集成系统和稍微修改已有的成功方式获得了有限的进步。

SIFT和HOG是块方向的直方图,可以与灵长类的视觉神经的第一个皮质区域粗略的联系起来。但是都知道视觉识别发生在后面的几步流程中,这也说明视觉是一个分级的多个阶段的计算来给视觉的发生提供信息更丰富的特征。(个人理解:SIFT和HOG的方式只是实现视觉的第一步,找到了目标物体差不多对应到proposal,但是缺乏后面的计算过程,没有为识别提供更加丰富的信息。

新感知机是受生物学启发的,具有层次性和平移不变性的模式识别模型,是对这中多阶段处理方式的早期尝试。但是缺乏监督训练算法。在Rumelhart的基础上,LeCen等人发现基于反向传播的梯度下降算法对于训练卷积神经网络(CNNs)非常有效,是在新感知机(neocognitron)基础上发展起来的。

CNNs在90年代得到广泛的应用,但是随着支持向量机的兴起而没落了。在2012年Krizhevsky等人通过在ILSVRC上更高的图像分类精度,重新点燃了对CNNs的兴趣。他们通过对LeCun的CNN网络做了一些修改(例如:通过max(0, x)矫正非线性和dropout正则化),并在120万张标记图片上进行网络的训练。

2012年的ILSVRC研讨会上对这个结果的意义进行了激烈的争论,核心的问题是:图片分类的结果多大的程度上能够体现出目标检测的结果。

我们通过将图像分类和目标检测建立联系来回答这个问题。本文首次表明,CNN网络比基于简单HOG特征的系统有更高的目标检测的性能。为了达成目标,我们聚焦在两个问题上:用深度网络来定位目标和使用小批量带标记的检测数据来训练模型。

与图像分类不同,目标检测需要对图像中的目标进行定位(目标可能有多个)。一种方法是将框的定位看作是一个回归问题。另一种可选方法是使用滑动窗口来探测物体。这种方式CNNs至少已经使用了20年,但是仅仅用在有限的类别上,例如:人脸和行人。为了有更高的空间分辨率,这些CNNs都采用了两层卷积层和两个池化层。我们也考虑过使用滑动窗口的方法。但是我们的网络有5个卷基层,有非常大的感受野(195x195像素)和步长(32x32),这对使用滑动窗口来精确定位目标充满挑战。

相反,我们使用“区域识别”的模式来解决CNN的目标定位问题,这个已经在目标识别和语义分割中成功应用。每个图片生成2000个左右与类别无关的候选区域(region proposal),然后使用CNN为每个候选区域提取固定长度的特征向量,最后使用特定种类的线性分类器SVMs对每个候选区域进行分类。我们使用仿射变换图片的方式使每个候选区域满足CNN对输入大小的要求。因为我们结合了候选区域(region proposal)和CNNs,所以称该方法为R-CNN:Region with CNN features。
卷积神经网络——目标检测之RCNN论文翻译_第1张图片图中是该目标检测系统的概况:
1.输入图片
2.提取2000左右的候选框
3.使用卷积神经网络CNN为每个候选区域计算特征
4.使用SVM对每个区域进行分类

我们与目前为止性能最好的OverFeat(使用滑动窗口+CNN)进行了比较,我们的性能明显的超过了它,mAP:31.4% vs 24.3% 。

**目标检测面对的第二个挑战是:标记数据缺乏,当前可以获得的数据不足以训练一个大型的CNN网络。通常的方法是先进行无监督的预训练,然后进行有监督的对网络进行微调。本文的第二个重要贡献是:先在一个辅助的大数据集上进行有监督的预训练,然后在小数据集上面针对特定的问题进行微调,这对缺乏数据来训练大容量的CNN网络是非常有效的。**经过试验发现精度提升了8%。经过调优,我们的系统在VOC 2010上达到了54%的mAP,于此对应的基于HOG 进行高度优化的deformable part model(DPM)的精度为33%。CNN可以作为黑匣子的特征提取器使用,不用作任何的修改。

DPM是一个非常成功的目标检测算法,已成为众多分类器、分割、人体姿态和行为分类的重要部分。DPM可以看做是HOG(Histograms of Oriented Gradients)的扩展,大体思路与HOG一致。先计算梯度方向直方图,然后用SVM(Surpport Vector Machine )训练得到物体的梯度模型(Model)。有了这样的模板就可以直接用来分类了,简单理解就是模型和目标匹配。DPM只是在模型上做了很多改进工作。

我们的系统同时也很高效,计算的类型只是一些大小合理的矩阵向量计算和贪婪非极大值抑制(NMS)。这种计算特性源自所有类别的特征共享,同时还比之前的区域特征低了两个数量级。

分析我们失败的模式对于网络精度的提升也是非常关键的。通过使用检测分析工具我们发现:一个简单的边框回归可以有效降低定位错误的问题。该问题是我们遇到的主要问题。

由于RCNN是针对候选区域进行操作,因此可以很容易的扩展到语义分割的任务上。

2. 目标检测之RCNN实现

RCNN由三个部分组成:1、第一生成类别无关的候选区域,这些区域是检测器输入的集合;2、第二个部分是一个大的卷积神经网络,用来为每个候选区域提取固定大小的特征;3、第三部分是一些指定类别的线性分类器SVM的集合。

2.1 模块设计

候选区域生成。 最近的好多论文提供了多种类别无关的区域生成的方法。由于RCNN对生成区域的方法不敏感,为了方便和以前的检测方法作比较,选择了selective search

特征提取。 我们使用Caffe实现的CNN为每个候选区域提取一个4096维的特征向量。通过五层的卷积层和两层全链接层的前向传播计算,为大小为227*227的图片提取特征。 建议读者了解更多的网络结构的细节。

**为了计算区域特征值,我们必须把该区域范围内的数据转换为符合CNN输入的格式(227*227像素的固定大小)。**我们在众多的可以转换任意shape区域的方法中选择了最简单的。不管候选区域的大小和长宽比是多少,我们都把候选区域变成所需大小。在变换之前我们在框周围扩展p个像素(p=16),然后进行大小的变换。

2.2 检测的测试阶段

在测试阶段我们使用selective search在图片中提取2000左右的预选框(使用selective search的fast模式)。然后变换大小传入CNN进行前向处理,获取特征值。然后为每一个类别使用为该类训练的SVM分类器为每个特征向量打分。给出一个图片中所有区域的得分,然后使用贪婪的非极大值抑制(为每个类别单独调用),然后去掉一些与高分被选区域IoU大于阈值的候选框。

运行时分析。 ** 两个特点使我们的检测非常高效。第一,所有的CNN参数不区分类别,是跨类别共享的;第二,与其他的检测方式相比,CNN中特征向量的计算都是低维度的,例如,视觉文字的空间金字塔编码。在UVA检测系统中使用的特征向量比我们大两个数量级(360K VS 4K)。**

**这种共享的好处是,计算候选区域和特征值的时间(13s/img on GPU, 53s/img on CPU)分摊在所有的类别上。**仅在特征向量和SVM权重的点积和NMS中是类别相关的计算。在实际运算中,一个图片的所有点乘可以作为矩阵和矩阵的乘积批量执行。特征向量的矩阵一般是2000x4096,SVM权重矩阵是4096xN,N是类别的数量。

分析显示,R-CNN可以扩展到数千类别物体的检测,而不需要借助与其他技术(例如hashing)。即使有10万个类别,现代cpu计算矩阵乘法也只需要10秒。我们使用候选区域和共享特征值不仅仅是因为效率。UVA系统中,由于高维度的特征值,存储10万个线性预测器需要使用134G的内存,而R-CNN使用更低维的特征,只需要使用1.5G的内存,比UVA少了两个数量级。

将R-CNN与Dean等人关于使用DPMS和hashing实现可伸缩检测进行比较也很有意思。当使用10K个分类器,每五分钟处理一张图片,在VOC 2007上mAP可以达到16%。我们的方法10k个检测器CPU上运行大约一分钟,因为没有任何的近似值,所以mAP仍保持在59%。

2.3训练

有监督的预训练。 在一个大型辅助数据集(ILSVRC2012 分类数据集)上面有差别的对CNN网络进行预训练,只使用图片级别的标注信息(没有边框信息)。预训练使用的使开源的Caffe CNN的实现。总体来说我们的CNN性能接近Krizhesky等人的网络性能,在ILSVRC2012分类的验证集上的top-1错误率比他们高了2.2%。这种差异主要是由于处理过程简化导致的。

特定领域的微调。 为了使我们的CNN网络适应新的任务(检测)和新的领域(变化后的预选窗),我们仅用变化后的候选框作为输入继续使用SGD来训练CNN的参数。除了使用一个随即初始化的(N+1)-way的分类层来替代CNN针对ImageNet的1000-way的分类层(N是类别的数量,1是背景),整个CNN的框架没有变化。对于VOC,N=20,对于ILSVRC2013,N=200。我们将预选框与标注数据的框IoU大于等于0.5的标记为该类别的正样本,其他的标记为负样本。我们将SGD的初始学习率设置为0.001(预训练的1/10),这样既可以起到微调的作用,也不会破坏与训练的结果。SGD的每一个迭代中,使用32个正样本(包括所有类别的)和96个背景框(负样本)组成一个大小为128的小批量数据。我们倾向于将预选框判定为正样本,因为正样本的数量相对负样本非常少。

目标类别分类器。 假如训练一个二元分类器来检测汽车。一个边框紧紧围绕一个汽车的区域应该是一个正样本。类似的,也可以确定与汽车没有任何关系的属于背景,应该属于负样本。与汽车只是部分重叠是不明确的,该标记为正样本还是负样本。我们通过IoU超过一个阈值来解决该问题,小于该阈值的定为负样本。这个阈值定为0.3,是在验证集上通过网格搜索选择出来的。我们发现谨慎的选择该阈值是非常重要的。设置为0.5,mAP会降低5个百分点。类似的设置为0,mAP降低4个百分点。只是简单的将每个类别的ground-truth设置为正样本。
一旦特征被提取出来,再加上训练的标签,就可以为每个类别优化一个线性的SVM分类器了。由于训练数据太大不能够全部放到内存中,我们使用了标准困难负样本挖掘方法。困难负样本挖掘收敛迅速,在实践中,只要对所有图片进行一轮训练mAP就停止增长了。

对于目标bai检测中我们会事先标记处ground truth,然du后再算法中zhi会生成一系列proposal,这些proposal有跟标记dao的ground truth重合的也有没重合的,那么重合度(IOU)超过一定阈值(通常0.5)的则认定为是正样本,以下的则是负样本。然后扔进网络中训练。However,这也许会出现一个问题那就是正样本的数量远远小于负样本,这样训练出来的分类器的效果总是有限的,会出现许多false positive,把其中得分较高的这些false positive当做所谓的Hard negative,既然mining出了这些Hard negative,就把这些扔进网络再训练一次,从而加强分类器判别假阳性的能力。

在附录B中我们将讨论为什么在微调和SVM训练中正负样本的定义不同。我们也会讨论为什么会训练SVM而不是直接使用微调过的CNN网络的softmax的输出。

2.4 PASCAL VOC 2010-12上的执行结果

根据PASVAL VOC上的最佳实践,我们在VOC 2007数据集上验证了所有的设计和超参。我们在VOC 2012训练集上对CNN进行微调,在VOC 2012训练和验证集上优化SVM,最终获得在VOC 2010-2012数据集上的结果。两个算法变体(包含和不包含边框回归)分别向评估服务器提交了一次测试结果。
表1展示了在VOC 2010上的所有结果。与其他几个方法的比较就不再详细的翻译了。
卷积神经网络——目标检测之RCNN论文翻译_第2张图片

2.5 在ILSVRC2013上的检测结果

我们使用与PASCAL VOC上相同的超参,在200分类的ILSVRC2013检测数据集上运行R-CNN。提交到评估系统的策略也相同,带边框回归和不带边框回归分别提交一次。
图3中是R-CNN与其他方式的比较,不再详细叙述。
卷积神经网络——目标检测之RCNN论文翻译_第3张图片

3.可视化、消融和错误模式

3.1 可视化学习的特征

第一层的过滤器是可以直接看到的(它的输入和输出),并且容易理解。他们用来捕捉定向边和色差。要理解剩下的层有些困难。在[42]的文章中Zeiler和Fergus展示了一种非常吸引人的可视化反卷积的方法。我们提出了一种简单的(也是互补的)非参数化的方式,来展示网络到底学到了什么。
该方法首先从网络中选出一个特定的单元(特征),然后把它当作目标检测器来使用。也就是说我们要在这一系列的候选框(差不多1000万)上使用该单元来分别计算激活率,然后根据激活率从高到低对候选框进行排序,执行NMS(非最大值抑制),然后展示出得分最高的区域。我们的方法通过精确显示它作用于哪些输入,让选中的单元“自己说话”。我们避免平均,以看到不同的视觉模式,并深入了解计算单元的计算不变性。

(个人理解:这里选择的一个unit是对应到一种类别的,这种类别可能是具有某种特征的,比如图四中的狗头和点阵具有类似的特征,在所有的预选框上计算feature,如果输入通过计算得到的feature与该unit越相近计算出的activations就越高,这样可以识别出一种类别。)

我们将pool5层的单元可视化,该层是对第五个卷基层也是最后一个卷基层做最大池化。pool5层特征图的维度是6x6x256 = 9216。忽略边界的影响,pool5层中的每个单元在原始227x227像素的输入中都有一个195x195像素的感受野。pool5中间的单元拥有差不多全局感受野,而靠近边界的拥有小一些的并裁剪过的感受野。
图4中的每一行都显示了一个pool5中一个unit计算出的得分最高的16个激活值,这些unit是我们在VOC 2007的test val数据集上进行优化后的CNN网络中选出来的。我们从256个具有特有功能的unit中选择了6个进行了可视化(附录D中有更多)。选择这些unit为典型样例来展示网络学习到了什么。在第二行我们可以看到一个用来识别狗头和点阵。第三行对应的unit用来识别红色斑点。当然还有人脸和其他一些抽象模式的检测器,像文本和带窗子的三角结构。网络似乎学习了一种表示形式,这种表示形式将少量根据类别优化的特征与物体的形状、纹理、颜色和材料属性的分布式表示结合在一起。(个人理解:网络用一个feature表示了物体多种特征)。后面连接的全链接层fc6对这些丰富的特征进行大量的组合,然后进行建模。(个人理解:将各种特征组合起来,比如狗头、狗腿和狗身体结合起来进行建模,就可以识别出一个完整的狗。pool层是一些局部特征或者叫部件,全链接层将部件组合成完整的物体)。

3.2 消融研究

没有调优的各层性能。 为了知道哪些层对检测性能是至关重要的,我们分析了CNN的最后三层在VOC 2007数据集上的结果。pool5层已经在3.1章节作了简要的介绍。最后两层总结如下。
fc6是对pool5的结果作全链接。通过在pool5的特征图(将特征图reshape成一个9126维的向量,一般是flatten)上乘一个4096x9126的权重矩阵,然后在加一个偏置向量来计算fc6的特征。计算出来的特征向量只是一个中间值,还需要逐元素的使用ReLU(半波整流)进行整流。
fc7是网络的最后一层。它在fc6输出的基础上乘以一个4096x4096的权重矩阵,与fc6类似,再加一个偏置向量然后调用半波整形。
我们先看一下在PASCAL上没有微调的CNN结果,即所有的参数只在ILSVRC 2012上面进行预训练。一层一层的分析性能(Table 2的1-3行)发现fc7层的泛化性能比fc6的泛化性能还差。这就意味着在不降低mAP的情况下可以删除CNN中29%的参数,差不多由1680万个。更令人吃惊的是移除fc6和fc7以后仍然能够得到比较好的结果,即使pool5只使用了CNN中6%的参数来计算。**CNN的表现力很大程度上来自于它的卷积层,而不是更大更密集的全连接层。**这一发现表明了仅使用CNN的卷积层来计算任意大小的图片的密集特征图(类似HOG的)的潜在实用性。这种表示方式使在pool5的特征基础上使用包括DPM在内的滑动窗口检测器的试验成为可能。
调优后各层的性能。 现在我们看一下在VOC 2007训练集和验证集上进行调优后层的CNN网络的结果。我们获得了令人吃惊的进步(Table2中的4-6行):mAP提升了8%达到了54.2%。微调对fc6和fc7的提升比pool5更大更明显,这表明pool5从ImageNet学到的特征是通用的,大部分的提升是pool5的基础上通过学习特定区域的非线性分类器实现的。
与近期特征学习方法的比较。 在PASCAL VOC上尝试的特征学习方式相对较少。我们看一下以DPM(deformable part model:可变形的组件模型)为基础的两种实现方式。作为参考,我们还包括了基于标准HOG的DPM的结果。
第一个DMP的特征学习方法是DMP ST,使用"草图标记"概率直方图来增强HOG特征。直观的说,草图标记是穿过图像中心紧密分布的一些轮廓。需要使用随机森林来为每个像素都计算草图标记概率,该随机森林可以识别35x35像素的区域,类别可能是150个草图标记的一种或者是背景。
第二种DMP的学习方式是DMP HSC,使用稀疏码直方图来替代HOG。为了计算HSC,使用了由100个以7x7像素(灰度)为单位的学习字典,在每个像素处计算稀疏代码激活值。激活值通过三种方式校正(全整流和两个半整流),空间池化、l2归一化、然后进行幂运算。
R-CNN的所有变种算法的性能都高于三种DPM的基本算法(表2,8-10行),包括使用了特征学习的两种。最新版本的DPM只用了HOG特征,与之相比我们的mAP提升了20%:54.2% vs 33.7%,相比增加了61%。HOG与草图标记结合比值用HOG mAP提升了2.5(与内部私有的DMP基线相比,两者都是用了性能不如开源版本的DMP的未公开实现方式)。
卷积神经网络——目标检测之RCNN论文翻译_第4张图片

3.3网络结构

本文中大部分的结果使用的Krizhevsky等人的网络结构。但是,我们发现选择不同的网络结构对检测性能的影响很大。在表3中展示了最近Simonyan and Zisserman提出的16层的深度网络在VOC 2007上的测试结果。这个网络在最近的ILSVRC 2014分类挑战赛上表现最好之一。该网络是由13个结构相同的层组成,每一层都是3x3的卷积核,还有5个最大池化层出穿插其中,顶部是3个全连接层。因为该网络是OxfrodNet,因此我们称之为"O-Net",基线网络三TorontoNet,成为"T-Net"。
为了在R-CNN中使用O-Net,我们从Caffe Model Zoo下载了已发布的VGG ILSVRC 16 layers的预训练网络权重。然后使用了与T-Net相同的微调策略。唯一不同的是使用了更小的minibatch(例如24),以满足GPU的内存大小。表3中展示了使用O-Net的R-CNN的性能大大的超过了使用T-Net的R-CNN,mAP从58.5%提升到了66.0%。O-Net的一个很大的缺点是计算时间,O-Net的前向传播时间大约是T-Net的7倍。
卷积神经网络——目标检测之RCNN论文翻译_第5张图片

3.4检测错误分析

我们使用了Hoiem的非常优秀的检测分析工具,来展示我们方法的错误类别,理解微调是怎么改变他们的,以及我们与DPM的错误类别的比较。完整的介绍该分析工具已经超出了本文的范围,我们鼓励读之参考[23]来了解更多细节(例如,“normalized AP”)。由于分析在上下文关联起来才好理解,我们在图5和图6中进行讨论。
卷积神经网络——目标检测之RCNN论文翻译_第6张图片卷积神经网络——目标检测之RCNN论文翻译_第7张图片

3.5检测框回归

在错误分析的基础上,我们实现了一个简单的方法来减小定为误差。受DPM中检测框回归的启发,我们训练一个线性回归模型使用一个候选区域在pool5中的特征来预测一个新的检测窗口。所有的详细信息在附录C中。在表 1、表2、图5中的结果显示出这个简单的方式修正了大量定为错误的检测结果,mAP提升了3到4个点。

3.6 最终结果

在 ILSVRC 2013上的最终检测结果见图8和图9,在本文的最后。从VAL2集合中随机抽取每个图像,并显示所有检测器的所有检测结果中精度大于0.5的。请注意,这些都不是精心策划的,给人的印象是真实的探测器在行动。图10和图11显示了更多的结果,但这些结果都已经过策划。我们选择每个图片是因为它包含了有趣、令人惊讶或有趣的结果。这里,也显示了所有精度大于0.5的检测结果。

4 ILSVRC2013检测数据集

在第二章节我们展示了在ILSVRC2013数据集上的检测结果。该数据集比PASCAL VOC的种类多很多,需要决定如何使用它。这些决定是非常重要的,我们将在本章节中介绍。

4.1 数据集介绍

ILSVRC2013检测数据集分为三个部分:train(395918)、val(20121)、test(40152),括号内是图片数量。val和test是按照相同的图片分布来提取的(数据集中不同类别的数量)。这些图片与PASCAL VOC中的图片场景相似,复杂度也接近(目标的数量、种类和姿势)。val和test集都有详尽的标注,一张图片中来自200个类别的每个对象都标记了边框。相反,train数据集是根据ILSVRC2013分类图片的分布来提取的。相对于只在图像中心有一个对象的图像,它的复杂性更加多变。与val和test不同,训练图片由于数量太多,没有详尽的标注信息。任何一张训练图片中,不管是200个类别的哪一种都有可能没有标注。除了这些图片集,每个类别还有额外的负样本图像。每个类别的负样本图片都通过人工检查确认不包含该类别的对象。负样本图片在R-CNN中没有使用。可以了解更多的ILSVRC是怎么收集和注释信息的。
这些分组的特性为训练R-CNN提供了许多的选项。训练集(train)不能用来挖掘困难负样本,因为它的注释并不详尽。那负样本怎么获取呢?此外,train数据集与val和test的统计特性不同(个人理解:应该是指不同类别的图片数量,每张图片的对象数量等等)。因此是否应该使用train数据集,多大程度上应用train数据集,是个问题。虽然我们还没有对大批量的处理方式进行彻底评估,但是根据以往的经验,我们提出了一个似乎最合理的选择。

hard negative mining,困难样本挖掘,简单的说就是有些样本应该不是人,但是识别成了人,这种样本很容易出错,当然对训练价值也大,可以将这些样本添加到训练集中作为负样本来训练模型

我们的总体策略是以val为主,以train中的一些图片对正样本进行补充。使用val进行训练和验证,我们将val分成了val1和val2大小相等的两部分。由于val中有些类别的图片数量非常少(最少的31张,有一半类别少于110张),因此要保证分开的两部分的类别数量应该大概相同。有很多的分割方法,我们选择了类别最平衡的一种。每个分割方法都是以这样的方式生成的,首先按照类别将图片聚集在一起,图片的数量作为一个属性或着分割的参数,然后随机的局部搜索可以提高分割的平衡(个人理解:随机的从不同类别中选取图片,同时要考虑到图片的数量)。这里使用的方法最大数相对平衡为11%,中位数相对平衡为4%。分割方法是公开的,其他研究人员可以用来与自己的方法进行比较。

Relative imbalance is measured as |a − b|/(a + b) where a and b are class counts in each half of the split. a和b分别是两部分中类别的数量,通过公式 |a − b|/(a + b) 计算相对平衡。

候选区域

我们使用了与PASCAL相同的候选区域的生成方法。使用了选择性搜索(selective search)方法的快速模式"fast mode",对val1、val2、test数据集中的每张图片进行处理(但不处理train中图片)。我们需要做一个小的修改来处理这样一个问题:选择性搜索不是尺度固定的,因此产生候选区域的数量取决于图像的分辨率。ILSVRV数据集中的图片大小包含很小到几百万像素的范围,因此在作选择性搜索之前我们先把所有图片的大小调整成固定大小(500像素)。在val数据集选择性搜索方法平均为每个图片生成2403个候选区域,所有真实边界框的召回率(recall)为91.6%(IoU的阈值为0.5),召回率明显比PASCAL(约98%)低。这说明在生成候选区域阶段还有很大的改进空间。

4.3 训练数据

对于训练数据,我们创建了一组图片和框,框来自于val1中的所有的候选框和真实框与train中每个类别取N个真实框(如果该类别的数量小于N,则全部取出来)。我们称该数据集为val1+trainN。在消融研究中,我们给出了在val2上N∈{0,500,1000}的mAP,(4.5章节)。
在R-CNN中有三个阶段需要训练数据:(1) CNN 微调;(2) 检测器SVM训练;(3)边界回归训练。 使用与PASCAL上相同的配置,在val1+trainN数据集上对CNN进行了50000个迭代的微调。使用一个NVIDIA Tesla K20对caffe实现的CNN微调,运行了13个小时。在SVM的训练中,所有取自val1+trainN的真实框都作为各自类别的正样本。困难负样本挖掘将在从val1中随机选择的子集(5000张图片)上执行。一个初步的实验表明从val1全集中挖掘负样本与5000张图片子集(差不多一半)相比,mAP只下降了0.5,但SVM的训练时间缩短了一半。没有从train中取负样本是因为train中的标记不够详尽。额外的一组负样本并没有使用。边界回归同样是在val1上进行。

4.4 验证和推理

在将结果提交到评估服务器之前,我们使用上面描述的训练数据来验证数据使用的方式和在val2数据集上微调对边框回归的影响。所有的超参(例如SVM C的超参,变换区域大小时使用的填充方式、NMS的阈值、边框回归的超参等)都和PASCAL上保持一致。毫无疑问有些超参的选择对于ILSVRC并不是最优的,但是这项工作的目的是在没有大量数据微调的前提下来产生一个R-CNN的初步结果。我们选择了在val2上最佳的参数配置后,向ILSVRC2013评估服务器提交了两个结果。一个结果带有边框回归另一个不带。为了提交更好的结果,我们扩展了SVM和边框回归的训练集,分别是val+train1K和val。我们使用在val+train1k的数据集上微调过的CNN,这样可以避免重复的微调和特征计算。

4.5消融研究

表4中展示了不同数量的训练数据、微调、边框回归的消融研究数据。得到的第一个观察结果就是val2上的mAP与test数据集上的mAP非常接近。这能够说明val2的mAP是test数据集性能的一个很好的指标。第一个结果(20.9%)是R-CNN使用在ILSVRC2012分类数据集上预先训练过的CNN实现的(无微调),并使用了val1中的少量训练数据(回想一下val1中有一半的类别只有15到55个图片)。将训练集扩展到val1+trainN可将性能提高到24.1%,N=500和N=1000之间基本上没有差别。使用val1中的样本对CNN进行微调,精度微涨到了26.5%,但是由于正样本数量太少可能会导致过拟合。将微调的数据集扩展到val1+train1K,这样训练集中每个类别有1000个正样本,mAP也有了明显的提升,达到29.7%。边框回归可以将结果提升到31%,没有在PASCAL上提升的多。
卷积神经网络——目标检测之RCNN论文翻译_第8张图片

4.6 与OverFeat的关系

R-CNN与OverFeat的关系非常有趣:OverFeat可以看作(大致上)R-CNN的一个特例。如果将选择性搜索生成候选区域替换为正方形的多尺度金字塔方式,将每个类的边界回归替换为单个框的回归,那么两个系统非常相似(只在训练方式上有差异:CNN的检测微调、使用SVM等)。值的注意的是OverFeat在速度方面有很大的优势:比R-CNN快了9倍,每张图片处理时间为2秒。OverFeat为什么这么快呢?是由于OverFeat的滑动窗口(即候选区域)是没有在图像级别上修改大小的,因此重叠的窗口可以共享计算的结果。共享是通过在任意大小的输入上运行整个卷积网络来实现的。R-CNN有很多方式来提高速度,也是未来要做的工作。

OverFeat是早期经典的one-stage Object Detection的方法,基于AlexNet,实现了识别、定位、检测共用同一个网络框架;获得了2013年ILSVRC定位比赛的冠军。OverFeat方法的主要创新点是 multiscale 、sliding window、offset pooling,以及基于AlexNet的识别、定位和检测方法的融合。

5 语义分割

区域分类是语义分割的标准技术,因此我们可以很容易的将R-CNN应用到PASCAL VOC分割挑战上。为了便于与当前最好的语义分割系统(叫做O2P,“second-order pooling”),我们在他们的开源框架内进行相关的工作。O2P使用CPMC来为每张图片生成150个候选区域,然后使用支撑向量回归(support vector regression,SVP)来为每个区域预测属于每个类别的可能性。这种方法的高性能主要源自CPMC生成的高质量的候选区域和强大的多种特征类型(SIFT和LBP的多种多样的变体)二阶池化。我们还看到Farabet等人,使用CNN作为多尺度逐像素的分类器,在几个密集场景的标记数据集(不包括PASCAL)上取的了不错的成绩。
我们遵循[2,4]并将Hariharan等人提供的额外注释添加到了PASCAL分割训练集,以包括Hariharan等人提供的额外注释。[22]。设计选择和超参数在VOC 2011验证集上进行了交叉验证。最终测试结果仅评估一次。
**用于分割的CNN特征。**我们评估了三种计算CPMC区域特征的策略,三种策略计算之前都需要将区域外围的矩形窗口整形到227x227大小。第一种策略(完全)忽略区域的形状,直接在整形后的窗口上计算CNN的特征值,就像在检测时做的那样。但是这种方法忽略了矩形窗口中不属于该物体区域的部分。两个区域可能会有两个很接近的框,但是着两个区域的交叉面积可能很小。(个人理解:这种方法直接按照能够框起该区域的矩形框来计算特征值,但是矩形内可能有很多区域并不属于要预测的区域)。因此,**第二个策略(fg,fore ground),只在前景覆盖的区域上计算CNN的特征值。我们使用输入的平均值来替代背景,这样减去平均值后背景就变成了0。**第三种策略(full+fg)简单的将full和fg的特征串联起来,我们的实验证实他们是互补的。
**在VOC 2011上的结果。**表5中展示了我们在VOC 2011验证集结果与O2P结果的比较。(附录E中是每个类别的结果)。三种计算策略中,fc6的性能都比fc7好,下面的讨论都是基于fc6的特征。fg的性能略优于full,这表明只使用前景有效区域(mask区域)可以提供更强的信号,这与我们的直接相符。然而,full+fg的平均准确率为47.9%,比fg的最佳结果高了4.2%(也略微优于O2P),这表明即使考虑到fg特征,由full-features提供的上下文信息也非常丰富。值得注意的是,使用full+fg特征训练20个SVR,一个核只需要1个小时,而O2P特征训练则需要10个多小时。
卷积神经网络——目标检测之RCNN论文翻译_第9张图片在表6中,给出了在VOC 2011测试集上的结果。使用我们表现最好的方式,fc6(full+fg),与两个最强基线做比较。我们的方法在21个类别中有11个类别达到了最高的分割准确率,所有类别的平均分割准确率为47.9%,在所有类别之间平均(但与O 2 P结果在合理的误差范围内)。当然通过微调可以进一步提升性能。
卷积神经网络——目标检测之RCNN论文翻译_第10张图片

6. 结论

近年来,目标检测性能一直停滞不前。性能最好的系统是将多个低级图像特征与对象检测器和场景分类器的高级上下文相结合的复杂集合。本文提出了一种简单且可扩展的目标检测算法,与PASCAL VOC 2012上的最佳结果相比,相对精度提高了30%。
我们主要依靠两个方面来达到这种精度。第一个是在自下而上的候选区域上应用了大容量的卷积神经网络,来定为和分割物体。第二个是在缺乏训练数据的前提下训练大型的CNN网络的方法。研究表明,先用一个辅助任务用大量的数据(图像分类)对网络进行有监督的与训练,然后再针对数据缺乏的目标任务(检测)对网络进行微调,是非常有效的。我们推测,“有监督的预训练/特定领域的微调”的方法对于各种数据稀缺的视觉问题将是非常有效的。
我们注意到,将计算机视觉的经典工具和深度学习(自下而上的候选区域和卷积神经网络)结合起来对我们达到这些结果的作用非常大。两者不是对立的科学研究路线,而是自然和不可避免的伙伴。

附录

有时间再译。。。

你可能感兴趣的:(卷积神经网络,目标检测)