饮马渭水
首发于饮马渭水
RCNN-> SPP net -> Fast RCNN -> Faster RCNN

RCNN-> SPP net -> Fast RCNN -> Faster RCNN

R-CNN Region-based CNN features

R-CNN的流程主要分为四步:

1. 输入图像;

2. 利用选择性搜索(Selective Search)等区域生成算法在输入图像中提取Region Proposal(大概2000个);

3. 将第一步中产生的每个Region Proposal分别resize后(也即图中的warped region,文章中是归一化为227×227)作为CNN网络的输入;

4. CNN网络提取到经过resize的region proposal的特征送入每一类的SVM分类器,判断是否属于该类;


SPP net (Spatial Pyramid Pooling)


R-CNN主要存在的问题是对于提取的每个Region Proposal,都要分别进行CNN前向传播一次(相当于进行了2000吃提特征和SVM分类的过程),计算量较大,而且CNN的模型确定的情况下只能接受固定大小的输入(也即wraped region的大小固定)。既然所有的Region Proposal都在输入图像中,与其提取后分别作为CNN的输入,为什么不考虑将带有Region Proposal的原图像直接作为CNN的输入呢?原图像在经过CNN的卷积层得到feature map,原图像中的Region Proposal经过特征映射(也即CNN的卷积下采样等操作)也与feature map中的一块儿区域相对应。

SPP net中Region Proposal仍然是在原始输入图像中选取的,不过是通过CNN映射到了feature map中的一片区域。空间金字塔池化的思想是:对卷积层的feature map上的Region Proposal映射区域分别划分成1×1,2×2,4×4的窗口(window),并在每个窗口内做max pooling,这样对于一个卷积核产生的feature map,就可以由SPP得到一个(1×1+2×2+4×4)维的特征向量。论文中采用的网络结构最后一层卷积层共有256个卷积核,所以最后会得到一个固定维度的特征向量(1×1+2×2+4×4)×256维),并用此特征向量作为全连接层的输入后做分类。

相比于R-CNN,SPP net是使用原始图像作为CNN网络的输入来计算feature map(R-CNN中是每个Region Proposal都要经历一次CNN计算),这样就大大减少了计算量。另外,SPP net中Region Proposal仍然是通过选择性搜索等算法在输入图像中生成的,通过映射的方式得到feature map中对应的区域,并对Region Proposal在feature map中对应区域做空间金字塔池化。通过空间金字塔池化操作,对于任意尺寸的候选区域,经过SPP后都会得到固定长度的特征向量。



Fast R-CNN

使用SPP net相比于R-CNN可以大大加快目标检测速度,但是依然存在着一些问题(这些问题是从Fast R-CNN的论文中看的,现在还不是很理解):

1. 训练分多个阶段,步骤繁琐(微调网络+训练SVM+训练边框回归器);

2. SPP net在微调网络的时候固定了卷积层,只对全连接层进行微调(也即微调算法不能调节空间金字塔池化层前面的卷积层);

上图中文献[11]指的是SPP net的论文。

Fast R-CNN做的几点Contribution是(来源Fast R-CNN论文):

1. 比R-CNN和SPP net更高的检测精度(mAP);

2. 训练过程是端到端的(Sigle-stage),并使用了一个多任务的损失函数(也即将边框回归直接加入到CNN网络中后,Fast R-CNN网络的损失函数包含了Softmax的损失和Regressor的损失);

3. 训练过程可以更新所有的网络层;

由于在SPP net中,反向传播算法不能对空间金字塔池化层前面的卷积层进行微调(论文中说的是BP算法在经过SPP池化层时传播效率非常低,这一点还不理解),Fast R-CNN引入了RoI 池化层(相当于是一层SPP),对于图像中的Region Poposal(也即RoI),通过映射关系(图中的RoI projection)可以得到feature map中Region Proposal对应的区域。RoI Pooling层的操作是将feature map上的RoI区域划分为7×7的窗口,在每个窗口内进行max pooling,然后得到(7×7)×256的输出,最后连接到全连接层得到固定长度的RoI特征向量。前面得到的RoI特征向量再通过全连接层作为Softmax和Regressor的输入。



Faster R-CNN


在前面三种目标检测框架中(R-CNN,SPP net,Fast R-CNN),Region Proposal都是通过区域生成的算法(选择性搜索等)在原始输入图像中产生的,不过在SPP net及Fast R-CNN中都是输入图像中的Region Proposal通过映射关系映射到CNN中feature map上再操作的。

Fast R-CNN中RoI池化的对象是输入图像中产生的proposal在feature map上的映射区域,而Faster R-CNN相比于Fast R-CNN做的改进则是利用RPN来产生候选区域(也即通过RPN产生的Region Proposal映射到feature map中再作为RoI池化层的输入)。

RPN网络产生Region Proposal的方式是在feature map中采用滑动窗口的方式在每个滑动位置上产生大小及长宽比不同的9个锚点框(其实就是在原始输入图像上)。3×3的滑动窗口对应的每个特征区域同时预测输入图像3种尺度3种长宽比的Region Proposal,这种映射机制称为anchor。

文章被以下专栏收录

    研究相关:机器学习,计算机视觉,深度学习; 每周分享一个算法(含实现)或研究方向相关论文分析一篇;