论文分享:深度神经网络应用到目标检测的开山之作----R-CNN

论文地址:

https://arxiv.org/abs/1311.2524v5

本文主要参考了B站UP主-科科带你学-目标检测之R-CNN论文精讲,RCNN。对其中所讲内容进行总结,个人认为UP主讲的十分详细,通俗易懂,有兴趣的小伙伴可以去了解一下。视频链接在下方。

https://www.bilibili.com/video/BV1CZ4y1a7NP/?spm_id_from=333.999.0.0&vd_source=cd3ccc047f278feeabe5c1685663d5d6

简介: 该论文是Ross Girshick 在 2014 年发表的一篇具有开创性意义的论文,该方法首次将深度卷积神经网络(CNN)应用于目标检测任务,极大地推动了计算机视觉领域的发展。

摘要

首先介绍了目标检测在经典PASCAL VOC数据集的传统方法,表现最好的方法是复杂的集成系统,它通常将多个低级图像特征与高级上下文相结合,然而现在这种传统思路发展受限,然后提出本文的方法。相对于之前在VOC 2012上的最佳结果,该算法将平均精度(mAP)提高了30%以上,达到53.3%的mAP。

本文方法有两个关键点:1、用CNN替换掉传统的体征提取方法(SIFI、HOG),应用于自下而上的区域建议,以定位和分割对象 2、由于标注数据稀缺,利用迁移学习的办法,对辅助任务进行监督预训练,然后进行特定领域的微调。与OverFeat方法对比,因为OverFeat也是基于CNN,结果显示,R-CNN的性能大大优于OverFeat。

图片解析:给定一张图片,可以将其分为许多区域,然后再经过特征提取,将提取到的特征经过机器学习算法(如SVM)进行分类或回归。而本文做的就是将CNN替换到传统的提取方法中去。

1.引言

第一段介绍之前的目标检测方法,大部分都是基于SIFT和HOG的使用,使得目标检测发展受限。

第二段利用灵长类视觉通路来解释,SIFT、HOG一般只提取到低层的特征,也就是前几层神经元所做的事情,后面更高级的特征无法提取到。

 

后面开始介绍卷积神经网络(CNN)的发展历程。

最早由Fukushima提出的“新认知机”是一种生物启发的模式识别模型,但缺乏监督学习的训练算法。LeCun等人通过反向传播和随机梯度下降训练CNN,取得了成功。虽然CNN在90年代得到了广泛应用,但随后被支持向量机取代。

2012年,Krizhevsky等人通过在ImageNet大规模视觉识别挑战赛上的成功,再次激发了对CNN的兴趣。他们通过一些创新(如ReLU和dropout)提高了图像分类精度。

由CNN在ImageNet上图像分类任务取得的成功,联想是否也能将CNN运用到目标检测任务中。

但是有两个问题需要解决:1、如何用深度网络定位目标 2、如何只用少量带注释的检测数据训练高容量模型。

因为在图像分类中,CNN只需要判断图像的类别,而目标检测不仅要确定各个目标的位置,还需要判别它们所属类别。

在图像分类的数据集ImageNet中包含1000个类别的大量数据,而目标识别的数据集PASCAL VOC只有20个类的少量数据。

如何解决定位呢:1、将定位定义为回归问题,直接通过CNN来预测定位,但是效果不好 2、使用一个滑动窗探测器(浅层CNN,只有两层卷积)但是一般检测人脸或行人比较好(用于受限的对象类别),且窗口比例固定,而我们方法有5层卷积 ,需要提取到不同大小的目标 3、使用区域识别(效果很好),该方法在目标检测[39]和语义分割[5]方面都取得了成功。

在测试时,我们的方法为输入图像生成大约2000个与类别无关的区域建议(候选区域),使用CNN从每个建议中提取固定长度的特征向量,然后使用特定类别的线性支持向量机对每个区域进行分类。由于CNN接收图像大小是固定的, 我们使用一种简单的技术(仿射图像扭曲)从每个区域建议中计算固定大小的CNN输入,而不考虑区域的形状。 图1概述了我们的方法,并突出显示了一些结果。 

