R-CNN算法(论文部分翻译+个人总结)

ぃ、小莉子 提交于 2020-02-03 23:54:24

论文题目是《Rich feature hierarchies for accurate object detection and semantic segmentation》
这篇论文做出的贡献有两个方面:
(1)可以将高容量的卷积神经网络应用在自底向上的候选区域,以实现对目标的定位和分割。
(2)当标注的训练数据稀缺时,在大型辅助数据集(ILSVRC)上进行有监督的预训练,然后在小型数据集(PASCAL)上进行特定领域的微调,可以有效地训练大型CNN。


背景知识

在过去十年中(本篇论文发布于2014年),各种视觉识别任务主要使用SIFT和HOG。但是在PASCAL VOC上进行目标检测的性能在2010-2012间进展缓慢。Fukushima的“neocognitron”是一种受生物学启发的模式识别模型,具有分层和平移不变性等特点,这项成果算是一种早期的尝试。但是neocognitron缺少有监督的训练算法。LeCun在Rumelhart等人文章的基础上表明,通过反向传播的随机梯度下降对于训练CNN是有效的,这类模型扩展了neocognitron。
CNN在1990年代曾被大量使用,但随后随着SVM的兴起而逐渐过时。在2012年,Krizhevsky等人通过在ImageNet大规模视觉识别挑战赛(ILSVRC)上展示出更高的图像分类准确性,重新引起了人们对CNN的兴趣。他们的成功来自在120万张带标签图像上训练大型CNN,以及对LeCun CNN的一些变形。


R-CNN的实现过程

首先,为输入图像生成大约2000个类别独立的候选区域;
然后,用CNN从每个区域中提取出固定长度的特征向量;
最后,用特定类别的SVM对每个区域进行分类。
在这里插入图片描述
上图是对目标检测系统的一个概述。首先输入一个图像,然后提取大约2000个自底向上的候选区域,然后用一个大型的CNN为每个候选区域计算特征,最后用特定分类的线性SVM对这些区域进行分类。


R-CNN的具体设计

本篇论文的目标检测系统包括三个模块。 第一个生成类别独立的候选区域。 这些候选区域组成了检测器的候选检测集。 第二个模块是一个大型CNN,可从每个区域提取固定长度的特征向量。 第三个模块是一组特定类别的线性SVM。 接下来将对每个模块的设计进行介绍,包括说明其在测试时的用法,以及如何学习其参数。

1.候选区域

有许多文章提出生成类别独立的候选区域的方法,比如:
objectness
selective search
category-independent object proposals
constrained parametric min-cuts (CPMC)
multi-scale combinatorial grouping
Cires¸an
(将CNN应用于规则间隔的方形作物来检测有丝分裂细胞,这是候选区域的特例)
R-CNN采用的方法是selective search

2.特征提取

作者从每个候选区域中提取出一个4096维的特征向量,采用的网络结构是AlexNet,由Caffe进行开发。给出一个227x227的减去均值的RGB图像,向前传播经过五个卷积层和两个全连接层后来计算特征。
为了计算候选区域的特征,首先将该区域中的图像数据转换为与CNN兼容的形式(其架构要求输入的图像固定为227×227像素大小)。候选区域的形状可以是任意的,它们的可能变换也有很多种,这里选择最简单的那种——无视候选区域的大小和长宽比,直接将其变形到所需要的大小。在变形之前,先在候选框周围添加p个像素,这里p=16。下图显示了对变形后训练区域的随机采样
在这里插入图片描述

3.实现目标检测的方法

在测试时,通过selective search在测试图像上提取大约2000个候选区域,对每个区域进行变形后,通过CNN向前传播来计算特征。然后为每个类别训练一个SVM,用这些SVM对这些提取出来的特征向量进行打分。对于一个图像的所有候选区域的打分,用一个叫做greedy non-maximum suppression(贪心非极大性抑制)的算法,如果一个区域与一个评分较高的区域的IoU(intersection-over- union)重叠,且该评分较高的区域大于学习阈值,则拒绝该区域。

4.R-CNN的检测效率

在R-CNN中,两个属性会使检测效率更高:一是所有类别的CNN参数都是共享的;二是CNN所计算的特征向量是低维的(4000维)。
共享参数带来的结果是,计算候选区域和特征向量所花费的时间(GPU上每个图象需要13s,CPU上每个图象需要53s)将在所有类别上分摊。唯一特定于类别的计算是特征向量和SVM权重以及非极大性抑制的点积。实际上,将图像的所有点积都批处理为矩阵-矩阵的乘积。特征矩阵通常为2000×4096,而SVM权重矩阵为4096×N,其中N为类别数。
该分析表明,R-CNN可以扩展到数千个对象类,而无需求助于哈希等近似技术。即使有10万个类,在现代多核CPU上产生的矩阵乘法也只需10秒。这种效率不仅仅是使用候选区域和共享参数的结果。当存储100000个线性预测器时,由于特征都是低维向量,因此只需1.5GB的内存。

