R-CNN
R-CNN 论文网址
论文链接: Girshick_Rich_Feature_Hierarchies_2014_CVPR_paper.pdf
R-CNN 介绍
R-CNN是一种基于区域的卷积神经网络算法,它在卷积神经网络上应用区域推荐的策略,形成自底向上的目标定位模型。
R-CNN的步骤如下所示:
1.selective search:
region proposal has selective search and edge boxes
保证选取较少的窗口的情况下保持较高的召回率
过程:区域推荐(候选区域) + selective search + 区域合并 + 区域相似度计算
2.CNN
利用CNN进行特征提取,对每个候选边框提取深层特征
R-CNN的卷积神经网络模型如图:
目标:特征提取
3.SVM
利用线性支持向量机对CNN进行神经网络提取的深层特征进行分类
目标:进行分类
4.NMS
非极大值抑制(Non-maximum Suppression, NMS):在物体检测中应用十分广泛,主要目的是为了消除多余的边框,获得最佳的物体检测的位置,去除重叠的候选边框,挑选出SVM得分较高的bounding box
R-CNN训练步骤
1.训练一个分类模型(AlexNet), 预训练
2.对1中生成的模型进行==fine-tuning(微调)==将分类从1000改到20, 去掉一个全连接层
3.CNN特征提取
4.训练SVM, 分类
5.回归器修正候选框位置
R-CNN缺点
1.重复计算:重复部分放入训练网络中
2.性能忧患:由于所有的候选框会被放缩到固定的尺寸,这将导致图像的畸变,不符合物体的常见比例,而且由于重复计算的问题,时间上难以容忍多尺度多比例的数据增强(data augmentation)方法去训练模型,使得模型的性能很难有进一步的提升;
3.步骤繁琐:整个训练过程分为多个步骤,步骤繁琐不易操作,而且每个阶段分开训练,不利于取得最优的解。此外,每个阶段得到的结果都需要保存,消耗大量的磁盘空间;
(4). 训练占用内存大:对于每一类分类器和回归器,都需要大量的特征作为训练样本;
(5). 训练过程是多阶段的:首先对卷积神经网络微调训练;然后提取全连接层特征作为SVM的输入,训练得到目标检测器;最后训练边框回归器;
(6). 目标检测速度慢;
(7). 输入CNN网络的图像大小固定为227*227,在输入网络前需要对候选区域图像进行归一化,容易使物体产生截断或拉伸,会导致输入CNN的信息丢失。
Fast R-CNN
SPP-net 论文
论文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
SPP 为解决的问题
使全连接层可以固定输入特征维度
由于R-CNN的卷积神经网络只能输入固定范围的图像,裁剪后会损坏图像信息。
R-CNN需要对候选区域进行缩放的原因是__全连接层的输入维度必须固定__。整个网络包含底部的卷积层和顶部的全连接层,卷积层能够适应任意尺寸的输入图像,产生相应维度的特征图,但是全连接层不同,全连接层的参数是神经元对于所有输入的连接权重,即如果输入维度不固定,全连接层的参数数量也无法确定,网络将无法训练。为了既能固定全连接层的输入维度又不让候选区域产生畸变,很自然的想法就是在卷积层和全连接层的衔接处加入一个新的网络层,使得通过该层后特征的维度可以固定,在SPP-net中引入的空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP Layer)就是这样一种网络层,SPP-net也因此得名。
解决R-CNN重复计算的问题
SPP-net 将整张图片输入到CNN中, 通过CNN输出的feature map映射到输入图片, 将feature map得到该候选区域的特征, 最后将每个候选区域的feature map输入到全连接层进行后续操作。
SPP-net 网络结构
SPP-net网络结构如下图所示,输入一副任意尺度的待测图像,用CNN可以提取得到卷积层特征(例如VGG16最后的卷积层为Conv5_3,得到512幅特征图)。然后将不同大小候选区域的坐标投影到特征图上得到对应的窗口(window),将每个window均匀划分为44, 22, 11的块,然后对每个块使用Max-Pooling下采样,这样无论window大小如何,经过SPP层之后都得到了一个固定长度为(44+2*2+1)*512维的特征向量,将这个特征向量作为全连接层的输入进行后续操作。这样就能保证只对图像提取一次卷积层特征,同时全连接层的输入维度固定。
SPP-net 目标检测整体流程
- 输入一幅待检测图像;
- 提取候选区域:利用Selective Search算法在输入图像中提取出约2000个最有可能包含目标实例的候选框;
- 候选区域尺度缩放:候选区域长宽中的较短边长度进行统一,即min(w, h)=s, s∈{480, 576, 688, 864, 1200},s取值标准是使得统一后的候选区域尺寸与224*224最接近;
- 特征提取:利用SPP-net网络结构提取特征;
- 分类与回归:根据所提特征,利用SVM进行分类,用边框回归器微调候选框的位置。
Fast R-CNN引入
为了解决R-CNN训练速度慢、训练所需空间大的问题,R-CNN的原作者Ross Girshick对R-CNN做出了改进,提出了Fast R-CNN,该网络吸收了SPP-net的特点,使得目标检测的速度大幅提升
Fast R-CNN论文
论文链接:Fast R-CNN
Fast R-CNN网络结构
Fast R-CNN的输入由两部分组成:一是待处理的整张图像;二是候选区域(region proposal)。Fast R-CNN处理的第一步是对图像进行多次卷积核池化处理来获取卷积特征图。由于存在多个候选区域,系统会有一个甄别,判断出感兴趣区域,也就是Region of Interest, RoI。RoI池化层是SSP(Spatial Pyramid Pooling)层的特殊情况,它可以从特征图中提取一个固定长度的特征向量。每个特征向量,都会被输送到全连接(FC)层序列中,这个FC分支成两个同级输出层。其中一层的功能是进行分类,对目标关于K个对象类(包括全部”背景background”类)输出每一个RoI的概率分布,也就是产生softmax概率估计;另一层是为了输出K个对象中每一个类的四个实数值(bbox regression)。每4个值编码K个类中的每个类的精确边界框(bounding-box)位置。整个结构是使用多任务损失的端到端训练(trained end-to-end with a multi-task loss)(除去Region Proposal提取阶段)。
ROI层
Fast R-CNN步骤
- 输入一张待检测图像;
- 提取候选区域:利用Selective Search算法在输入图像中提取出候选区域,并把这些候选区域按照空间位置关系映射到最后的卷积特征层;
- 区域归一化:对于卷积特征层上的每个候选区域进行RoI Pooling操作,得到固定维度的特征;
- 分类与回归:将提取到的特征输入全连接层,然后用Softmax进行分类,对候选区域的位置进行回归。
Fast R-CNN的主要创新点
将最后一个卷积层的SSP Layer改为RoI Pooling Layer
另外提出了多任务损失函数(Multi-task Loss),将边框回归直接加入到CNN网络中训练,同时包含了候选区域分类损失和位置回归损失。