R-CNN 经典论文【论文笔记】


      R-CNN论文,全称为《Rich feature hierarchies for accurate oject detection and semantic segmentation》,针对高准确度的目标检测与语义分割的多特征层级,通俗地来讲就是一个用来做目标检测和语义分割的神经网络。

0 摘要(论文的主要创新点)

      论文提出一个简单并且可扩展的检测算法,可以将mAP(mean Average Precision)在VOC2012最好结果的基础上提高30%以上——达到了53.3%。该方法的两个关键点为:

  1. 在候选区域(region proposals)上自下而上使用大型卷积神经网络(CNNs),用以定位和分割物体;
  2. 当带标签的训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的微调,可以使性能明显提升(即我们常说的 迁移学习

      因为将候选区域与CNNs结合,所以该方法称为R-CNN:Regions with CNN festures。

1 Intorduction

      论文首次展示了相比于基于更简单的类似HOG的特征的系统,CNN可以在 PASCAL VOC 有更好的目标检测表现。实现这个结果需要解决两个问题: 使用深度网络定位物体和在小规模的标注数据集上进行大型网络模型的训练。

      测试时,对于每张输入图片,产生接近2000个与类别无关的region proposal,利用CNN对于每一个proposal提取出一个 固定长度的特征向量,然后借助特定类别的线性SVM对每个区域进行分类。
      作者不考虑region的大小,使用放射图像变形的方法来对每个不同形状的region proposal产生一个固定长度的作为CNN输入的特征向量(也就是把不同大小的候选区域 resize为相同大小)。

      论文的第二个核心贡献是在辅助数据集(ILSVRC)上进行监督式预训练,再在小数据集(PASCAL)上针对特定问题进行调优。(这里即是我们常说的 迁移学习)。这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。

      R-CNN是在候选区域上进行操作,所以可以很自然地扩展到语义分割任务上。通过很小的改动,作者就在PASCAL VOC语义分割任务上达到了很有竞争力的结果,在VOC2011测试集上平均语义分割精度达到了47.9%。

2 R-CNN目标检测

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

2.1 模型设计

Regions proposal:采用了选择性搜索(selective search),以方便和前人的工作进行比较。
Feature extraction:对每个候选区域抽取一个4096维度的特征向量,输入一个减去均值的大小为227×227RGB的图片,通过五个卷积层和两个全连接层进行前向传播,最终得到一个4096维的特征向量。

      对于候选框的预处理???? :无论候选区域的尺寸和宽高比是什么,都把候选区域统一变换到 227*227 的尺寸。变形之前,先在候选框周围加上p=16padding,再进行各向异性缩放,这种处理使得mAp提高了3到5个百分点。

2.2 测试阶段的物体检测

      在测试图像上使用selective search(快速模式)抽取2000个候选区域,将候选区域变形后通过CNN前向传播计算出特征,然后使用对每个类别训练出的SVM给整个特征向量中的每个类别单独打分。

记得是【对每一个框使用每个类别的SVM进行打分

      因为候选区域有 2000 个,所以很多会产生重叠。给定一张图像中的所有候选区域,使用 贪婪非极大抑制(每个类别是独立进行的),通过计算 IoU 指标,即对于重叠度较高的一部分同类候选框来说,去掉那些置信度较低的框,只保留置信度最大的那一个进行后面的流程,这里的重叠度高低与否是通过 NMS 设定的阈值来判断的,这里的阈值设定为0.5。

2.3 训练

监督式预训练(迁移学习)
特定领域的参数调优
目标种类分类器(SVM)

训练策略是:采用 SGD 训练,初始学习率为 0.001,mini-batch 大小为 128.

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

3.1 可视化学习特征

      直接可视化第一层filters非常容易理解,它们主要捕获方向性边缘和对比色。对于后面的层,作者使用了一种简单的非参数化方法,直接展示网络学到的东西。
      这个想法是单一输出网络中一个特定单元(特征),然后把它当做一个正确类别的物体检测器来使用。
      先计算所有抽取出来的候选区域(大约1000万),计算每个区域所导致的对应单元的**值,然后按**值对这些区域进行排序,然后进行非极大值抑制,最后展示分值最高的若干个区域。作者避免平均化是为了看到不同的视觉模式和深入观察单元计算结果的的不变性。

3.2 消融研究(Ablation studies)

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

这部分总而言之概括为:

      没有调优的CNN模型即在ILSVRC2012上训练后(迁移学习)的状态,对于网络的全连接层,若仅仅使用pool5的特征,相当于只使用CNN模型参数的6%也能有非常好的结果。可见CNN模型的主要表达力来自于卷积层,而不是全连接层。
  
      调优后的CNN模型在VOC2007上的结果表现出调优后的提升非常明显,mAP提升了8个百分点,全连接层FC6和FC7的提升明显优于pool5,这说明pool5ImageNet学习的特征泛化性很强,在它之上层的大部分提升主要是在学习领域相关的非线性分类器。

      通过比较基于HOG的DFM方法的特征学习方法,一种是DPM ST,一种是DPM HSC,还有一种是未带有特征学习的初始版本DPM v5,所有的R-CNN变种算法都要强于这三个 DPM方法。

3.3 检测错误分析

      R-CNN 作者采用了 Hoiem 提出的目标检测分析工具,能够直观地揭露错误的模型,作者通过这个工具针对性地进行 fine-tune。

3.4 Bounding-box回归

      基于错误分析,使用了一种简单的方法减小定位误差。作者训练了一个线性回归模型在给定一个候选区域的pool5特征时去预测一个新的检测窗口。

4 语义分割

R-CNN 经典论文【论文笔记】

      上图所示即为语义分割(图片来源),R-CNN 进行语义分割分为 3 个阶段。

  1. 利用 CPMC 生成候选区域,然后将这些区域调整大小为 227x227,送到神经网络当中,这是 full 阶段,区域中有背景也有前景。
  2. 第二阶段只处理候选区域的前景,将背景用输入的平均值代替,然后背景就变成了 0 ,这个阶段称为 fg。
  3. full + fg 阶段,将背景和前景简单拼接。

5 总结

      本文提出了一种简单并且可扩展的物体检测方法,达到了VOC 2012数据集相对之前最好性能的30%的提升。
      取得这个性能主要通过两个方面:第一是应用了自底向上的候选区域训练的高容量的卷积神经网络进行定位和分割物体;另外一个是使用在标签数据匮乏的情况下训练大规模神经网络的一个方法。展示了在有监督的情况下使用丰富的数据集(图片分类)预训练一个网络作为辅助性的工作是很有效的,然后再采用稀少数据(检测)去调优定位任务的网络,也就是所谓的“迁移学习”。作者猜测“监督式预训练+特定领域的调优”这一范式对于数据稀少的视觉问题是很有效的。

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

Hints:

  • R-CNN 采用 AlexNet
  • R-CNN 采用 Selective Search 技术生成 Region Proposal.
  • R-CNN 在 ImageNet 上先进行预训练,然后利用成熟的权重参数在 PASCAL VOC 数据集上进行 fine-tune
  • R-CNN 用 CNN 抽取特征,然后用一系列的的 SVM 做类别预测。
  • R-CNN 的 bbox 位置回归基于 DPM 的灵感,自己训练了一个线性回归模型。
  • R-CNN 的语义分割采用 CPMC 生成 Region

参考博客1
参考博客2

欢迎关注【OAOA
R-CNN 经典论文【论文笔记】