图1 

 如何解决标注数据量太少问题呢?传统解决方案是使用无监督预训练,然后进行监督微调。 本文的思路则是,先在大辅助数据集(ILSVRC)上进行监督预训练,然后在小数据集(PASCAL)上进行特定领域的微调。也就是用迁移学习的方法来解决数据量不够的问题。

最后三段首先说我们的方法即R-CNN效率很高(第二段会说明具体原因),其次,分析R-CNN不足,提出改进方法,即R-CNN BB,最后说明R-CNN不仅在目标检测上取得很好的效果,在语义分割上也适用。

2.基于R-CNN的目标检测

我们的目标检测系统由三个模块组成。 第一个生成与类别无关的区域建议(候选区域)。 这些建议定义了检测器可用的候选检测集。 第二个模块是一个大型卷积神经网络,从每个区域提取固定长度的特征向量。 第三个模块是一组特定于类的线性支持向量机。 在本节中,我们介绍了每个模块的设计决策,描述了它们的测试时间使用情况,详细说明了它们的参数是如何学习的,并显示了PASCAL VOC 2010-12和ILSVRC2013上的检测结果。

2.1. 模块设计

区域建议:目前有很多生成区域建议的方法,包括:对象[1],选择性搜索[39],类别无关的对象建议[14],约束参数最小切割(CPMC)[5],多尺度组合分组[3]等,虽然R-CNN对特定区域提议方法不可知,但我们使用选择性搜索来实现。

特征提取:我们使用AlexNet来实现,从每个区域提议中提取一个4096维的特征向量。 特征是通过前向传播均值减去227×227 RGB图像通过五个卷积层和两个完全连接层来计算的。 读者可以参考[24,25]了解更多网络架构细节。

为了计算区域建议的特征,我们必须首先将该区域中的图像数据转换为与CNN兼容的形式(其架构需要固定的227 × 227像素大小的输入)。 在任意形状区域的许多可能的变换中,我们选择了最简单的。 无论候选区域的大小或宽高比如何,我们都将其周围紧密边界框中的所有像素扭曲到所需的大小。 在扭曲之前,我们扩大紧边界框,以便在扭曲的大小下,在原始框周围正好有p个被扭曲的图像上下文像素(我们使用p = 16,为什么是16呢,因为在5层卷积后,图像被缩小了32倍)。 图2显示了扭曲训练区域的随机抽样。 扭曲的替代方法在附录A中讨论。

我们只需要用 AlexNet(5个卷积层,3个全连接层)来提取特征,由于AlexNet是在图像分类中,所以最后一个全连接层会输出1000个类别,我们不需要,就可以去掉,即5个卷积层,2个全连接层。

图2

下面我们来看一下附录A,图像究竟是如何扭曲的呢?

 

A:为原始图像,B,C,D分别为三种不同的方法。

B:区域包含上下文信息,按比例缩放,由于宽度不够, 填充一下。

C:区域不包含上下文信息,按比例缩放,由于宽度不够, 填充一下。

D:区域不包含上下文信息,直接拉伸。

对于这些变换中的每一种,我们还考虑在原始物体建议周围包含额外的图像上下文。初步实验表明,带有16像素上下文填充的扭曲方法效果最好。

2.2测试时间检测

在测试时,我们对测试图像进行选择性搜索以提取大约2000个区域建议(我们在所有实验中都使用选择性搜索的“快速模式”)。 我们扭曲每个提议,并通过CNN向前传播,以计算特征。 然后,对于每个类,我们使用为该类训练的支持向量机对每个提取的特征向量进行评分(用于分类)。 给定图像中所有得分区域,我们应用贪婪非最大抑制(独立于每个类),如果该区域与大于学习阈值的较高得分选择区域有交集-过并(IoU)重叠,则拒绝该区域。

