目标检测(二):RCNN

2020.12.30考完研究生期间的最后一门考试,就开始了毫无节制的寒假生活~颓废到今天已经两个多月了嘎嘎嘎嘎,终于是忍受不了内心的煎熬,准备在开学前十天好好学会习了。
共勉!!!
—————————————————————————————————————————

一、R-CNN简介

R-CNN是由于模型中结合了region proposals和CNN,因此被称为R-CNN:regions with CNN features。那么为什么要进行这种看起来很复杂的组合呢?
在R-CNN出现之前,视觉识别任务通常都是利用 SIFT(尺度不变特征变换)HOG(方向梯度直方图) 完成的,但是这类方法在2010年以后就开始进展缓慢了。然鹅就在此时,ImageNet出现了,它在ILSVRC中的超高图像分类准确性重新引发了人们对CNN的关注,也激发了R-CNN的研究者们试图利用CNN提高视觉识别任务准确度的想法。文中也有提到与基于较为简单的类似HOG的系统相比,CNN能显著提高PASCAL VOC挑战赛中目标检测的性能,而要想达到这一效果,就需要解决两大问题:

  • 通过一个深层网络定位目标;
  • 训练一个仅需要少量带标注的检测数据的高能力模型。

Ross Girshick的主页 可以找到原文、补充材料、源码等。

1 如何进行目标定位?

对于问题一,由于目标检测更加复杂,在一张图像中可能需要定位上百个目标,因此作者考虑了采用CNN中常用的 sliding-window detector,但是这种方法对于CNN而言并不友好,这是因为CNN的较高单元中的卷积层有着很大的接受域( 195 × 195 195\times195 195×195)以及滑动步长( 32 × 32 32\times32 32×32),这使得利用滑动窗口进行精确的定位具有很大的挑战性。所以作者另寻他法,采用了在 recognition using regions 这种范式下的定位。具体做法如下:

  • 首先在测试阶段为输入图像产生大约2000个类别独立的region proposals;
  • 然后利用 affine image warping 从每个region proposal中得到固定大小的CNN的输入;
  • 其次利用CNN为每个proposal提取一个固定长度的特征向量;
  • 最后通过类别特定的线性SVMs对每个region进行分类(有关类别的计算仅包含非常小的矩阵向量乘和非极大值抑制,这使得R-CNN的效率贼高)。

下图给出了这一过程的图示。
1
文中还提到了 边界框回归方法(bounding box regression method),作为有效减少错位定位的一个手段。

2 如何训练标注数据不足的大型CNN

对于问题二,当带标注的数据集较少不足以训练大型CNN时,作者提出了以下的替代方法,即在一个大的辅助数据集ILSVRC进行无监督的预训练,然后再在小数据集PASCAL上进行领域特定的细调,实验证明,这种方法对于提升检测的准确性非常有帮助。

二、R-CNN目标检测系统

首先R-CNN目标检测系统包含三个模块:

  • 对于含有多个目标的输入图像,利用 selective search 选取2000个候选区域,在每个proposal周围添加16个像素(该像素值为proposal中所有像素的平均值),并进行warp调整尺寸以适应CNN输入( 227 × 227 227\times227 227×227 pixels);
  • 在输入给 CNN(AlexNet) 之前,先进行mean-subtracted 预处理,再经过CNN提取固定维度为 4096 的特征向量,得到 2000 × 4096 2000\times4096 2000×4096 的特征矩阵;
  • 使用21个 linear SVMs 对上述feature vectors进行分类(采用21个的原因是在PASCAL VOC数据集中共包含20个类别以及background),即SVM的权值矩阵为 4096 × 21 4096\times21 4096×21,最终得到 2000 × 21 2000\times21 2000×21 的得分矩阵。

实际检测过程中,在得到得分矩阵后还需要进行其他操作以获得更加准确的结果:

  • 在上一步之后对得分矩阵中的 每一列(一列即一类) 使用非极大值抑制来剔除重叠候选框中得分较低的;
  • 利用20个回归器对上述每个类别的得分高的proposals使用边界框回归方法进行修正,最终得到每个类别的修正后的得分最高的bounding box。

总的来说目标检测的过程可以分成五步。下图展示了系统中的三大模块:
2
下面就按照文章的内容顺序分解R-CNN中的组成部分。

(一) 模型设计

1.1. Region proposals 与 selective search

R-CNN不需要采取某种特定的获取region proposals的方法,选用selective search的原因是方便与已有的目标检测成果进行对比。之前看了一点点的selective search,链接 Object detection(1):Selective Search
以及selective search原文地址 Selective Search

在测试阶段,通过selective search获取大约2000个region proposals

1.2. Feature extraction 与 AlexNet

