R-CNN

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的模块

R-CNN_第1张图片

R-CNN_第2张图片

上述模块是训练的时候的模块

模块1

在模块一中,使用SS算法来获取2000个区域提案,后续做预处理,全部尺寸改变为227x227,这是 AlexNet 输入尺寸的要求

预处理如下图

R-CNN_第3张图片

模块2 

在模块2中,使用alexnet网络来提取特征,并进行fine-tune微调(为了训练特征提取功能),微调通常指的是在预训练的 CNN 上进行额外训练,以适应新的数据集或任务。这通常涉及到将 CNN 的最后一层(全连接层)替换为新的层,然后在新数据集上继续训练。在训练时,根据 IoU 阈值(大于0.5为正样本,小于0.5为负样本)来选择用于训练的样本。

下图将fc7层全连接层进行修改为4096x21,其中20个代表标签值,多的一个代表背景

R-CNN_第4张图片

模块3

在模块三使用svm分类器,对于每个对象类别,使用从 AlexNet 的 FC7 层提取的 4096 维特征来训练一个 SVM 分类器。在训练 SVM 时,选择那些与真实标注边界框的 IoU 为GT(ground truth)的提案作为正样本,IoU 小于0.3的提案作为负样本,并丢弃其他样本。

R-CNN_第5张图片

模块4

  • Bounding Box 回归:对于分类后的提案,如果它们的 IoU 大于0.6,就使用边界框回归器对提案的位置进行微调,使其更精确地围绕对象。
  • NMS(非极大值抑制):最后,对分类和回归后的提案应用 NMS,移除重复或相互重叠的边界框,确保每个对象只有最佳的一个检测结果被保留。
  • R-CNN_第6张图片

即下面的步骤

步骤一:利用Selective Search得到若干候选区域(所有可能是物体的区域);
步骤二:对于每个候选区域(2k、缩放变换)分别使用CNN提取高阶特征向量,并且特征向量存储到磁盘中;
步骤三:对于每个候选区域提取的高阶特征向量使用SVM进行分类(二分类);
步骤四:使用非极大值抑制剔除重复框;
步骤五:精准定位(回归器)。

3 RCNN中的Bounding Box Regression(BBR)

为了进一步的提高定位的精确率,引入Bounding Box Regression(BBR)进行定位边框的微调(基于DPM模型)
R-CNN_第7张图片
如上图所示,绿色框为实际标准的卡宴车辆框,即 Ground Truth ;黄色框为Selective Search算法得出的建议框,即 Region Proposal 。即使黄色框中物体 ,被分类器识别为卡宴车辆,但是由于绿色框和黄色框IoU 值并不大,所以最后的目标检测精度并不高。采用回归器是为了对建议框进行校正,使得校正后的Region Proposal Ground Truth 更接近, 以提高最终的检测精度。
如下图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G^表示Region Proposal进行回归后的预测窗口,现在的目标是找到P到G^的线性变换。
R-CNN_第8张图片
Region Proposal窗口表示
R-CNN_第9张图片
分别表示中心点坐标横轴值、中心点坐标纵轴值、窗口宽度、窗口高度。
R-CNN_第10张图片
定义四种变换函数,其中中心点通过对x和y进行平移变换得到,宽度w和高度h通过进行缩放变换得到。计算公式如下所示:
R-CNN_第11张图片
结合上述转换函数,我们的目的是要求线性转换之后的边框和实际边框非常接近,那么也就是目标转换系数为(也就是模型训练值):
R-CNN_第12张图片
R-CNN_第13张图片
为了提高样本框回归训练的有效性,对于每类样本中采用与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 无用的区域提名(即那些不太可能包含目标对象的提名)主要在以下两个阶段被移除:

  1. SVM 分类阶段

    • SVM 为每个区域提名分配一个分类得分,表示它属于特定类别的置信度。
    • 那些得分低于某个设定阈值的区域提名通常会被认为不含目标对象,因此会被剔除。
  2. 非极大值抑制(NMS)阶段

    • 在边界框回归之后,NMS 用于进一步清理检测结果。
    • 即使区域提名被 SVM 分类为包含对象,如果它们与得分更高的提名重叠,也会在 NMS 阶段被移除。

通过这两个阶段,R-CNN 系统能够有效地筛选出最有可能正确标示目标对象的区域提名,同时移除那些不太可能代表目标对象的提名。这两个步骤共同提高了最终检测结果的准确性和可靠性。

5 关于RCNN的细节问题

1 为什么选择FC层的输出作为ROI的高阶特征?

直接把CNN当做特征提取器,卷积层所学到的特征其实就是基础的共享特征 提取层(位置信息、轮廓信息....),而FC全连接是将特征任务相关的特征信息提 取出来(将局部的高阶特征的合并成全局的)。

2 为什么进行fine-tuning?

如果不进行fine-tuning训练,相当于直接把AlexNet模型当做万金油使 用,也就是不针对特定的任务,直接应用提取的特征,这种方式没有考 虑到具体的任务相关特征。

为什么在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秒。

你可能感兴趣的:(深度学习,人工智能)