运行时间分析

两个特性使检测变得高效。 首先,所有CNN参数在所有类别中都是共享的(对于候选区域,我们不需要管它是什么类别,只需要把它丢给CNN就行)。 第二,由CNN计算的特征向量它们是低维的(维度高运算量也就大了),只有4096维。

这种共享的结果是,计算区域提案和特征所花费的时间(在GPU上为每张图像13秒,CPU上为每张图像53秒)在所有类别之间得到了分摊(也就是对于同一张测试图像,无论最终要识别的类别有多少,候选区域和特征计算只需进行一次。)。唯一与类别相关的计算是特征与SVM权重之间的点积以及非极大值抑制。在实践中,针对一张图像的所有点积被批量处理为一个单一的矩阵乘法。特征矩阵通常为2000×4096,SVM权重矩阵为4096×N,其中N是类别的数量。

 

当我们提取到特征以后,将会丢给SVM,让它进行分类。主要是通过wx+b来判断,那么一共有20个类,我们需要不需要每个类都进行一次计算呢,实际上,并不需要。我们可以将一个候选区域写成上图形式1,判断这个候选区域属不属于其中一个类,。则20个类,2000个候选区域可以写成形式2。这样输入一张图片,生成2000个候选区,经过体征提取,一次计算就可以判断出所有类别了。而且后面类的数量可以扩展。

R-CNN在处理大量目标类别时的高效性,能够在现代多核CPU上快速完成矩阵乘法,而不需要近似方法。相比之下,其他系统如UVA由于高维特征导致速度慢和内存占用大。与Dean等人的工作相比,R-CNN在处理1万个类别时,运行时间更短且保持了更高的mAP。

2.3训练

监督预训练:在ILSVRC2012数据集上进行的CNN有监督预训练,使用了图像级注释而非边界框标签,得到一个分类模型,为了更好的能提取到VOC中图片特征,还需要进行特定领域的微调。尽管该CNN的性能与Krizhevsky等人相近,但在top-1错误率上略高2.2个百分点,主要是由于训练过程中的一些简化。

特定领域的微调:为了将我们的CNN适应新任务(检测)和新领域(扭曲的候选区域),我们继续使用随机梯度下降(SGD)训练CNN参数,仅使用扭曲的候选区域。除了将CNN的ImageNet特定的1000类分类层替换为随机初始化的(N + 1)类分类层(其中N是目标类别的数量,+1代表背景),CNN架构保持不变。对于VOC,N = 20,对于ILSVRC2013,N = 200。让模型继续在VOC上训练。

训练出分类网络需要大量的分类数据,而VOC中给定的数据是目标的类别以及目标的边界框,如何在VOC上训练出分类器呢。一种方法就是直接拿候选区域来进行训练,但是由于有2000个候选区域,且候选区域有重叠,这时怎么办呢。

我们将与真实框(目标的边界框)的交并比(IoU)≥ 0.5的所有候选区域视为该框类别的正样本,其余视为负样本,这样训练中背景也能利用上了。我们以0.001的学习率开始SGD(为预训练初始学习率的1/10),这允许微调在不破坏初始化的情况下取得进展。在每次SGD迭代中,我们均匀抽样32个正样本(覆盖所有类别)和96个背景窗口(负样本)保证正负样本差异不大,以构建大小为128的迷你批次。由于正窗口相对于背景窗口极为稀少,我们偏向于采样正窗口。

对象类别分类器:训练SVM模型也需要正负样本,而在特定领域的微调中IoU≥ 0.5,可以很好的区分出正负样本,所以在训练SVM模型中也可以使用,但是我们把正样本简单地定义为每个类的真实边界框。IoU\leq 0.3,作为负样本。由于负样本的数量远远多于正样本,所以我们采用难例挖掘(hard negative mining)的方法来提取负样本。详见附录B