R-CNN采用Krizhevsky等提出的AlexNet作为第二个主模块CNN,而AlexNet的输入大小为 227 × 227 227\times227 227×227 ,因此在将regions输入到AlexNet之前,需要先对这些regions进行变换以获得 227 × 227 227\times227 227×227的输入。由于这些regions的形状是任意的,作者选取了最简单的方式——仿射图像变形(affine image warping),将位于紧边界框中的像素变形至所需要的大小。在变形之前,首先将每个紧边界框扩张16个平均值像素,使得对于变形后的尺寸而言,在原始边界框周围有16个变形后的图像上下文的像素。之后将变形后的regions输入给AlexNet,通过前向传播计算得到一个4096维的特征向量

1.3. features score 与 linear SVMs

首先对20类中的每一个类别都会训练一个特定的线性SVM,使用该SVM对获取的特征向量进行评分,因此SVMs的权重矩阵为 4096 × 21 4096\times21 4096×21。而一个特征向量对应着一个region proposal,所以通过AlexNet得到的所有特征向量组合在一起,构成的特征向量矩阵为 2000 × 4096 2000\times4096 2000×4096。因此经过SVM评分后的score matrix为 2000 × 21 2000\times21 2000×21

1.4. scored region 与 NMS

到这一步为止,一开始获取的2000个region proposals全部拿到了各自的评分,简单来想就是需要保留评分高的region,去掉评分低的region,但是对于那些重叠的region该怎么做呢?为了解决这个问题,作者对每一类都采用了 贪婪非极大值抑制(greedy non-maximum suppression),个人理解就是拒绝IoU超过给定阈值但评分低于某高评分region的其他regions,实际上就是去掉重叠中评分更低的一方。

1.5. high scored regions 与 bounding box regression

参考边框回归(Bounding Box Regression)详解

1.6. 其他

文中还给了运行时间的分析,R-CNN运行效率高的原因主要有两个:一是CNN中的权值在所有类别中是共享的;二是CNN计算得到的特征向量维度较小。这种共享权值使得提取region proposals和计算feature vectors( 2000 × 4096 2000\times4096 2000×4096 )的时间在所有类别上几乎是平均分配的,而与类别挂钩的计算仅包含feature vector和SVM的weight matrix( 4096 × N 4096\times N 4096×N,其中 N 为类别总数)的矩阵向量乘,以及非极大值抑制,因此无论需要检测的目标类别是多少,R-CNN运行的时间都不会太多。

(二) R-CNN的训练过程

开头简单介绍了R-CNN是如何训练的,在标注数据不足的情况下很难直接训练一个较大的CNN,因此作者采取了 supervised pre-trainingDomain-specific fine-tuning 相结合的方式。

2.1. Supervised pre-training

即有监督的预训练,这一过程是利用了ILSVRC 2012数据集(带有图像级别的标签,没有边界框标注)通过开源Caffe CNN数据库完成的。

2.2. Domain-specific fine-tuning——CNN

R-CNN的目的是为了进行更精确的目标检测,这里的 特定域 指的是原文网络中CNN新的输入——来自于VOC的warp之后的region proposals。

  • positives:对每一个ground truth box,规定与该box的 I o U ≥ 0.5 IoU{\ge}0.5 IoU0.5 的region proposals为该box所在类的正样本;反之为负样本。
  • 为训练CNN的参数采用了SGD,学习率为0.001(即初始预训练学习率的 1 / 10 1/10 1/10,这样做是为了使细调在不破坏预训练的情况下取得进展)
  • 在每个SGD迭代中,我们对所有类统一采样32个positives和96个background以构建大小为128的mini-batch。我们将采样偏向positives,因为与背景相比,它们极为罕见。
  • 在R-CNN的最后将AlexNet中特定于ImageNet数据集的1000-way的分类层替换为了21-way的分类层(VOC数据集中 21 = 20   c l a s s e s + 1   b a c k g r o u n d 21=20\ classes+1\ background 21=20 classes+1 background),除此之外与AlexNet无其他区别。
2.3. Object category classifiers——linear SVMs

在获得CNN提取的特征向量后,需要一个分类器来确定输入region的所在类别,这个分类器就是前面提到的线性SVM,在SVM的训练中直接规定ground-truth bounding boxes作为positives,而IoU重叠比在0.3以下的为negatives(0.3是通过grid search经验证集在 { 0 , 0.1 , . . . , 0.5 } \{0,0.1,...,0.5\} {0,0.1,...,0.5}中选取得到,0.5或0均会降低mAP)。

考虑到内存无法承受较大的训练数据,在训练过程中采用了难负例挖掘(Hard Negative Mining),即在训练时,尽量多挖掘些难负例(hard negative)加入负样本集,这样会比easy negative组成的负样本集效果更好。难例挖掘即针对模型训练过程中的困难负样本,重新训练它们。这种方法收敛速度很快,实际中只需要对训练数据进行一次完整的遍历就能得到稳定的mAP了。

