RCNN阅读笔记

RCNN是一种基于深度学习的目标检测算法,通过区域推荐、CNN特征提取和SVM分类器实现物体检测。该方法首先使用选择性搜索生成候选区域,然后通过预训练的CNN提取特征,最后使用特定类别的SVM进行分类。RCNN通过有监督预训练和特定任务的调优,提高了在PASCAL VOC上的检测性能,解决了小规模标注数据训练大型网络的挑战。
摘要由CSDN通过智能技术生成

Rich feature hierarchies for accurate object detection and semantic segmentation Tech report(v5)

(用于精确物体定位和语义分割的丰富特征层次结构,2014)

论文下载:RCNN论文下载

论文翻译参考:RCNN论文翻译参考

本文并未全文翻译,仅是阅读中个人认为重点的总结翻译。


摘要

提出一种简单并且可扩展的检测算法,因为结合了region proposal与CNNs,故称为RCNN:Regions with CNN feature。mAP在VOC2012最好结果的基础上提高30%以上——达到了53.3%。该方法结合了两个关键的因素:

  1. 在候选区域上bottom-up使用大型卷积神经网络(CNNs),用以定位和分割目标。
  2. 当带标签的训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的调优(fine-tune),就可以产生明显的性能提升。

一、引言

该论文是首次将CNN用于目标检测任务。

大致过程:

1、输入图片。2、用选择性搜索算法(region proposals算法中的一种,用于产生候选框(建议框,建议区域))自下而上产生大约2000个候选框。3、用一个卷积神经网络提取每一个候选框的特征。4、用各种类别的SVM分类器根据特征为每一个候选区域分类。


2012年,Krizhevsky等人在ImageNet大规模视觉识别挑战赛(ILSVRC)上的出色表现重新燃起了世界对CNNs的兴趣(AlexNet)。他们的成功在于在120万的标签图像上使用了一个大型的CNN,并且对LeCUN的CNN进行了一些改造(比如ReLU和Dropout Regularization)。

于是引起了很大的影响与讨论,提炼出来的核心问题是:ImageNet上的CNN分类结果在何种程度上能够应用到PASCAL VOC挑战的物体检测任务上?

核心问题是:ImageNet上的CNN分类结果在何种程度上能够应用到PASCAL VOC挑战的物体检测任务上? 
我们通过连接图像分类和目标检测,回答了这个问题。本论文是第一个说明在PASCAL VOC的物体检测任务上CNN比基于简单类HOG特征的系统有大幅的性能提升。我们主要解决了两个问题:使用深度网络定位物体和在小规模的标注数据集上进行大型网络模型的训练。 

与图像分类不同的是检测需要定位一个图像内的许多物体。一个方法是将框定位看做是回归问题。但Szegedy等人的工作说明这种策略并不work(在VOC2007上他们的mAP是30.5%,而我们的达到了58.5%)。即:当时的研究表明将目标检测单独视为回归问题效果不理想。另一个可替代的方法是使用滑动窗口探测器,通过这种方法使用CNNs至少已经有20年的时间了,通常用于一些特定的种类如人脸,行人等。为了获得较高的空间分辨率,这些CNNs都采用了两个卷积层和两个池化层。我们本来也考虑过使用滑动窗口的方法,但是由于网络层次更深,输入图片有非常大的感受野(195×195)and 步长(32×32),这使得采用滑动窗口的方法充满挑战。 (个人理解:即网络太深,最后一层的感受野太大,滑动窗口补偿太小有太多重复,但太大又走不了几步。)

我们是通过操作”recognition using regions”范式,解决了CNN的定位问题。

测试时,RCNN先根据输入图像产生大约2000个与类别无关的候选区域,然后将每一个候选区经过CNN网络提取到一个特定大小的特征向量,最后根据特征向量来为候选区域进行分类,分类时候使用的是特定类别的线性SVM分类器。

不考虑候选区域的大小,因为使用图像仿射变换(affine image warping)的方法来对每个不同形状的region proposal产生一个固定长度向量来作为CNN的输入向量(也就是把不同大小的proposal放到同一个大小)