附录B:有两个设计选择值得进一步讨论。 第一个问题是:为什么在微调CNN和训练目标检测支持向量机时,正负样本的定义不同? 

先从实验的角度来解释,因为从刚开始做实验,只在ImageNet预训练CNN,并使用CNN计算的特征来训练SVM,因此在那个时间点上没有考虑微调。 在该设置中,我们发现在SVM训练中,用0.3效果是最好的。当我们开始使用微调时,我们最初使用与SVM训练相同的正负例定义。 然而,我们发现结果要差得多。 后来通过实验才发现特定领域的微调中IoU阈值设置的最佳值。

再从理论的角度来解释,我们的假设是,这种对正负样本定义的差异并不是根本重要的,而是由于微调数据的限制所导致。我们当前的方案引入了许多“抖动”样本(那些与真实标签重叠在0.5到1之间,但不是实际目标边框),这大约使正样本的数量增加了30倍。我们推测,这个庞大的样本集在微调整个网络时是必要的,以避免过拟合。然而,我们也注意到,使用这些抖动样本可能并非最佳选择,因为网络并没有针对精确定位进行微调。

这导致了第二个问题:为什么在微调(微调后就已经训练好分类模型了)后还要训练SVM?直接应用微调网络的最后一层,即一个21类的softmax回归分类器,作为目标检测器会更简单。我们尝试了这种方法,发现VOC 2007的性能从54.2%的mAP下降到了50.9%。这种性能下降可能是由于多个因素的组合,包括微调中使用的正样本定义未强调精确定位,以及softmax分类器是在随机抽样的负样本上训练的,而不是用于SVM训练的“难负样本”子集。

表1 

 

图3 

表1、图3 总结了R-CNN在PASCAL VOC和ILSVRC2013数据集上的表现。在VOC数据集中,通过微调CNN和优化SVM,R-CNN显著提高了检测性能,mAP从35.1%提升至53.7%。在ILSVRC2013中,R-CNN的mAP为31.4%,远超其他参赛作品。

3. 可视化,消融和误差模式

3.1. 可视化学习到的特征

神经网络第一层提取到的特征,可以直接可视化且易于理解。它们捕捉了图像边缘和颜色信息。理解后续层则更具挑战性。Zeiler和Fergus在其研究中提出了一种视觉上吸引人的反卷积方法。我们提出了一种简单(且互补)的非参数方法,直接展示网络学到的内容。

我们可视化了来自pool5层的单元,pool5是网络第五个也是最后一个卷积层的最大池化输出。pool5特征图的维度为6 × 6 × 256 = 9216维。

256代表通道,我们现在把第一个通道的特征图取出来,也就是6*6的特征图,每个小格都会有值,例如左上角第一个小格,那么每一个候选区域都会有第一通道左上角的这个值,那在整个数据集上也就是会有约1000万个这样的值,我们把这些值排序,挑出几个值最大的候选区域对应的图片,你会发现所有图像都是人的图片,如果你选择的是其他小格,如右下角的,也会是人的图片,不过就是白色边框的位置会有所变化,如下图所示。如果你挑选的不是第一通道,而是第二通道,则所有图片则是黑色点状区域的图片。

在论文的图12中又展示了更多的例子

其中,(3,3,1)中3,3代表取的小格值,1代表通道 。

3.2消融实验

为了了解哪些层对检测性能至关重要,我们分析了CNN最后三层的VOC 2007数据集的结果。分别对这三层起了名字,pool5,fc6, fc7。此外也对比了使用微调和不使用微调对这三层提取效果的影响。

实验结果如下: 前三个不使用微调,中间三个使用微调,R-CNN BB是经过改进后使用微调,由结果说明,微调是很有必要的,而且微调更多影响的是全连接层的提取效果。最后三个是传统方法。

3.3. 网络体系结构