关于为什么正负样本在细调训练和SVM训练中设置的不同,在原文的补充材料中可以找到。

(三) R-CNN在PASCAL VOC 2010-2012的检测结果

3

  • 上图是不带和带有边界框回归算法的R-CNN在PASCAL VOC2010数据集上的结果,作为对比项的包括四个算法;
  • 与R-CNN最具比较性的是UVA,由于都使用了selective search作为提取region proposals的方法。UVA中采用了非线性核SVM作为分类器,实现了35.1%的mAP,而R-CNN采用线性SVM达到了更高的53.7%的mAP,并且在VOC2011/12 上也达到了类似的效果。

三、一些技巧

(一) 可视化网络学到的特征

对任一网络而言,可视化特征便于研究者更直接的理解网络进行的学习。在R-CNN中,第一层的滤波器能够捕捉定向边缘以及相反的颜色,这是比较容易可视化及理解的,然后理解后续的滤波层就没有这么容易了,因此作者提出了一种更为简单且互补的非参数性反卷积方法用于可视化网络学到的特征。

文中的做法是:挑选出网络中的特定单元 pool5,即AlexNet CNN中的第5个卷积层的最大池化输出,该层的feature map为 6 × 6 × 256 = 9216 6\times6\times256=9216 6×6×256=9216,即有 256 256 256 种不同的 6 × 6 6\times6 6×6 特征。每个 pool5 单元在原始的输入 227 × 227 227\times227 227×227 中具有大小为 195 × 195 195\times195 195×195 的感知野,经过 p a d d i n g = 4 , s t e p = 8 padding=4,step=8 padding=4step=8,输出即 ( 227 − 195 + 2 × 4 ) / 8 + 1 = 6 × 6 (227-195+2\times4)/8+1=6\times6 (227195+2×4)/8+1=6×6。将这些 6 × 6 6\times6 6×6 特征视为 物体检测器,输入10million的region proposal集合,计算每种 6 × 6 6\times6 6×6 特征的激活值,之后进行非极大值抑制,最后展示出每种 6 × 6 6\times6 6×6 特征即 物体检测器 的前几个得分最高的region proposal,从而给出了这种r 6 × 6 6\times6 6×6 的特征图表示了什么形状、纹理、颜色或者材料属性。

下图展示了256种不同特征中的6种,每一行展示了一个 pool5 单元(来自经过VOC 2007上细调后的CNN)的前16个激活值:
4

(二)消融实验

这种研究使得研究人员能够发现系统组成部分中,对结果有着较大积极影响的部分,类似于控制变量法。
为了解系统中的哪一层对检测性能最重要,作者分析了R-CNN的最后三层:pool5, fc6, fc7 在VOC 2007数据集上的检测结果。

layerweight matrixfeature map
pool5- 6 × 6 × 256 ( = 9216 ) 6\times6\times256(=9216) 6×6×256(=9216)
fc6 4096 × 9216 4096\times9216 4096×9216 4096 × 1 4096\times1 4096×1
fc7 4096 × 4096 4096\times4096 4096×4096 4096 × 1 4096\times1 4096×1
2.1 无细调时的逐层性能分析

R-CNN在不进行fine-tuning时,在上述三层上取得的结果如下图所示:
5
容易看出:

  • fc6 的mAP甚至高于 fc7,这表明即便删除fc7层(等价于去掉网络中29%的参数,大约1680万),检测性能也不会下降。
  • fc6的mAP只比pool5的高出2%,因此同时删除 fc6&fc7,只保留pool5也能产生很好的检测结果。

上述数据表明了CNN的表达能力大部分来源于它的卷积层,而非相对更大的全连接等密集连接层,这使得在pool5的feature map上进行sliding-window检测或DPM实验成为可能。

2.2 有细调时的逐层性能分析

6
可以看出,经过参数的细调后,fc7的mAP增长了8%达到了54.2%。同时fc6的mAP也提升了很多,相比下,pool5并未发生太大的变化,这表明CNN的卷积层学到的特征具有一般性。

2.3 与其他特征学习方法的对比

文中还给出了三种基于DPM的特征学习方法,它们在VOC 2007数据集上的性能表现如下:
7
其中DPM v5表示仅使用HOG feature的DPM法,DPM ST表示引入“sketch token”概率的直方图以增强HOG特征的方法,DPM HSC是指采用稀疏码直方图替代HOG的方法。相比之下,R-CNN的几种变体在VOC 2007数据集上达到的检测性能mAP均高于DPM方法。

2.4 检测误差分析

文中采用的检测分析工具源于Hoiem等人的

《D. Hoiem, Y. Chodpathumwan, and Q. Dai. Diagnosing error inobject
detectors. In ECCV. 2012.》