5.有监督的预训练

在一个大型辅助数据集(ILSVRC2012 classification)对CNN进行有区别的预训练,训练中只使用图像级别的注释(没有bounding-box的标签)。使用开源Caffe CNN库[24]进行预训练。训练结果几乎与AlexNet网络取得的成果相当——在ILSVRC2012分类验证集上获得了最高2.2个百分点的top-1错误率。之所以会产生差异是因为训练过程的简化。

6.特定域的微调(fine-tuning)

为了让预训练后得到的CNN能处理新任务(检测)和新领域(变形的候选窗口),仅使用变形的候选区域继续进行CNN参数的随机梯度下降(SGD)训练。除了用随机初始化的(N + 1)路分类层(其中N是目标类的数量,加上背景的1)代替CNN的特定于ImageNet的1000路分类层之外,CNN的体系结构没有改变。对于VOC,N = 20,对于ILSVRC2013,N =200。将候选区域与一个ground-truth box进行比较,如果IoU重叠度大于0.5,就可以认定这个候选区域为positive,即该候选区域的类别与ground-truth box的类别相同,其余的视为negative,即将该候选区域划分到背景。SGD以0.001的学习速率开始,这允许微调在不破坏初始化的情况下取得进展。在每次SGD迭代中,我们同一对32个正窗口(在所有类中)和96个背景窗口进行采样,最终构建一个大小为128的微型批处理。在采样时更偏向于正窗口,因为它们比背景更加少见。

7.目标类别分类器

让我们考虑训练一个二元分类器来检测汽车。很明显,如果一个图像区域完整包含了这辆车,这个图像区域就为positive,与汽车无关的背景区域就是negative。那么如果一个区域只有部分与这辆车重叠呢?用IoU重叠阈值来解决这个问题,如果一个区域与ground-truth box的IoU值低于预定的值,那么这个区域就为negative。这里的重叠阈值0.3是通过对{0,0.1,…,0.5}进行网格搜索得到的。当然这个阈值的选择也是非常重要的。将其设置为0.5,可使mAP降低5个点。同样,将其设置为0会使mAP降低4个点。
提取特征后为每个类优化一个线性SVM。由于训练数据太大而无法存储在内存中,因此采用standard hard negative mining 方法。hard negative mining收敛的很快,实际上,仅对所有图像进行一次遍历之后,mAP就会停止增加。


R-CNN采用的技术

1.可视化

图像经过第一层过滤器后,可以直接可视化并且易于理解,一般在图像中捕获定向的边缘和突出的颜色。 但对后续层的输出结果进行可视化就很具有挑战性了。 Zeiler和Fergus提出了一种视觉上有吸引力的反卷积方法。 本文提出一种简单(且互补)的非参数方法,该方法直接显示网络学到的知识。
方法是从网络中挑选出特定的单元(特征),然后把它当作一个目标检测器。具体来说就是,在一大批保留候选区域(大约1000万个)上计算这个单元的activation,然后将候选按区域按照计算出的activation从高到低进行排序,并执行非极大性抑制,最后选择分数最高的那个区域。
这里将第五层pool5的输出可视化,pool5的feature map的尺寸为6×6×256 = 9216维。忽略边界效应,每个pool5单元在原始227×227像素的输入中具有195×195像素的接收野。
在这里插入图片描述
上图每行显示了一个pool5单元的前16个activation,在VOC 2007训练中对其进行了微调。总共有256个pool5单元,上图只显示了其中6个。在第二行中,我们看到一个在狗头和点阵列上触发的单元。与第三行相对应的单元是红色斑点检测器。还有用于人脸和更抽象的图案的检测器,例如带有窗口的文本和三角形结构。该网络似乎正在学习一种表示形式,该表示形式将少量的类调整特征与形状,纹理,颜色和材料属性的分布式表示形式结合在一起。

2.消融研究(可以去掉哪些层)

为了了解哪些层对于检测性能至关重要,论文分析了CNN最后三层中每一层在VOC 2007数据集上的结果。