对比了不同CNN结构对提取结果的影响。 在表3中,我们展示了使用最近提出的16层深度网络进行VOC 2007测试的结果。 该网络由13层3 × 3卷积核组成,其中5个最大池化层穿插,顶部有3个完全连接的层。 我们把VGG网络称为牛津(由牛津提出)的“O-Net”,把AlexNet称为多伦多的“T-Net”。

 3.4. 检测误差分析

我们使用了Hoiem等人[23]的优秀检测分析工具,以揭示我们方法的误差模式,了解微调如何改变它们,并将我们的误差类型与DPM进行比较。 分析工具的完整总结超出了本文的范围,我们鼓励读者参考[23]来理解一些更精细的细节(例如“规范化AP”)。 由于分析最好是在相关图的上下文中进行,因此我们在图5和图6的标题中给出了讨论。

图中上面一行代表动物这一类别,下面一行代表家具这一类别。 

纵轴表示不同误检类型(Loc、Sim、Oth、BG)的百分比分布,横轴则表示误检总数。

FP类型的含义

Loc:定位错误(模型检测到了正确的对象类别,但位置不准确)。

Sim:相似物体错误(模型将一个物体识别为外观相似的其他类别)。

Oth:其他类别错误(识别的类别与目标完全无关)。

BG:背景错误(模型将背景区域误识别为物体)。

R-CNN fc6的子图(左侧)显示了最初的R-CNN模型在动物和家具上的误检分布,定位错误(Loc)占了较大比例,随着总误检数量增加,背景错误(BG)逐渐增加。

R-CNN FT fc7的子图(中间)展示了经过微调(Fine-Tuning)后的模型表现。误检分布有所改善,但仍然有较多的定位错误(Loc)和背景错误(BG)。

R-CNN FT fc7 BB的子图(右侧)则引入了边界框回归(BB),进一步降低了定位错误(Loc)的比例,增加了对背景的正确区分。

 

图6展示了模型对不同目标特征(遮挡、截断、尺寸、长宽比、视角、部位可见性)的敏感度分析。每个子图中显示了每个特征的最高和最低性能子集的平均归一化AP(平均精度)。具体来看:

子图1(R-CNN fc6)

模型在不同目标特征上的敏感度较高,例如在“大小”和“长宽比”上的AP较高,分别为0.720和0.606。然而在“截断”(trn)和“视角”(view)上表现较差。

子图2(R-CNN FT fc7)

通过对R-CNN进行微调(Fine-Tuning),在某些特征(如“遮挡”occ 和“尺寸”size)上有显著提升,AP分别提升到0.634和0.766,但对于“部位可见性”part的表现依旧较差。

子图3(R-CNN FT fc7 BB)

引入边界框回归(BB)后,整体性能进一步提高,尤其是在“遮挡”和“视角”上,分别为0.786和0.779,表现优于之前的模型。

子图4(DPM voc-release5)

传统的DPM模型在所有特征上表现较差,特别是在“遮挡”和“视角”上AP低至0.297和0.126,表现远不如经过微调和边界框回归的R-CNN模型。

3.5边界框回归

在误差分析的基础上,实现了一种简单的减小定位误差的方法。 受DPM中使用的边界框回归[17]的启发,我们训练了一个线性回归模型,在给定pool5特征的情况下,为选择性搜索区域建议预测一个新的检测窗口。 表1、表2和图5的结果表明,这种简单的方法修复了大量的错误定位检测,将mAP提高了3到4个点。

如上图所示,我们检测到的为红框,但是真实目标所在的框为绿框,所以我们就希望将红框移动到绿框的位置上去。P代表红框,G代表绿框,x, y代表框的中心点坐标,w, h代表框的宽高。要实现P-->G,就需要一定量的偏移,记为\Delta x,\Delta y,移动过去之后,需要改变宽高到真实框(绿框)大小,改变量记为 \Delta w,\Delta h。通过SVM来预测这些变量。d_{x}(P)是归一化后的偏移量。