使用这种分析工具的目的有三个:

  • 了解R-CNN的错误模式;
  • 与DPM的错误模式进行比较;
  • fine-tuning是如何改进并减少这种错误的。

但是文中并未给出对这种工具的详细描述,所以有兴趣的小伙伴就只能自己去翻翻上面的论文啦~附 论文地址

2.4.1 R-CNN的错误模式

首先给出了R-CNN排名最高的假正例类型的分布图:
8

上图是 animals类、furniture类 在fc6层和fc7层上的假正例分布,每张图都展示了假正例类型的演变,文中给出了四种假正例的产生原因:

typemeaning
Loc定位不良(目标与正确分类的IoU重叠比在0.1-0.5之间,或重叠)
Sim与相似的类别产生混淆
Oth与不同的类别产生混淆
BG源于背景触发

从分布图中可以看出,R-CNN的错误主要是由于定位不良导致的,而不是与背景或其他对象类别产生混淆造成的。

2.4.2 DPM的错误模式

9
可以看出FPs主要是目标与其他的对象产生混淆造成的。这说明 CNN提取的特征比HOG特征更具判别力。至于R-CNN的定位不良,文中猜测可能是由于使用了自下而上的region proposals,以及通过对CNN进行全图像分类的预训练而获得的位置不变性。
但是,没关系,毕竟强者永不认输!!!所以就有了 fine-tuning

2.4.3 fine-tuning的影响力

10
上面每个图都展示了六个不同对象特征(occlusion, truncation, bounding box area, aspect ratio, viewpoint, part visibility)内性能最高和最低的子集的平均归一化AP。
从左到右分别展示了不带有fine-tuning的fc6、带有微调但无BB的fc7、同时带有fine-tuning和BB的fc7、DPM v5对目标特征的敏感度。
容易看出,fine-tuing不会降低 灵敏度(最大值和最小值之间的差异),但会实质上改善几乎所有特性的最高和最低性能子集。 这表明,fine-tuning不仅可以改善asp(纵横比)和size(边界框区域)中性能最低的子集,还可以根据我们扭曲网络输入的方式来推测。相反,微调可以提高所有特性的鲁棒性,包括occlusion,truncation,viewpoint和part visibility。

2.4 边界框回归

基于上面的错误模式分析,以及DPM中采用的边界框回归法,R-CNN提出了一种简单的减少定位错误的方法, 即根据给定的pool5特征训练一个线性回归模型,来预测一个新的检测窗口用于选择性搜索的region proposal。(这里为什么是pool5特征,可以参考2.1)
在使用了边界框回归算法后,mAP大概提升了3-4个百分点:
11
通过错误模式分析也能看出,由于定位不良而产生的假正例明显减少。
12

四、语义分割

R-CNN的牛逼之处在于它不仅能进行目标检测,也同样可以应用于语义分割。文中评估了三种在CPMC regions上计算特征的策略,所有这些策略均始于将包围区域的矩形窗口变形为 227 × 227 227\times227 227×227

  • 第一个策略 (full) 忽略该区域的形状,直接在变形窗口上计算CNN特征,与 前面进行目标检测时的操作相同。 但是,这些特征忽略了该区域的非矩形形状, 两个区域可能具有非常相似的边界框,而几乎没有重叠;
  • 第二种策略 (fg) 仅在区域的前景掩模(foreground mask)上计算CNN特征,文中用均值输入替换背景,以便进行mean subtraction背景区域为零;
  • 第三种策略 (full + fg) 简单地将full和fg功能串联。

下图汇总对比了R-CNN与 O 2 P O_2P O2P 在VOC 2011验证集的结果。
13
容易看出,无论在哪种特征计算策略中,fc6层的表现始终要好于fc7,其次fg策略下的性能要略优于full,这表明被遮掩的region shape提供了更强的信号,而full + fg下的平均准确度更高,这表明即使 使用fg的特征,full 特征所提供的上下文也非常有用。
文中还提供了R-CNN的fc6(full+fg)与 R & P R\&P R&P O 2 P O_2P O2P在VOC 2011测试集上的表现:
14
R-CNN在21个类别中的11个类别中实现了最高的分割准确度,在各个类别之间平均达到了最高的整体细分准确度47.9%,并且通过微调仍可能获得更好的性能。

五、总结

构建R-CNN的两大思想:

  • (1)将CNN应用于自下而上的region proposals,以便对目标进行定位和分割;
  • (2)给出了在标记的训练数据缺少的情况下训练大型CNN的范例,即对具有充足数据的辅助任务(图像分类)进行有监督的预训练,然后针对数据稀缺的目标检测任务进行fine-tuning。

드디어 끝났어!!!
又拖延了将近一个月才看完~万恶的拖延症啊!
——————————————————————————————————————

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值