R-CNN

实际上,更实用的方法是候选区域(Region Proposals )方法来获取感兴趣的区域(ROI)。选择性搜索(Selective Search )就是一种典型的候选区域方法

物体检测之选择性搜索(Selective Search)

选择性搜索算法用于为物体检测算法提供候选区域,它速度快,召回率高。
选择性搜索算法需要先使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域,然后使用相似度计算方法合并一些小的区域。

下列两张图分别是原图和原始分割图:


原图
原始分割图

我们不能使用原始分割图的区域作为候选区域,原因如下:
1.大部分物体在原始分割图里都被分成多个区域.
2.原始分割图无法体现物体之间的遮挡和包含。
如果我们试图通过进一步合并相邻的区域来解决第一个问题,我们最终会得到一个包含两个对象的分段区域。
我们不要需要完美的的分割区域,我们只想要和实际物体高度重合的区域就行了。

选择性搜索算法使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域作为输入,通过下面的步骤进行合并:
1.首先将所有分隔区域的外框加到候选区域列表中。
2.基于相似度合并一些区域。
3.将合并的分隔区域作为一个整体,跳到步骤1。
通过不停的迭代,候选区域列表中的区域越来越大。可以说,我们通过自底向下的方法创建了越来越大的候选区域。表示效果如下:

相似度

选择性搜索算法如何计算两个区域的像素度的呢?
主要是通过以下四个方面:颜色、纹理、大小和形状交叠
最终的相似度是这四个值取不同的权重相加。

利用候选区域与CNN结合做目标定位

借鉴了滑动窗口思想,R-CNN采用对区域识别的文案
具体是:
1.给定一张输入图片,从图片中提取2000个类别独立的候选区域。
2.对于每个区域利用CNN抽取一个固定长度的特征向量。
3.在对每一个区域利用SVM镜像目标分类。


图例
特征抽取

R-CNN抽取了一个4096维的特征向量,采用的是Alexnet。

需要注意的是Alextnet的输入图像大小是227*227

而通过Selective Search 产生的候选区域大小不一,为了与Alexnet兼容,R-CNN采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换成227*227的尺寸。

有一个细节,在对区域进行变换的时候,首先对这些区域进行膨胀处理,再其box周围附加了p个像素,也就是人为添加了边框,p=16。

测试阶段的目标检测

在测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。

然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征,然后用 SVM 进行类别的识别,并产生分数。

候选区域有 2000 个,所以很多会进行重叠。

针对每个类,通过计算 IoU 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。

训练

R-CNN采取迁移学习

提取在 ILSVRC 2012 的模型和权重,然后在 VOC 上进行 fine-tune。

需要注意的是,这里ImageNet上训练的是模型识别物体类型的能力,而不是预测bbox位置的能力。

ImageNet 的训练当中需要预测 1000 个类别,而 R-CNN 在 VOC 上进行迁移学习时,神经网络只需要识别 21 个类别。这是 VOC 规定的 20 个类别加上背景这个类别。

R-CNN将候选区域与GroundTrue中的box标签相比较,如果IOU >0.5,说明两个对象重叠的位置比较多,于是就可以认为这个候选区域是positive,否则就是Negetive。

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

对象识别相关

通常对待一个二值化的分类器,它的结果只要 2 中,Positive 和 Negetive。

比如,有一个汽车分类器,它可以轻松地确认,一个方框里面包含了一辆汽车,那么它肯定就是 Positive。

也可以很清楚地确认,如果一个背景方框中没有包含汽车,那么它就是 Negetive。

但是,比较难确认的是,如果一个方框,只有一部分与汽车重叠,那么如何标注这个方框呢?

R-CNN 采用的是 IoU 的阈值,这个 threshold 取 0.3,如果一个区域与 Ground tureth 的 IoU 值低于设定的阈值,那么可以讲它看成是 Negetive.

IoU 的 threshold 它不是作者胡乱取值的,而是来自 {0,0.1,0.2,0.3,0.4,0.5} 的数值组合的。

而且,这个数值至关重要,如果 threshold 取值为 0.5,mAP 指标直接下降 5 个点,如果取值为 0,mAP 下降 4 个点。

一旦特征抽取成功,R-CNN 会用 SVM 去识别每个区域的类别,但这需要优化。

因为训练的数据太大,不可能一下子填充到电脑内存当中,R-CNN 作者采取了一种叫做 Hard negetive mining 的手段。

bbox回归

bbox 的值其实就是物体方框的位置,预测它就是回归为题,而不是分类问题。

受DPM的启发,作者训练了一个线性的回归模型,这个模型能够针对候选区域的pool5 数据预测一个新的box 位置。

回顾

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

R-CNN整个系统的流程图:

系统流程图

你可能感兴趣的:(R-CNN)