检测中面对的第二个挑战是标签数据太少,现在可获得的数据远远不够用来训练一个大型卷积网络。传统方法多是采用无监督预训练,再进行有监督调优。本文的第二个核心贡献是在辅助数据集(ILSVRC)上进行有监督预训练,再在小数据集上针对特定问题进行调优(fine tune)。这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。我们的实验中,针对检测的调优将mAP提高了8个百分点。调优后,我们的系统在VOC2010上达到了54%的mAP,远远超过高度优化的基于HOG的可变性部件模型(deformable part model,DPM)

我们的系统也很高效,都是小型矩阵向量相乘和非极大值抑制NMS这些特定类别的计算。这个计算特性源自于特征在不同类别之间的共享(对于不同类别,CNN提取到的特征是一样的),这比之前使用的区域特征少了两个数量级的维度。 

分析结果,我们发现主要的错误是因为mislocalization(定位错误),而使用了bounding box regression之后,可以有效的降低这个错误。


二、使用R-CNN进行目标检测

我们的物体检测系统有三个模块构成。第一个,产生类别无关的region proposal。这些推荐定义了一个候选检测区域的集合;第二个是一个大型卷积神经网络,用于从每个区域抽取特定大小的特征向量;第三个是一系列指定类别的线性SVM。

2.1模块设计

区域推荐(region proposal) ——对应第一个模块

近来有很多研究都提出了产生类别无关区域推荐的方法。比如: objectness(物体性),selective search(选择性搜索),category-independent object proposals(类别无关物体推荐),constrained parametric min-cuts(受限参最小剪切, CPMC),multi-scal combinatorial grouping(多尺度联合分组)等,由于R-CNN对特定区域算法是不关心的,所以我们采用了选择性搜索以方便和前面的工作进行可控的比较。

特征提取(Feature extraction) ——对应第二个模块

我们使用Krizhevsky等人所描述的CNN(AlexNet)的一个Caffe实现版本对每个推荐区域抽取一个4096维度的特征向量,把一个输入为277*277大小的图片,通过五个卷积层和两个全连接层进行前向传播,最终得到一个4096-D的特征向量。读者可以参考AlexNet获得更多的网络架构细节。 

为了计算region proposal的特征,我们首先要对图像(指的是候选区域)进行转换,使得它符合CNN的输入(R-CNN架构只能接受固定大小:277*277)。这个变换有很多办法,我们使用了最简单的一种。无论候选区域是什么尺寸和宽高比,我们都把候选框变形成想要的尺寸。具体的,变形之前,我们现在候选框周围加上16的padding,再进行各向异性缩放。 这种形变使得mAp提高了3到5个百分点。在论文附录A中,作者对比了各向异性和各向同性缩放缩放方法。

2.2测试阶段的目标检测

测试阶段,在测试图像上使用selective search抽取2000个推荐区域(实验中,我们使用了选择性搜索的快速模式)。然后变形每一个推荐区域,再通过CNN前向传播计算出特征。然后我们使用对每个类别训练出的SVM给整个特征向量中的每个类别单独打分。

然后给出一张图像中所有的打分区域,然后使用NMS(每个类别是独立进行的),拒绝掉一些和高分区域的IOU大于阈值的候选框。

分析:两种性质使检测效率高。首先,所有CNN参数都在所有类别中共享。其次,与其他常见方法比较,由CNN计算出的特征向量是低维度的,这种共享的结果就是计算推荐区域特征的耗时可以分摊到所有类别的头上(GPU:每张图13s,CPU:每张图53s)。唯一的和具体类别有关的计算是特征向量和SVM权重和点积,以及NMS。实践中,所有的点积都可以批量化成一个单独矩阵间运算。特征矩阵的典型大小是2000×4096,SVM权重的矩阵是4096xN,其中N是类别的数量。 

2.3训练

有监督的预训练 

