(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

Abstract

使用PASCAL VOC数据集评估的目标检测任务的变现,近几年有所停滞,目前最好的方法都是复杂的聚集系统:将多个低级的图像特征与高级的context进行组合。本文中,我们提出一个简单的、可扩展的检测算法,相对于VOC2012最好表现提升了超过30%的mAP,达到了53.3%。我们的方法组合了两个关键的想法:

  • 为了定位和分割,我们可以将高能力(高容量,high-capacity)的CNN用在自底向上的区域建议中(region proposals)。
  • 当标签的训练数据稀缺时,可以对辅助任务进行有监督的预训练,然后进行针对特定领域的微调,可显着提升性能。

因为我们将区域建议与CNN进行组合,我们把我们的方法叫做RCNN:Regions with CNN features。我们同样做了实验来看网络学到什么,结果是图像特征的rich hierarchy。

1.Introduction

Features matter。上一个十年视觉识别任务的发展是建立在SIFT和HOG的应用上。但是近几年2012-2014,我们再看,已经没有多少进步了,都是通过集合不同的系统,使用多个方法汇总来提升的。

SIFT和HOG都是按块分的方向直方图(blockwise),可以大致与V1中的复杂细胞(在灵长类动物视路径中的第一个皮质区域)相关联。但是我们知道,识别发生在几个下游阶段,这意味着获得一个更有效的特征的计算过程可能需要分层的、多阶段的处理。

一个叫neocognitron的模型,是第一个这种尝试,然而它缺乏监督学习的算法。LeCun使用SGD,通过反向传播,使用神经网络,优化了模型。

CNN在1990s有着广泛应用,但是后来不再流行,尤其是在CV领域,因为支持向量机的出现。2012年,AlexNet又一次使得CNN流行起来,它在ILSVRC取得了很好的效果。

在2012年ILSVRC研讨会上对ImageNet结果的重要性进行了激烈的辩论,核心问题可以归结如下:ImageNet上CNN分类结果在可以在多大程度上概括为PASCAL VOC挑战中的物体检测结果?

我们通过建立分类与目标检测任务之间的桥梁来回答这个问题。本文是首个提出CNN可以极大提升PASCAL VOC上目标检测表现的论文。达成这一结果需要解决两个问题:使用深度网络定位目标、只是用较少数量的标记数据训练一个高能力的网络。

与图像分类不同,**检测需要在图像中对目标进行定位。一种方法是把定位视为回归任务。**然而Szegedy和我们的文章都发现这种策略实际上表现可能不够好。另一种方法就是建立一个滑窗检测器,CNN广泛应用在这种方法中,用在人脸或者行人检测这种特殊的任务中,但是通常它们只有两层卷积层,我们也考虑过这种方法。我们使用了五层卷积层,使用了很大的感受野(195 * 195像素)以及步长(32 * 32),这使得滑窗进行精确定位成为了一项挑战。

因此,我们通过“recognition using regions”来解决CNN的定位问题。==在测试阶段,我们的方法生成大约2000个类无关的区域建议,使用CNN对每个区域提取一个固定长度的特征,然后使用category-specific的线性SVM对每个区域进行分类。==我们使用简单的技术**(仿射图像变形)**来对每个区域建议形成固定尺寸的CNN输入,而不管区域的形状。图1展示了我们方法的过程,因为我们的方法组合了区域建议和CNN,所以称为R-CNN。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

检测领域的第二个挑战是,标记的数据比较缺乏,目前的数据量不足以训练大型CNN。传统方法是使用非监督的预训练,然后使用监督的微调。==本文的第二个贡献就是展示了,在大的辅助数据集(ILSVRC)上进行有监督的预训练,然后再在小的数据集(PASCAL)使用领域知识进行微调,这是一种当数据不足时有效的对高能力CNN的训练方法。==在我们的实验中,微调对mAP提升了八个百分点,在微调后,我们的系统在VOC2010上取得了54%的mAP,相比较来说基于HOG的DPM(deformable part model)仅仅是33%。

我们的系统也十分有效率。**唯一的class-specific计算是一个相当小的矩阵向量乘积以及贪婪非极大值抑制。**这个计算跟随特征,可以在所有类别*享,并且特征的维度也比以前的方法低两个数量级。

HOG类的特征的一个优点在于简单:很容易理解它们携带的信息。我们能从CNN学到的特征得到一些启示吗?也许密集连接的层,有超过54million参数的它们是关键?然而并不是。我们“叶状化”CNN,然后惊讶的发现,有大概94%的参数,当它被移除后,检测准确性只下降一点点。然而,检测网络中的units,我们可以看到卷积层学到了许多rich features。(见图3)

了解我们方法的失败模式对于改进它也是至关重要的,因此我们报告了Hoiem检测分析工具的结果。作为该分析的直接结果,我们证明了一种简单的边界框回归方法可以显着减少错误定位,然而这是主要的错误模式。

在介绍技术细节之前,我们注意到,由于R-CNN在区域中运行,很自然的想到将它扩展到语义分割中。经过小小的修改,我们在PASCAL VOC分割任务中同样取得了目前最好效果,在VOC2011测试集上分割准确率达到47.9%。

2.Object detection with R-CNN

我们的目标检测系统包含三个模块。第一个模块生成类无关的区域建议,这些区域建议构成了我们的监测器要处理的候选框集合;第二个模块是一个大的CNN网络,用来对每个区域提取一个固定长度的特征向量;第三个模块是一系列class-specific的线性SVM。

在这部分我们详细描述每一个模块的设计以及测试应用,展示在PASCAL VOC 2010-2012的效果。

2.1Module design

**Region proposals。**最近,一系列论文提出了许多生成类无关的区域建议的方法。我们R-CNN使用选择性搜索来与之前的方法进行对比。

**Feature extraction。**我们使用AlexNet部署在Caffe上,**对每个候选区域提取一个4096维的特征向量。**AlexNet输入为227 * 227RGB,经过五层卷积层和两层FC层计算得到特征向量。因为AlexNet的输入尺寸是固定的,我们首先需要将候选区域进行转换。我们直接使用最简单的方法,不管区域的尺寸以及长宽比,直接将区域所有像素resize到227 * 227。在变形之前,我们对区域进行膨胀,p=16,使得原始网络周围有16个像素包围。图2展示了一些变形之后的区域图像。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

2.2 Test-time detection

在测试阶段,我们在测试图像上运行选择性搜索,生成大概2000个区域建议,对每个建议进行变形,然后送入CNN生成特征向量,然后对于每个类别,我们使用该类的SVM进行score。对这张图像所有评分后的区域,我们使用贪婪地非极大值抑制(每类独立进行),对两个区域,如果IoU大于某个值,那么就舍弃分数较小的这个proposal。

**Run-time analysis。**两方面使得我们的检测很有效率。一是所有的CNN参数对于不同的类都是共享的;第二,CNN计算出的特征向量维度相比其他方法,非常小。这样共享的结果就是,花在计算区域建议和特征提取上面的时间(GPU每张图13s、CPU每张图53s)分摊到了所有的类别上。**唯一的class-specific计算时特征和SVM的点积计算以及NMS计算上。**实际上,所有的点积计算都被合成了一个的矩阵与矩阵的乘积。特征矩阵大约是2000 * 4096,SVM的参数矩阵是4096 * N,N是类别数量。

从上面的分析可以看出,R-CNN可以扩展到数千个目标类别,而无需求助于哈希等近似技术。**即使有100k类别,最后的矩阵乘法也仅仅需要在一个多核CPU上10s即可计算出。**这个效率不仅仅是因为使用了区域建议和共享的特征得到的,更是因为我们的特征维度很小。

我们同样将R-CNN与使用DPM和哈希的scalable detection模型相比,它们对于10k class每张图片运行5分钟,mAP只有16%,我们的方法,对于10k detector在CPU上只需一分钟,而且达到了59%mAP。

2.3 Training

**Supervised pre-training。**我们将CNN在额外的数据集ILSVRC2012进行预训练,这个数据集的数据只是image-level的标注,没有bbox标注。我们几乎达到了AlexNet论文中的表现,由于训练过程进行了一些简化,比它的效果差一点。

**Domain-specific fine-tuning。**我们继续使用变形之后的proposal对CNN进行训练,使用SGD。对于原来ImageNet的1000类分类,改为随机的21类的分类(VOC的20类+背景),CNN的结构没有变。**对于IoU>0.5,且类别正确的proposal视为正样本。**SGD的学习率为0.001(是预训练的1/10),这可以在不破坏初始化的情况下,找到更好效果。每次迭代,我们取32个positive window(over all classes)+96个背景windows构成batchsize=128。

**Object category classifiers。**我们首先考虑一个分类问题来检测汽车。显而易见,紧密包围汽车的区域应该是正样本,同样,一个不包含一点与汽车有关的区域应该是背景,负样本。**但是对于一个有一部分汽车的区域该如何标记,不是很清楚。我们设置一个IoU的阈值来解决这个问题。低于这个阈值的区域定义为负样本,我们在验证集上进行比较,最后阈值设为0.3。**设为0.5,mAP会损失5%,设为0,mAP会损失4%。简单地认为正样本就是每类的ground-truth bbox,用来训练SVM。

特征提取了,label也标记之后,我们就用这些来优化每类的线性SVM。

因为训练数据太多,很难放入内存中,==我们使用标准hard negative mining method(因为对于每一类,负样本太多,所以使用这种方法,找到最差的负样本进行训练),==这种方法收敛的很快,可以在几次遍历所有图像之后就收敛。

2.4 Results on PASCAL VOC 2010-12

按照PASCAL VOC 最好的尝试,我们在VOC2007数据集上验证了所有的设计策略和超参数。为了最后在VOC2010-12的效果,我们在VOC2012 train上微调了CNN,在VOC2012trainval上优化了我们的SVMs。最后我们提交了两种主要的算法变形(有和没有bbox regression)。

表1展示了VOC2010上的完整结果。我们将我们的方法与4个主要的方法进行对比,SegDPM(将DPM检测器与语义分割系统的输出组合起来,使用了额外的inter-detector context和image-classifier resocring);**最切题的比较是和UVA系统比较,因为我们和它使用了同样的区域建议算法,它们在分类时,建立了一个四层的空间金字塔,并使用密集采样的SIFT,Extended OpponentSIFT和RGB-SIFT描述符进行填充,每个描述符都使用4000字码本进行了量化,分类使用了一个直方图intersection 核的SVM。**与它们的多特征,非线性SVM方法,我们的方法更快更好,在VOC2011/12测试集上也取得了差不多的效果。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

3.Visualization, ablation, and modes of error

3.1 Visualizing learned features

第一层肯容易可视化,很容易理解,它们主要提取的是边界和颜色等。理解之后的层提取到的特征比较有挑战。我们提出一个简单的non-parametric方法,可以直接展示出网络学到了什么。

主要的想法是,在网络中找一个单独的unit/特征,**然后使用它,就像它是一个目标检测器一样。也就是说,我们计算这个unit在许多区域建议上的**值,将proposals按照**值大小排序,再NMS,然后展示出分数最高的一些区域。**我们的方法让选中的unit可以“speak for itself”,通过展示它关注于什么样的输入。

我们可视化pool5层的units,它是网络最后一个卷积层经过最大池化之后的输出。pool5的特征图尺寸为6 * 6 * 256=9216维,忽略边界效应,每个unit都代表着原图(227 * 227)中的195 * 195感受野。pool5层的中心几乎有着全局视角,稍微边缘的unit有着小一点的裁剪视角。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

图3中每一行展示了一个pool5层unit的top16**值。这些units展示了网络学习到的代表sample。在第二行,我们看到这个unit关注的是狗狗和点阵。第三行的unit关注的是红色。该网络似乎正在学习一种表示形式,该表示形式将少量的类调整特征与形状,纹理,颜色和材料属性的分布式表示形式结合在一起。随后的完全连接的层fc6具有对这些丰富特征的大量组合进行建模的能力。

3.2 Ablation studies

**Performance layer-by-layer,without fine-tuning。**为了弄明白哪些层对于检测的表现最关键,我们分析了CNN最后三层每一层在VOC2007上的结果。Layer pool5在3.1中描述了,最后两层下面进行总结。

Layer fc6是连接pool5的全连接层,为了计算特征,pool5与fc6之间的参数矩阵为9216 * 4096。f池化层的输出被打平为9216维向量,然后加上偏置向量。fc6输出使用ReLU**。

layer fc7使网络的最后一层输出,它与上一层之间的参数矩阵为4096 * 4096,增加了偏置和ReLU。

我们先看没有经过微调的CNN结果,也就是说所有的CNN参数都是在ILSVRC2012训练的结果。逐层分析表现(表2第1-3行)**可以看出,fc7的特征比fc6的差,这就意味着大概29%的参数,16.8million可以被移除,而不导致mAP的下降。更让人惊讶的是,将fc7和fc6都移除之后,尽管pool5只使用了6%的CNN参数,但是效果更好。**大部分CNN的表示能力都来自卷积层,而不是FC层。这一发现暗示了通过仅使用CNN的卷积层来计算任意大小图像的密集特征图(就HOG而言)的潜在用途。这种表示可以使得使用滑窗、DPM等检测器在pool5上进行实验成为可能。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

**Performance layer-by-layer,with fine-tuning。**我们现在看我们经过微调之后的CNN的结果,提升是非常明显的(表2第4-6行)。微调的对fc6和fc5的提升大于pool5的提升,这也意味着pool5从ImageNet学习到的特征是通用的,大部分的提升是由学习domain-specific的非线性分类器而达成的。

**Comparison to recent feature learning methods。**我们选择两种相对少特征的方法进行对比,都是建立在DPM基础上的;作为参考,我们同样包括了标准的基于HOG的DPM方法结果。

第一个DPM特征学习方法,DPM ST,使用“sketch token”的直方图对HOG特征进行增强。直观地,sketch token就是穿过图像块中心的轮廓的紧密分布,它的概率是由随机森林在每个像素处计算的,该随机森林经过训练可将35×35像素块分类为150种sketch token或背景之一。

第二种方法,DPM HSC,使用稀疏编码(HSC)的直方图取代HOG。为了计算HSC,稀疏编码的**值是这么计算的:在每个像素使用一个学习好的词典,词典包括100个7 * 7的灰度尺度的块。最后的**值使用三种方式修正,空间池化、单元L2归一化、power transformed。即(x<sign(x)xαx<-sign(x)|x|^\alpha

我们的R-CNN的各种形式的表现都超越了这三种DPM方法(上面两个+标准)。

3.3 Detection error analysis

我们使用优秀的监测分析工具(Hoiem),为了找出我们方法的错误modes,并且知道如何通过微调来改变它们,并且与DPM的错误进行对比,见图4和图5。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

图4中,每幅图展示了假阳性FP的演变分布,每个假阳性分为4中,**Loc指的是poor location(正确分类,但是IoU在0.1-0.5之间,或者是重复的框);Sim指的是与相似的类别混淆了;Oth指的是与不相似的类别混淆了;BG指的是,关注背景的FP。**与DPM相比,我们的错误主要集中在Loc,而不是Sim或Oth,这表示CNN特征比HOG有辨别力的多。Loc很可能是由于我们使用了自下而上的区域建议以及CNN对整个图片分类的预训练中学到的位置不变性。第三类展示出了我们的bbox regression如何修复了定位错误。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

3.4 Bounding box regression

根据上面的分析,**我们应用了一个简单方法来减少定位错误。受到DPM中bbox regression的启发,我们训练了一个线性回归模型来对proposal在pool5输出的特征预测一个新的检测窗口。**表1、表2以及图4的结果都显示出这种简单的方法修复了大量的定位错误,提升了3-4%的mAP。

4.Semantic segmentation

对于语义分割来说,对区域的分类是一项标准的技术,这使得我们直接将R-CNN应用到PASCAL VOC 分割挑战中。为了直接与当前最好的语义分割系统(O2P:second-order pooling)表现进行对比,我们同样使用了它们的开源框架进行实验。O2P使用CPMC来对每张图像生成150个区域建议,然后预测每个区域的质量,对于每类,使用支持向量回归(SVR)。他们方法的最好表现由CPMC区域的质量以及有力的对多种特征进行second-order pooling(丰富了SIFT和LBP)得到的。

我们遵循[2,4]并扩展了PASCAL分割训练集,以包括Hariharan等人提供的额外注释。设计决策和超参数在VOC 2011验证集中进行了交叉验证,最终测试结果仅评估了一次。

**CNN features for segmentation。**我们评估了三种计算CPMC区域特征的策略,三种方法都是从把区域周围的矩形窗变形到227 * 227开始。第一个策略(full)忽略区域的形状,直接在变形的窗口上计算CNN特征,就像我们检测中的方法一样。然而这种方法得到的特征忽略了区域使非矩形的情况。两个区域可能有着相似的bbox但是却没什么重叠。因此,第二种策略(fg)只在区域的前景mask上计算CNN特征。我们使用输入的均值替换掉背景,这样在减去均值之后背景区域就是0。第三种方法(full+fg)就是将上面两种得到的特征进行级联。

**Results on VOC2011。**表3总结了我们与O2P在VOC2011验证集上的效果对比。在每个特征计算策略中,fc6总是比fc7效果好,下面的讨论都指的是fc6的特征。fg策略效果稍稍超过full,意味着被掩盖的区域形状提供了一个更强的信号,这与我们的预想相符。然而,full+fg的平均准确率为47.9%,更好,这也意味着即使给了fg特征,full特征仍是有用的。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

在表4中,我们展示在VOC2011测试集上的效果,将我们最好的模型fc6(full+fg)与其他两个相比。我们方法取得了21类中的11类的最高分割准确率,并且取得最高的总体准确率47.9%,进行微调之后还可能得到更好的结果。(R-CNN)Rich feature hierarchies for accurate object detection and semantic segmentation论文阅读笔记2014

5.Conclusion

最近几年,目标检测的表现提升较为缓慢。最好的表现系统都是聚合了多个检测器的复杂系统。本文提出了一个简单的目标检测算法,相对提升了30%准确率。

我们主要想法有两点,第一是使用高能力的CNN来定位或分割目标。第二就是提出了一个当标记好的训练数据缺乏时,训练CNN的方法。我们证明,在一个额外的大型分类数据集上进行监督的预训练,然后微调网络进行检测任务,是十分有效的。这种流程可以广泛应用在缺乏数据的视觉任务中。

最后总结,我们通过将计算机视觉的分类工具以及深度学习进行组合得到的上述结果,这两种技术是好搭档。