rcnn翻译

按照师兄所说,我决定先对RCNN进行学习,今天在进行搜索RCNN的时候,大部分的人都是在针对《Rich feature hierarchies for accurate object detection and semantic segmentation》这篇论文进行解读,所以我也下载了这篇文献尝试进行阅读。

本文题目翻译过来就是针对目标检测和语义分割的多特征级,按照我的理解就是在进行目标检测和语义分割的时候使用了多层特征级。

目标检测中衡量识别精度的指标是mAP(mean average precision)。

mAP定义及相关概念
mAP: mean Average Precision, 即各类别AP的平均值
AP: PR曲线下面积,后文会详细讲解
PR曲线: Precision-Recall曲线
Precision: TP / (TP + FP)
Recall: TP / (TP + FN)
TP: IoU>0.5的检测框数量(同一Ground Truth只计算一次)
FP: IoU<=0.5的检测框,或者是检测到同一个GT的多余检测框的数量
FN: 没有检测到的GT的数量
本文提出了将在VOC 2012中的mAP精度提高到了53.3%。他们的方法主要结合了两个关键:

①:在候选区域应用了深层的CNN网络进行定位和分割目标。(自底向上?)

②:当标签在训练的时候不够时,先对辅助任务进行有监督与训练,再进行特征任务的调优,,可以明显的提升性能。

所以作者将这个网络叫做R-CNN,也就是具有区域建议的CNN网络。

引言部分

关于特征问题,在过去的很多年中,各类视觉识别任务的进展几乎都是基于SIFT【27】(提取关键点)和HOG【7】(提取梯度,也就是轮廓)。但是总的来说对象检测的性能在2010~2012年的进度是十分缓慢的。

该文章讲到SIFT和HOG是块状方向直方图,可以大致的V1中的复杂细胞相联系(灵长类动物视觉通路的第一个皮质区域),但是我们也知道视觉识别发生在一些下游阶段,也就是说更有价值的信息是层次化,多阶段的。

Fukushima做的‘neocognitron’是一个受生物学启发的用于模式识别的层次,移动不变形模型,算是这方面最早的尝试。

但是‘neocognitron’缺少监督学习算法。随后LeCun等人表示基于反向传播的SGD(随机梯度下降)对CNNs(训练卷积神经网络)有效,CNNs被认为是继承neocognitr的一种的一类(class)模型。

CNNs在1990年代曾经被广泛的使用,但是由于SVM(support vector machines,支撑向量机)的兴起而逐渐的淡出主流,但是在2012年的imageNet大赛上,alexnet又重新燃起了世界对CNNs的兴趣。

最后广泛讨论得到的核心问题是:ImageNet的CNN非类结构在何种程度上能够应用到PASCAL VOC挑战的物体检测任务上。

随后文中提到,通过联系图像分类和目标检测回答了这个问题,该论文是第一个提到在PASCAL VOC的物体检测任务上,CNN比就与简单类的HOG特征的系统有大幅度的性能提升。并表明要关注两个问题:使用深度网络定位物体(localizing objects with a deep network)和在小规模的标注数据集上进行大型网络模型的训练(training a high-capacity model with only a small quantity of annotated detection data)。

跟图像分类不同的是,检测需要定位图像内的物体(可能是很多个人物体)。一个是将框定位看做是回归问题,另一个可替代的方法是使用滑动窗口探测器,通过这种方法使用CNNs已经至少20年了。通常用于一些特定的种类,比如检测人脸和行人等。为了获得较高的空间分辨率,这些CNNs都采用了两个卷积层和两个池化层。作者本来也打算使用滑动窗口的方法,但是由于网络层次更深之后,输入图形有非常大的感受野(195195)和步长(3232),这使得采用滑动窗口的方法充满挑战。

关于卷积滑动窗口检测算法

https://blog.csdn.net/weixin_42285271/article/details/87920939滑动窗口是将最后的全连接层转换成卷积层。

本文的作者解决CNN定位的问题是使用了“recognition using regions”(已经能够解决目标检测和语义分割).测试的时候,针对一张图片产生了将近2000个雨类别无关的region proposals,对每一个CNN都抽取了一个长度固定的特征向量,然后借助专门针对特定类别数据的线性SVM(支撑向量机)对每个区域进行分类。作者没有考虑region的大小,使用了一个小技巧,也就是拟合图像变形的方法来对每个形状不同的region proposal产生一个固定长的作为CNN输入的特征向量。(也就是相当于把不同大小的proposal放到同一个大小)。因为是结合了region proposal和CNNs,所以起名字叫RCNN:regions with CNN features

