1 RCNN的简介
CVPR2014经典paper:《Rich feature hierarchies for accurate object
detection and semantic segmentation》,http:// https://arxiv.org/abs/1311.2524
这篇论文的算法思想被称为R- CNN(Regions with Convolutional Neural Network Features)
该算法思想更改了物体检测的总思路,现在很多物体检测算法均基于该算法。
简单来讲:
R-CNN是一种基于Region Proposal的CNN网络结构
Region Proposals 是指可能包含目标对象的图像区域的候选集合。换句话说,它们是图像中那些可能包含我们想要检测的对象的区域。在 R-CNN 和类似模型中,这些区域会进一步被处理以确定它们确实包含对象,并且确定对象的类型和位置。
R-CNN算法中采用和传统目标检测类似的执行过程,主要包含以下
几个步骤:
1. 区域提名(Region Proposal):通过区域提名的方法从原始图片中提取2000个左右的区域候选框,一般选择Selective Search(SS);
2. 区域大小归一化:将所有候选框大小缩放固定大小(eg:227*227);
3. 特征提取:通过CNN网络,对每个候选区域框提取高阶特征,将高阶特征保存磁盘;
4. 分类与回归:在高阶特征的基础上添加两个全连接层,再使用SVM分类器来进行识别,用线性回归来微调边框位置与大小,其中每个类别单独训练一个边框回归器(类似OverFeat的class specific结构)。
2 RCNN的模块
上述模块是训练的时候的模块
模块1
在模块一中,使用SS算法来获取2000个区域提案,后续做预处理,全部尺寸改变为227x227,这是 AlexNet 输入尺寸的要求
预处理如下图
模块2
在模块2中,使用alexnet网络来提取特征,并进行fine-tune微调(为了训练特征提取功能),微调通常指的是在预训练的 CNN 上进行额外训练,以适应新的数据集或任务。这通常涉及到将 CNN 的最后一层(全连接层)替换为新的层,然后在新数据集上继续训练。在训练时,根据 IoU 阈值(大于0.5为正样本,小于0.5为负样本)来选择用于训练的样本。
下图将fc7层全连接层进行修改为4096x21,其中20个代表标签值,多的一个代表背景
模块3
在模块三使用svm分类器,对于每个对象类别,使用从 AlexNet 的 FC7 层提取的 4096 维特征来训练一个 SVM 分类器。在训练 SVM 时,选择那些与真实标注边界框的 IoU 为GT(ground truth)的提案作为正样本,IoU 小于0.3的提案作为负样本,并丢弃其他样本。
模块4
- Bounding Box 回归:对于分类后的提案,如果它们的 IoU 大于0.6,就使用边界框回归器对提案的位置进行微调,使其更精确地围绕对象。
- NMS(非极大值抑制):最后,对分类和回归后的提案应用 NMS,移除重复或相互重叠的边界框,确保每个对象只有最佳的一个检测结果被保留。
即下面的步骤
步骤一:利用Selective Search得到若干候选区域(所有可能是物体的区域);
步骤二:对于每个候选区域(2k、缩放变换)分别使用CNN提取高阶特征向量,并且特征向量存储到磁盘中;
步骤三:对于每个候选区域提取的高阶特征向量使用SVM进行分类(二分类);
步骤四:使用非极大值抑制剔除重复框;
步骤五:精准定位(回归器)。
3 RCNN中的Bounding Box Regression(BBR)
为了进一步的提高定位的精确率,引入Bounding Box Regression(BBR)进行定位边框的微调(基于DPM模型)
![](https://i-blog.csdnimg.cn/blog_migrate/9a51e527e145c09b2fa5f291d394c73f.png)
如上图所示,绿色框为实际标准的卡宴车辆框,即
Ground Truth
;黄色框为Selective Search算法得出的建议框,即
Region Proposal
。即使黄色框中物体
,被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU
值并不大,所以最后的目标检测精度并不高。采用回归器是为了对建议框进行校正,使得校正后的Region Proposal
与
Ground Truth
更接近, 以提高最终的检测精度。
如下图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G^表示Region Proposal进行回归后的预测窗口,现在的目标是找到P到G^的线性变换。
![](https://i-blog.csdnimg.cn/blog_migrate/3f7931bd6b5cd8c67b34fe7bb196532d.png)
Region Proposal窗口表示
![](https://i-blog.csdnimg.cn/blog_migrate/e0cb5051213c35c95f8af6eeeb53301e.png)
分别表示中心点坐标横轴值、中心点坐标纵轴值、窗口宽度、窗口高度。
![](https://i-blog.csdnimg.cn/blog_migrate/d968997cde256d173e05475f7901f406.png)
定义四种变换函数,其中中心点通过对x和y进行平移变换得到,宽度w和高度h通过进行缩放变换得到。计算公式如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/0f527429a959b88fd7e0267ee28b4a81.png)
结合上述转换函数,我们的目的是要求线性转换之后的边框和实际边框非常接近,那么也就是目标转换系数为(也就是模型训练值<offset box,位置偏移量>):
![](https://i-blog.csdnimg.cn/blog_migrate/ff2692ea0fb73169da8a037b67df536d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b605745ef93401925062ae520b43f393.png)
为了提高样本框回归训练的有效性,对于每类样本中采用与Ground Truth相交IoU大于0.6的Region Proposal作为样本对(P,G)进行BBR的训练。之所以选择
IoU大于0.6
的进行回归微调,其主要原因是如果边框间隔太远,那么其转换关系可能就不是非线性转换,使用线性转换的方式有点不work。
对于每个类别均训练一个BBR线性转换结构。也就是RCNN中最终由N个BBR线性转换
4 RCNN的预测阶段
1 使用RCNN的分类模型进行预测,得到当前图像上各个ROI属于各个类别的概率值(置信度),形状为:2000*(N+1)的矩阵。
2 对于每个类别(N个类别),通过计算IoU指标,采用非极大值抑制的方式,以置信度高的区域为基础,剔除重叠位置的区域, 最终得到的就是各个区域(没有做微调)以及区域对应的类别;
3 对于每个区域在Conv5层的输出高阶特征值,使用BBR线性转换对ROI位置进行微调。最终返回微调后的位置信息以及置信度信息。
4 无用的区域提名(即那些不太可能包含目标对象的提名)主要在以下两个阶段被移除:
-
SVM 分类阶段:
- SVM 为每个区域提名分配一个分类得分,表示它属于特定类别的置信度。
- 那些得分低于某个设定阈值的区域提名通常会被认为不含目标对象,因此会被剔除。
-
非极大值抑制(NMS)阶段:
- 在边界框回归之后,NMS 用于进一步清理检测结果。
- 即使区域提名被 SVM 分类为包含对象,如果它们与得分更高的提名重叠,也会在 NMS 阶段被移除。
通过这两个阶段,R-CNN 系统能够有效地筛选出最有可能正确标示目标对象的区域提名,同时移除那些不太可能代表目标对象的提名。这两个步骤共同提高了最终检测结果的准确性和可靠性。
5 关于RCNN的细节问题
1 为什么选择FC层的输出作为ROI的高阶特征?
直接把CNN当做特征提取器,卷积层所学到的特征其实就是基础的共享特征
提取层(位置信息、轮廓信息....),而FC全连接是将特征任务相关的特征信息提
取出来(将局部的高阶特征的合并成全局的)。
2 为什么进行fine-tuning?
如果不进行fine-tuning训练,相当于直接把AlexNet模型当做万金油使
用,也就是不针对特定的任务,直接应用提取的特征,这种方式没有考
虑到具体的任务相关特征。
3 为什么在CNN softmax模型训练之外,需要单独训练一个SVM分类器呢?
这是因为svm训练和cnn训练过程中的正负样本定义方式不同,导致CNN softmax的
输出比采用svm的精度低。在CNN softmax中,将IOU大于等于0.5的当做正样本,
IOU小于0.5的当做负样本;而在SVM中,将Ground Truth当做正样本,IOU小于0.3
的当做负样本。
SVM分类器训练过程中,采用标准的hard negative mining方式进行训练,即:难负
例挖掘算法,用途就是正负例数量不均衡,而负例分散代表性又不够的问题,hard
negative就是每次把那些顽固的棘手的错误,再送回去继续练,练到你的成绩不再提升为
止.这一个过程就叫做“hard negative mining” 。
CNN softmax模型的分类识别能力比较强,鲁棒性会更强(泛化能力更强,也就是对
于区域中仅包含部分轮廓的情况,也可以产生一个当前类别的预测),对于精准的定
位效果就不会特别的好
6 RCNN的总结和缺陷
一些小总结:
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提取出来的特征训
练了一个线性回归模型;
缺陷:
R-CNN已经不是最先进的目标检测模型,但是它是深度学习应用目标检测的奠基
者,在RCNN中的很多缺陷问题,也在后续的目标检测网络结构中得以解决,其主
要问题如下:
重复计算
:R-CNN虽然不再是穷举,但依然有两千个左右的候选框,这些候选框都需
要进行CNN操作,计算量依然很大,其中有不少其实是重复计算;
训练测试分为多步
:区域提名、特征提取、分类、回归都是断开的训练的过程,中间
数据还需要单独保存;
训练的空间和时间代价很高
:卷积出来的特征需要先存在硬盘上,这些特征需要几百
G的存储空间;
执行效率慢
:GPU上处理一张图片需要13秒,CPU上则需要53秒。