论文中所给的公式是这样的,为什么要这样写呢,因为 \Delta w,\Delta h有可能预测为负值,所以写成d_{w}(P)后,在取指数就可以避免。下图来解释d_{x}(P).

如图所示,其实黄色框才是我们预测后的位置,我们想要黄色框尽可能的接近绿色框,只有尽可能的来优化损失函数,左右两幅图虽然大小不一样,但是二者的偏移程度是一样的,所以在求两者的损失函数值也是一样的。

论文中给定的损失函数定义。每个函数 d_\ast(P)(其中 \ast 是 x, y, h, w 中的一个)被建模为候选区域 P 的 pool5 特征的线性函数,记作 \phi_5(P)-->输入值。t_\ast为真实值,(假设 \phi_5(P) 依赖于图像数据。)因此,我们有 d_\ast(P) = w_\ast^T \phi_5(P)-->预测值,其中w_\ast 是可学习的模型参数向量。我们通过优化正则化的最小二乘目标(岭回归)来学习 w_\ast 。 

3.6. 定性结果

对ILSVRC2013的定性检测结果如图8和图9所示。 每张图像从val2集合中随机采样,并显示了精度大于0.5的所有检测器的所有检测结果。 请注意,这些都不是精心设计的,并给出了实际运行中的探测器的真实印象。 更多的定性结果显示在图10和图11中,但是这些都是经过整理的。 我们选择每张图片是因为它包含了有趣的、令人惊讶的或有趣的结果。 这里也显示了精度大于0.5的所有检测结果。

4. ILSVRC2013检测数据集

由于和在PASCAL VOC数据集流程一样,便不再过多叙述。

5. 语义分割

区域分类是一种用于语义分割的标准技术,这使我们能够轻松将 R-CNN 应用于 PASCAL VOC 分割挑战。为了便于与当前领先的语义分割系统(称为 O2P,即“二阶池化”)进行直接比较,研究者在 O2P 的开源框架内工作。O2P 使用 CPMC 生成每张图像的 150 个区域提议,然后使用支持向量回归 (SVR) 预测每个类别的每个区域的质量。O2P 方法的高性能归功于 CPMC 区域的质量和对多种特征类型(如 SIFT 和 LBP 的增强变体)的强大二阶池化。此外,Farabet 等人最近在多个密集场景标注数据集上展示了使用 CNN 作为多尺度逐像素分类器的良好效果。

他们采用了扩展的 PASCAL 分割训练集,并测试了三种在 CPMC 区域上计算特征的策略:1. 忽略区域形状的完整特征(full);2. 仅在区域前景掩码上计算的特征(fg);3. 将完整特征和前景特征结合(full+fg)。实验结果表明,full+fg 方法的表现最好,表明包含背景的完整特征提供了有价值的上下文信息。表格中显示他们的最佳结果是 47.9% 的平均准确率,这在多类别上超过了 O2P。

 

6.结论

近年来,目标检测性能停滞不前。 表现最好的系统是将多个低级图像特征与来自目标检测器和场景分类器的高级上下文相结合的复杂集成系统。 本文提出了一种简单且可扩展的目标检测算法,该算法比PASCAL VOC 2012上的最佳结果相对提高了30%。 我们通过两点洞察实现了这一业绩。 第一种是将大容量卷积神经网络应用于自底向上的区域建议,以实现目标的定位和分割。 第二个是在标记训练数据稀缺的情况下训练大型cnn的范例。 我们表明,对于具有丰富数据的辅助任务(图像分类),通过监督对网络进行预训练,然后针对数据稀缺的目标任务(检测)对网络进行微调,是非常有效的。 我们推测,“有监督的预训练/特定领域的微调”范式将对各种数据稀缺的视觉问题非常有效。 我们最后指出,通过使用计算机视觉和深度学习的经典工具(自下而上的区域建议和卷积神经网络)的组合,我们取得了这些结果,这一点很重要。 这两者并不是对立的科学探索路线,而是自然而不可避免的合作伙伴。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值