第一步是将图像输入,第二步提取了将近2000个region proposal,第三步用大型卷积神经网络计算每个建议的特征,使用类特有的线性支持向量机对每个区域进行分类。

检测中要面临的第二个挑战就是标签数据太少了,现在可获得的数据远远不够用于训练一个大型卷积网络(数据驱动型神经网络中的数据量始终是个问题。)。传统方法大多是采用无监督训练,再进行监督调优。该文章的第二个主要贡献就是在辅助数据集(ILSVRC)上进行有监督与训练,再在小数据集上针对特定问题进行调优。这是一种在训练数据十分稀少的情况能够有效训练大型卷积神经网络的方法。在作者的实验中,针对检测的调优将mAP提高了8个百分点。

接着又提到了DPM,DPM又称为可变形部件,是08年提出的模型,可以说是传统目标识别算法中最经典的算法之一。

DPM的例子:用于行人检测的联合深度学习,一个行人检测器包括了特征提取、部件检测器、部件集合形变建模、部件遮挡推理、分类器等等,在联合深度模型算法中,深度模型的每个层和视觉系统的各个模块可以建立起一定的对应关系。
HOG-like特征的一个优点是简单性:能够很容易明白提取到的特征是什么,那么问题来了,能否可视化出CNNs提取到的特征?全连接层有超过五千四百万的参数值,这都不是关键,当我们把CNN切断以后,移除掉其中的94%的参数精度也只会下降一点点,但是通过网络中的探测单元可以看到卷积层学习了一组丰富的特性。

通过分析失败的案例,作者发现主要的错误是因为mislocalization,而有了bounding box regression(边框回归)之后可以有效降低这个错误。因为R-CNN是在建议区域上进行操作的,所以可以很自然地扩展到语义分割任务上。

2.Object detection with R-CNN

作者的目标检测系统有三个模块。第一个是产生类别无关的region proposals,这些建议定义了一个候选检测区域的集合;第二个是一个大型的卷积神经网络,用于从每个区域提取大小固定的特征向量;第三个模块是一个指定类别的SVM。

2.1 module design

region proposals.

近些年有很多研究都提出了产生类别无关区域建议的方法。比如:objectness(物体性),selective search(选择性搜索),category-independent object proposals(类别无关物体建议)。因为R-CNN对特定区域算法是不关心的,所以作者采用了选择性搜索以方便和之前的工作进行可控的比较。

https://www.cnblogs.com/zyly/p/9259392.html:选择性搜索的解读。

feature extraction

作者使用krizhevsky等人所描述的CNN的一个Caffe实现版本对每个推荐区域抽取了一个4096维度的特征向量,把一个输入为227*227大小的图片,通过五个卷积层和两个全连接层进行前向传播,最终得到了一个4096维的特征向量。

为了计算region proposal的特征,首先需要对图像数据进行转换,让它符合CNNs的输入(架构中的CNNs只能接受227*227大小的图像)。作者使用了最简单的一种变换,无论候选区域是什么尺寸和宽高比,都把候选框变形成想要的尺寸。具体的是在变形之前,他们在候选框的周围加上了16的padding,再进行各向异性缩放。这种形变使得mAP提高了3到5个百分点。

2.2 Test-time detection

在测试阶段,作者在测试图像上使用了选择性搜索(selective search)抽去了2000个推荐区域,然后编写每一个推荐区域,再通过CNN前向传播计算出特征。然后使用对每个类别训练出的SVM给整个特征向量中的每个类别打分。再给出一张图像中所有的打分区域,使用NMS(非极大值抑制)(每个类别都是独立进行的),排除掉一些高分区域的IoU大于阈值的候选框。

Run-time analysis

有两个特性让检测变得很高效。首先,所有的CNN参数都是跨类别共享的。其次,通过CNN计算的特征向量相比其他通用方法(比如 spatial pyramids with bag-of-visual-word encodings  带有视觉词袋编码的空间金字塔)相比,维度是很低的。

这种共享的结果就是计算推荐区域特征的耗时可以分摊到所有类别的头上。唯一的和具体类别有关的计算是特征向量和SVM权重和点积,以及NMS。实践中,所有的点积都可以批量化成一个单独矩阵间运算。特征矩阵的典型大小是20004096,SVM权重的矩阵是4096N,其中N是类别的数量。

分析表明R-CNN可以扩展到上千个类别,而不需要借用近似技术(比如hashing)。即使有10万个类别,矩阵乘法在现代多核CPU上只需要10s而已。但是这种高效不仅仅是因为使用了区域建议和共享特征。由于较高纬度的特征,UVX系统存储100K linear predictors需要134G的内存,而作者只需要1.5GB。

2.3 Training

