R-CNN(region with CNN feature)于13年被Ross Girshick(江湖人称RBG大神)提出,是使用深度学习进行目标检测的里程碑式的工作,可以说这项工作很大程度推动了深度学习在目标检测中的应用。

RCNN目标检测数据集 基于cnn的目标检测_神经网络

一、动机及解决的问题

       1、与分类任务不同,目标检测需要框出指定的区域,有相关paper直接使用回归的方法得到区域的位置,但实际应用起来效果并不好;另外,有方法直接使用滑窗加深度学习的方法,不过这一类方法通常网络层次并不深,主要考虑到的是一旦网络层次加深,最后输出的特征图对应的原始图像的感受野太大,造成检测精度不高;

       2、一个更好地解决方案是是使用所谓“区域建议(region proposal)”的方法给出一堆候选区域,这些候选区域能够先过滤掉那些大概率不包含物体的区域,然后选择一个深度神经网络抽取特征;

       3、 一旦抽取特征之后可以设计一个SVM分类器,即对每一个类别的物体都看成是一个单独的二元分类问题;

       4、最后使用回归的方法对包含物体的bounding box进行回归,回归的目的是修正bounding box的偏差。

值得一提的是,R-CNN论文中的细节很多,怎样得到region proposal,怎样把候选得到的区域缩放到统一尺寸以使其适配CNN网络的输入大小,怎样进行多阶段的训练(CNN网络的“pre-training”和“fine-training”,SVM分类器的训练以及回归器的训练)等等,CNN网络为什么不直接接入一个softmax层转而使用SVM进行分类,等等这些会在下文中介绍。

二、R-CNN算法结构及流程

RCNN目标检测数据集 基于cnn的目标检测_神经网络_02

R-CNN算法分为4个步骤:

1、对于给定的输入图像,使用选择性搜索(selective search)的区域建议方法提取出大约2000个候选区域,即首先过滤掉那些大概率不包含物体的区域,通过这一阶段将原始图像中需要处理的区域大大减少;

2、对每个候选区域,使用深度网络提取特征,该步可以分为两小步:

         (1)、需要对第一步中抽取得到的候选区域,经过一个叫做"warp"的过程,这个warp实际就是一个缩放的过程,因为第一步我们提取出的候选区域大小不一,但是后续接入的深度网络的输入是固定的,因此这些区域的大小需要适配CNN网络固定大小的输入;

         (2)、把第一小步中warp之后的候选区域接入到卷积神经网络,抽取一个相对低维的特征;

3、特征送入每一类的SVM分类器,判别是否属于该类;

4、使用回归器精细修正候选框位置;

2.1、候选区域

使用了Selective Search方法从一张图像生成约2000-3000个候选区域。基本思路如下:

  • 使用一种过分割手段,将图像分割成小区域;
  • 查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置;
  • 输出所有曾经存在过的区域,所谓候选区域;

候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。

1、合并规则

优先合并以下四种区域:

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的
  • 合并后,总面积在其BBOX中所占比例大的

其中,合并后总面积小的,这一条保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。

例:设有区域a-b-c-d-e-f-g-h。较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。
不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh。

 合并后,总面积在其BBOX中所占比例大的,这一条保证合并后形状规则。

左图适于合并,右图不适于合并。

RCNN目标检测数据集 基于cnn的目标检测_神经网络_03

 上述四条规则只涉及区域的颜色直方图、纹理直方图、面积和位置。合并后的区域特征可以直接由子区域特征计算而来,速度较快。

2、多样化与后处理

为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。

2.2、特征提取

1、预处理

使用深度网络提取特征之前,首先把候选区域归一化成统一尺寸227×227。此处有一些细节可做变化:外扩的尺寸大小,形变时是否保持原比例,对框外区域直接截取还是补灰。会轻微影响性能。

2、预训练

网络结构
基本借鉴Hinton 2012年在Image Net上的分类网络。

RCNN目标检测数据集 基于cnn的目标检测_卷积_04

3、调优训练

网络结构
同样使用上述网络,最后一层换成4096->21的全连接网络。
学习率0.001,每一个batch包含32个正样本(属于20类)和96个背景。

训练数据
使用PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。
考察一个候选框和当前图像上所有标定框重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景。

2.3 、类别判断

分类器
对每一类目标,使用一个线性SVM二类分类器进行判别。输入为深度网络输出的4096维特征,输出是否属于此类。
由于负样本很多,使用hard negative mining方法。
正样本
本类的真值标定框。
负样本
考察每一个候选框,如果和本类所有标定框的重叠都小于0.3,认定其为负样本

2.4 、位置精修

目标检测问题的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小。故需要一个位置精修步骤。
回归器
对每一类目标,使用一个线性脊回归器进行精修。正则项λ = 10000。
输入为深度网络pool5层的4096维特征,输出为xy方向的缩放和平移。
训练样本
判定为本类的候选框中,和真值重叠面积大于0.6的候选框。

三、R-CNN算法贡献

论文发表的2014年,DPM已经进入瓶颈期,即使使用复杂的特征和结构得到的提升也十分有限。本文将深度学习引入检测领域,一举将PASCAL VOC上的检测率从35.1%提升到53.7%。本文的前两个步骤(候选区域提取+特征提取)与待检测类别无关,可以在不同类之间共用。这两步在GPU上约需13秒。同时检测多类时,需要倍增的只有后两步骤(判别+精修),都是简单的线性运算,速度很快。这两步对于100K类别只需10秒。

四、R-CNN缺点

(1)、重复计算:重复为每个候选框提取特征是非常耗时的。Selective Search为每张图像产生大约2000个候选框,那么每张图像需要经过2000次的完整的CNN前向传播得到特征,而且这2000个候选框有很多重叠的部分,造成很多计算都是重复的,这将导致计算量大幅上升,相当耗时;

(2)、性能瓶颈:由于所有的候选框会被放缩到固定的尺寸,这将导致图像的畸变,不符合物体的常见比例,而且由于重复计算的问题,时间上难以容忍多尺度多比例的数据增强(data augmentation)方法去训练模型,使得模型的性能很难有进一步的提升;

(3)、步骤繁琐:整个训练过程分为多个步骤,步骤繁琐不易操作,而且每个阶段分开训练,不利于取得最优的解。此外,每个阶段得到的结果都需要保存,消耗大量的磁盘空间;

(4)、训练占用内存大:对于每一类分类器和回归器,都需要大量的特征作为训练样本;

(5)、训练过程是多阶段的:首先对卷积神经网络微调训练;然后提取全连接层特征作为SVM的输入,训练得到目标检测器;最后训练边框回归器;

(6)、目标检测速度慢

(7)、输入CNN网络的图像大小固定为227*227,在输入网络前需要对候选区域图像进行归一化,容易使物体产生截断或拉伸,会导致输入CNN的信息丢失。