我们在大型辅助训练集ILSVRC2012分类数据集(没有约束框数据)上预训练了CNN。预训练采用了Caffe的CNN库。总体来说,我们的CNN十分接近krizhevsky等人的网络(AlexNet)的性能,在ILSVRC2012分类验证集在top-1错误率上比他们高2.2%。差异主要来自于训练过程的简化。(即:用分类数据集做CNN网络的预训练)

特定领域的参数调优 fine tune

为了让我们的CNN适应新的任务(即检测任务)和新的领域(变形后的推荐窗口)。我们只使用缩放后的推荐区域对CNN参数进行SGD(随机梯度下降)训练。我们替换掉了ImageNet专用的1000-way分类层,换成了一个随机初始化的21-way分类层,(其中20是VOC的类别数,1代表背景)而卷积部分都没有改变。

我们对待所有的推荐区域,如果其和真实标注的框的IoU>= 0.5就认为是正样本,否则就是负样本。SGD开始的learning_rate为0.001(是初始化预训练时的十分之一),这使得调优得以有效进行而不会破坏初始化的成果。每轮SGD迭代,我们统一使用32个正例窗口(跨所有类别)和96个背景窗口,即每个mini-batch的大小是128。另外我们倾向于采样正样本窗口,因为和背景相比他们很稀少。

目标种类分类器  SVM训练

思考一下检测汽车的二分类器。很显然,一个图像区域紧紧包裹着一辆汽车应该就是正样本。同样的,没有汽车的就是背景区域,也就是负样本。较为不明确的是怎样标注那些只和汽车部分重叠的区域。我们使用IoU重叠阈值来解决这个问题,低于这个阈值的就是负样本。这个阈值我们选择了0.3,是在验证集上基于{0, 0.1, … 0.5}通过网格搜索得到的。我们发现认真选择这个阈值很重要。如果设置为0.5,可以提升mAP5个点,设置为0,就会降低4个点。正样本就是严格标注的框。

(IOU<0.3被作为负例,ground-truth是正例,其余的全部丢弃)

由于训练数据太大,难以装进内存,我们选择了标准的hard negative mining method,难负例挖掘算法,用途就是正负例数量不均衡,而负例分散代表性又不够的问题,hard negative就是每次把那些顽固的棘手的错误,再送回去继续练,练到你的成绩不再提升为止.这一个过程就叫做’hard negative mining‘。

附录B中讨论了,为什么在fine-tunning和SVM训练这两个阶段,定义得正负样例是不同的。fine-tunning阶段是由于CNN对少量样本容易过拟合,需要大量训练数据,故对IoU限制宽松: IoU>0.5的建议框为正样本,否则为负样本; SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

我们也会讨论为什么训练一个分类器是必要的,而不只是简单地使用来自调优后的CNN的最终fc8层的输出。

为什么单独训练了一个SVM而不是直接用softmax,作者提到,刚开始时只是用了ImageNet预训练了CNN,并用提取的特征训练了SVMs,此时用正负样本标记方法就是前面所述的0.3,后来刚开始使用fine-tuning时,也使用了这个方法,但是发现结果很差,于是通过调试选择了0.5这个方法,作者认为这样可以加大样本的数量,从而避免过拟合。然而,IoU大于0.5就作为正样本会导致网络定位准确度的下降,故使用了SVM来做检测,全部使用ground-truth样本作为正样本,且使用非正样本的,且IoU大于0.3的“hard negatives”,提高了定位的准确度.具体参考论文附录B,将cnn的最后一层进行回归而不使用SVM,map下降四个百分点。


三、可视化、消融、模型的错误

3.1 可视化学习到的特征

我们则使用了一种简单的非参数化方法,直接展示网络学到的东西。

方法是这样的,先计算所有抽取出来的推荐区域(大约1000万),计算每个区域所导致的对应单元的激活值,然后按激活值对这些区域进行排序,然后进行最大值抑制,最后展示分值最高的若干个区域。这个方法让被选中的单元在遇到他想激活的输入时“自己说话”。我们避免平均化是为了看到不同的视觉模式和深入观察单元计算出来的不变性。 