Supervised pre-training

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

Domain-specific fine-tuning(特定领域的参数调优)

为了让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。另外作者倾向于采样正例窗口,因为和背景相比,他们很稀少。

object category calssifiers(目标种类分类器)

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

Tips:IoU<0.3,被作为负例,ground-truth是正例,其余的全部丢弃。

一旦特征提取出来,并应用标签数据,我们优化了每个类的线性SVM。由于训练数据太大,难以装进内存,我们选择了标注的hard negative mining method,难负例挖掘算法收敛很快,实践中只需要在所有图像上经过一轮训练,mAP就可以基本停止增加了。

hard negative mining method:难负例挖掘算法,用途就是正负例样本数量不均衡,而负例分散代表性又不够的问题,hard negative 就是每次把顽固的棘手的错误送回去再训练,直到成绩不再提升为止,这一过程就叫做‘hard negative mining’首先是begative,负样本,其次是hard,说明是困难样本,也就是针对负样本分类的时候loss比较大(label和prediction相差较大)的样本,也可以说是容易将负样本看成正样本的那些样本,比如roi里没有物体,全是背景,这时候分类器很容易正确分类成背景,这是easy negative;如果roi里有二分之一个物体,标签仍然是负样本,这时候分类器就容易把他看成正样本,这就是hard negative。 hard negative mining就是多找一些hard negative加入负样本集进行训练,这样会比easy negative组成的负样本集效果更好。主要体现在虚警率更低一些(也就是false positive少)

在补充材料中,作者说明了为什么微调与SVM训练中正例和负例的定义不同。他们还会讨论为什么必须训练检测分类器,而不是简单地使用经过微调的CNN的最后一层(FC8)的输出。

fine-tuning阶段是由于CNN对小样本容易过拟合,需要大量训练数据,所以对IoU限制宽松:IoU>0.5的建议框为正样本,否则为负样本;SVM这种机制是由于它适用于小样本训练,所以对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

又提到了为什么单独训练一个SVM而不是直接用softmax,作者提到,刚开始时只是用了ImageNet与训练了CNN,兵勇提取的特征训练了SVM,此时用正负样本标记方法就是前面所述的0.3,后来刚开始使用fine-tuning时,也是用了这个方法,但是发现结果很差,于是通过调试选择0.5这个方法,作者认为这样可以加大样本的数量,从而避免过拟合。然而IoU大于0.5就作为正样本会导致网络定位准确度下降,故使用了SVM做检测,全部使用ground-truth严格不作为正副本,且使用非正样本,且IoU大于0.3的“hard negatives”,提高了定位的准确度。

  1. Visualization, ablation,and modes of error

3.1 Visualizing learned features

直接可视化第一层filters非常容易理解,第一层主要捕获的第方向性边缘和对比色。难以理解的是后面的层,Zeiler and Fgrgus踢出了一种可视化效果很好的反卷积办法。作者则使用了一种简单的非参数化方法,直接展示了网络学习到的东西。

这个想法是单一输出网络中一个特定单元(特征),然后把它当做一个正确类别的物体检测器来使用,方法是这样的,先计算所有抽取出来的建议区域(大约1000万),计算每个区域所导致的对应单元的激活值,然后按激活值对这些区域进行排序,然后进行最大值抑制,最后展示分值最高的若干区域。这个方法让被选中的单元在遇到它想激活的输入时“自己说话”。我们避免平均化是为了看到不同的视觉模型和深入观察单元计算出来的不变性。

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

图3中的每一行显示了对于一个pool5单元的最高16个激活区域情况,这个实力来自于VOC2007上调优的CNN,这里只展示了256个单元中的6个。第二行,有一个单元看到狗和斑点的时候就会激活,第三行对应红斑点,还有人脸,当然还有一些抽象的模式,比如文字和带窗口的三角结构。这个网络似乎学到了一些类别调优相关的特征,这些特征都是形状,纹理,颜色和材质特性的分布式表示,而后续的FC6层则对这些丰富的特征建立大量的组合来表达各种不同的事物。

3.2 ablation sudies(消融研究)

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

没有调优的各层性能

为了理解那一层对于检测的性能十分重要,作者分析了CNN最后三层的每一层在VOC2007上面的结果。Pool5在3.1中做过简短的表述。最后两层统一总结一下。

fc6是一个与pool5连接的全连接层。为了计算特征,它和pool5的feature map(reshape成一个9216维度的向量)做了一个4096*9216的矩阵乘法,并添加量一个bias向量,中间的向量是逐个组件的半波整流(component wise half wave rectified)(ReLU)

fc7是网络的最后一层,跟fc6之间通过一个4096*4096的矩阵相乘。也是添加了bias向量和应用了ReLU函数