wiout fine-tuning
fc6和pool5构成了全连接层,fc6在计算特征时,将4096×9216的权重矩阵乘以pool5的feature map(被重塑为9216维向量),然后添加一个偏置向量。fc7层是网络的最后一层。它将fc6计算出的特征乘以4096×4096的权重矩阵并类似地添加偏置向量。
在这里插入图片描述
首先来看没有在PASCAL上进行微调的CNN的结果,即所有CNN参数仅在ILSVRC 2012上进行了预训练。从上表可以看出,fc7中特征的最后输出结果比fc6更差。 这意味着可以删除29%的CNN参数(约1,680万)而不会降低mAP。 更令人惊讶的是,即使仅使用CNN参数的6%来计算pool5的特征,同时删除fc7和fc6也会产生很好的结果。 这表明CNN的大部分表示能力来自其卷积层,而不是更大的密集连接层。 这表示在pool5的特征上可以使用滑动窗口检测器(包括DPM)进行实验。

with fine-tuning
接下来看在PASCAL上进行微调的CNN的结果
在这里插入图片描述
微调使mAP增加8.0个百分点至54.2%。 对于fc6和fc7,微调所带来的收益要比pool5大得多,这表明pool5从ImageNet学到的特征是通用的,并且大多数改进是通过在它们之上学习特定域的非线性分类器而获得的。

3.检测错误分析

应用了Hoiem提出的检测分析工具,可以揭示采用的方法的错误模式,了解微调如何更改这些错误模式,并且将错误类型与DPM进行比较。
在这里插入图片描述
上图表示对目标特征的敏感性。每个图都显示了六个不同对象特征(遮挡,截断,边界框区域,纵横比,视点,零件可见性)内最高和最低性能子集的归一化AP的均值。图一没有微调(FT)和边界框回归(BB),图二有FT,图三有FT和BB,图四用了DPM voc-release5方法。总体而言,微调不会降低敏感性(最大值和最小值之间的差),但会显着改善几乎所有特性的最高和最低性能子集。 这表明,微调不仅可以改善纵横比和边界框区域的性能最低的子集,还可以根据对网络输入的变形来推测。 相反,微调可提高所有特征的鲁棒性,包括遮挡,截断,视点和零件可见性

在这里插入图片描述
上图说明排名最高的假阳性(FP)类型的分布。每个FP属于以下4种类型中的1种:Loc-定位不良(与正确分类相比,IoU重叠的检测在0.1到0.5之间或重复); Sim-与相似类别的混淆; Oth-与不同的目标类别混淆; BG-背景。与DPM,错误明显更多是由于定位不良所致,而不是与背景或其他目标类别造成的混淆,这表明CNN特征比HOG具有更大的歧视性。 松散的定位很可能是由于我们使用了自下而上的候选区域,以及从对神经网络进行全图像分类的预训练中学到的位置不变性。 第三列显示了我们的简单的边界框回归方法解决许多定位错误。

4.Bounding-box(边界框)回归

基于错误分析,这里提出一种减少定位错误的方法。受DPM中边界框回归的启发,这里针对给定的selective search候选区域的pool5的特征,训练了一个线性回归模型来预测新的检测窗口。
在这里插入图片描述
上表的结果表明,这种简单的方法可以修复大量的错误定位检测,从而将mAP提高3-4个点。


网络架构对检测性能的影响

本文的大多数结果采用的是AlexNet网络结构。但是,架构的选择对R-CNN的检测性能有很大的影响。下表显示了Simonyan和Zisserman提出的使用16层深度网络在VOC 2007测试集上的结果。该网络具由13层3×3的卷积核组成,其中散布了五个最大池化层,最上面是三个全连接层。这里将OxfordNet称为“ O-Net”;把对于多伦多网络,我们将其基准称为“ T-Net”。
在这里插入图片描述
上表中的结果表明,带有O-Net的R-CNN明显优于带有T-Net的R-CNN,mAP从58.5%增加到66.0%。 但是,在计算时间方面存在很大的缺陷,O-Net的前向传递比T-Net花费大约7倍的时间。


语义分割

区域分类是语义分割的一种标准技术,因此可以轻松地将R-CNN应用于PASCAL VOC分割挑战。在本文中为了与当时的语义分割系统O2P进行比较,在它的开源框架内进行操作。
怎么用R-CNN进行语义分割呢?作者提出了三种策略,这三种策略是为了在CPMC区域上计算特征,它们均始于将区域周围的矩形窗口变形为227×227。第一个策略(full)忽略区域的形状,并直接在变形窗口上计算CNN特征。但是,这些特征忽略了区域的非矩形形状。两个区域可能具有非常相似的边界框,而几乎没有重叠。因此,第二种策略(fg)仅在区域的前景上计算CNN特征。用均值输入替换背景,以便均值减去后背景区域为零。第三种策略(full + fg)简单地将full和fg功能串联起来;实验证明它们之间具有互补性。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!