我们可视化了第五层的池化层pool5,是卷积网络的最后一层,feature_map(卷积核和特征数的总称)的大小是6 x 6 x 256 = 9216维。忽略边界效应,每个pool5单元拥有195×195的感受野,输入是227×227。pool5中间的单元,几乎是一个全局视角,而边缘的单元有较小的带裁切的支持。 

3.2 消融研究(Ablation studies)

ablation study 就是为了研究模型中所提出的一些结构是否有效而设计的实验。如你提出了某某结构,但是要想确定这个结构是否有利于最终的效果,那就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,这就是ablation study。也就是(控制变量法)

结论:

CNN的大部分表达能力来自其卷积层,而不是来自于更密集的全连接层。

大多数提升是从学习特定域的非线性分类器获得的

3.3网络结构

T-Net:即AlexNet

O-Net:即VGG-16

结果显示,具有O-Net的R-CNN基本上优于T-Net的R-CNN,将mAP从58.5%提高到66.0%。然而,在计算时间方面存在相当大的缺陷,O-Net的前进速度比T-Net长约7倍。

3.4 检测错误分析

为了揭示出我们方法的错误之处, 我们使用Hoiem提出的优秀的检测分析工具,来理解调参是怎样改变他们,并且观察相对于DPM方法,我们的错误形式。这个分析方法全部的介绍超出了本篇文章的范围,我们建议读者查阅文献21来了解更加详细的介绍(例如“normalized AP”的介绍),由于这些分析是不太有关联性,所以我们放在图4和图5的题注中讨论。 

3.5 Bounding-box回归

基于错误分析,我们使用了一种简单的方法减小定位误差。受到DPM[17]中使用的约束框回归训练启发,我们训练了一个线性回归模型在给定一个选择区域的pool5特征时去预测一个新的检测窗口。详细的细节参考附录C。表1、表2和图4的结果说明这个简单的方法,修复了大量的错位检测,提升了3-4个百分点。


四、ILSVRC2013数据集介绍


五、语义分割

区域分类是语义分割的标准技术,这使得我们很容易将R-CNN应用到PASCAL VOC分割任务的挑战。

用于分割的CNN特征。 

为了计算CPMC区域上的特征,我们执行了三个策略,每个策略都先将矩形窗口变形到227×227大小。第一个策略完全忽略区域的形状(full ignore),直接在变形后的窗口上计算CNN特征,就和我们检测时做的一样。但是,这些特征忽略了区域的非矩形形状。两个区域也许包含相似的约束框却几乎没有重叠。因此,第二个策略(fg,foreground)只计算前景遮罩(foreground mask)的CNN特征,我们将所有的背景像素替换成平均输入,这样减除平均值后他们就会变成0。第三个策略(full+fg),简单的并联全部(full)特征和前景(fg)特征;我们的实验验证了他们的互补性。

(不做研究,主要看目标检测部分内容)


六、结论

最近几年,物体检测陷入停滞,表现最好的检测系统是复杂的将多低层级的图像特征与高层级的物体检测器环境与场景识别相结合。本文提出了一种简单并且可扩展的物体检测方法,达到了VOC 2012数据集相对之前最好性能的30%的提升。  

我们取得这个性能主要通过两个方面:第一是应用了自底向上的候选框训练的高容量的卷积神经网络进行定位和分割物体。另外一个是使用在标签数据匮乏的情况下训练大规模神经网络的一个方法。我们展示了在有监督的情况下使用丰富的数据集(图片分类)预训练一个网络作为辅助性的工作是很有效的,然后采用稀少数据(检测)去调优定位任务的网络。我们猜测“有监督的预训练+特定领域的调优”这一范式对于数据稀少的视觉问题是很有效的。  

最后,我们注意到能得到这些结果,将计算机视觉中经典的工具和深度学习(自底向上的区域候选框和卷积神经网络)组合是非常重要的。而不是违背科学探索的主线,这两个部分是自然而且必然的结合。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值