先来看看没有调优的CNN在PASCAL 上的表现,没有调优是指所在的CNN参数就是在ILSVRC 2012上训练后的状态。分析每一层的性能显示来自于fc7的特征泛化能力不如fc6的特征。这意味着29%的CNN参数,也就是 1680万的参数可以移除掉,而且不影响mAP。更多的惊喜是即使同时移除fc6和fc7,仅仅使用pool5的特征,只使用CNN参数的6%也能有非常好的结果。可见CNN的主要表达力来自于卷积层,而不是全连接层。这个发现提醒我们也许可以在计算一个任意尺寸的图片的稠密特征图(dense feature map)时仅仅使用CNN的卷积层。这种表示可以直接在 pool5 的特征上进行滑动窗口检测的实验。

调优后的各层性能

现在看看调优后在VOC2007上的结果表现,提升是非常明显的,mAP提升了8个百分点,达到了54.2%。fc6和fc7的提升明显优于pool5,说明pool5从ImageNet学习的特征通用性非常强,在它之上层的大部分提升主要是在学习领域相关的非线性分类器。

对比最近的特征学习方法

相当少的特征学习方法应用于VOC数据集。作者找到的两个最近的方法都是基于固定探测模型。为了参照的需要,我们也将基于基本HOG的DFM方法的结果加入比较。

第一个DPM的特征学习方法,DPM ST将HOG中加入略图表征的概率直方图。直观的,一个略图表征概率通过一个被训练出来的分类35*35像素路径为一个150略图表征的随机森林方法计算。

第二个方法,DPM HSC,将HOG特征替换成一个稀疏编码的直方图。为了计算HSC,在每个像素上使用一个学习到的100个7*7像素(灰度空间)原子求解稀疏编码激活,由此产生的激活以三种方式(全波和半波)整流,空间池化,L2标准化,然后进行幂运算。

所有的RCNN变种算法都要强于这三个 DPM 方法(表2,8~10行),包括两种特征学习的方法与最新版本的 DPM方法比较,我们的mAP要多大约20个百分点,61%的相对提升。略图表征与HOG相结合的方法比单纯HOG的性能高出2.5%,而HSC的方法相对于HOG提升4个百分点(当内在的与他们自己的DPM基准比较,全都是用的非公共 DPM执行,这低于开源版本)。这些方法分别达到了 29.1%和34.3%。

3.4 Bounding box回归

基于错误分析,我们使用了一种简单的方法减少定位误差,受到 DPM[17]中使用的约束框回归训练启发,我们训练了一个线性回归模型在给定一个选择区域的 pool5特征时去预测了一个新的检测窗口。

  1. 语义分割

区域分类是语义分割的标准技术,这使得作者很容易将R-CNN 应用到PASCAL VOC 分割任务的挑战。为了和当前主流的语义分割系统(称为O2P,second-order piiling)做对比,作者使用了一个开源的框架。O2P使用CPMC针对每张图片产生了150个区域建议,并预测每个区域的品质,对于每个类别,进行支撑向量回归(support vector regression,SVR)。他们的方法很高效,主要得益于CPMC区域的品质和多特征类型的强大二阶池化(second -sencond pooling,SIFT和LBP的增强变种)。作者也注意到Farabet等人将CNN用作多尺度逐像素分类器,在几个高密度场景标注数据集(不包括PASCAL)上取得了不错的成绩。

我们学习Haeiharan等人提供的额外标注信息补充到PASCAL分割训练集中。设计选择和超参数都在 VOC2011验证集上进行交叉验证。最后的测试结果只执行了一次。

用于分割的CNN特征

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

在VOC 2011 上的结果

表3显示了与O2P相比较的VOC 2011验证集的结果。在每个特征计算策略中,FC6总是优于FC7,下面就针对FC6进行讨论,fg策略略优于full,表明掩蔽区域形状提供了更强的信号,匹配我们的直觉。然而,full+fg 的平均精度为 47.9%,比 fg优4.2%(也稍优于O2P),这表明即使提供了FG特征,由full特征提供的上下文也是有很多信息。值得注意的是,训练20个SVR,在我们的full+fg 特征在单核上需要1个小时,而在O2P特征则需要10个小时。

在表4中,作者给出了 VOC 2011测试集上的结果。比较我们的最佳执行方法(full + fg),对抗两个强大的 baselines。作者的方法在 21 个类别中的 11 个达到最高的分割精度,最高的总体分割精度为 47.9%,平均跨类别(但可能与O2P结果在任何合理的误差范围内)。通过微调可能会取得更好的成绩。

  1. 总结

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

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值