Two-stage:从R-CNN到Faster R-CNN

2019-07-20  本文已影响0人  Elijah_cs

1. R-CNN

概览

R-CNN

R-CNN训练的过程如上图:

1 输入图片,通过selective search获取2000个可能包含目标的区域PR。
2 将PR变形缩放到227*227的大小输入到CNN网络中进行特征提取
3 将提取出的特征输入到svm中进行分类

接下来我们对每一部分进行细致的分析。

1.1 Region Proposal

候选区域的提取使用的是传统的selective search方法,其利用像素之间的关系来合并得到可能存在的区域,比滑窗法高效得多,但是计算量很大并且其候选框存在大量的冗余,后续的算法利用深度学习对RP进行了改进。

2特征提取

2.1 图片缩放

实际上,在第一步RP获得的候选框的大小不可能完全一样,然后我们使用的CNN网络由于最后连接了全连接层,那么我们输入的图片的大小必须是一致的(强行变形到一致会导致特征的损失,后续有网络对此进行了优化),那么输入之前我们把这些区域缩放到227*227,缩放的方法如下:

2.2特征提取CNN
Alexnet.png

特征提取网络是基于Alex net的变形,AlexNet的结构如图,首先这个Alexnet的权重是在ImageNet数据集上训练好的,我们只需要把softmax的1000个类别改为21 (数据集为Pascal Voc格式,其中有20个类别,背景也算一个负类,一共21),然后在poscal voc数据集上做fine-tuning,使得alexnet的权重你和当前数据集。

3 SVM分类

对每一个类别,训练一个SVM分类器,每个SVM的输入为Alexnet中最后一个全连接层FC7的4096维向量,那么对于每个候选框来说,最终都会输出一个4096维向量来送入到SVM进行分类,那么就会得到2000个分类,其中对于同一个目标可能会存在多个候选框,那么我们就要做一个NMS(non-maximun suppression),得到最佳的预测框。对于位置的预测,我们训练一个回归器,输入的数据是Pool5的特征和每个样本对的坐标和长宽。后续深入探讨下Bbox回归

一些重要的细节

1.正负样本
在fine-tuning 中,对于得到的2000个RP,如果某个RP与GT(ground truth)重叠的部分最大的那个其IOU大于0.5,那么RP可以作为这个GT的正样本,否则为负样本,另外,GT也作为正样本。
在训练SVM的过程中,IOU大于0.7的认定为正样本,IOU小于0,3的认定为负样本。
在fine-tuning与SVM训练中之所以IOU不一样是因为:

  1. 回归
    用Alexnet中pool5的6*6*256维特征和bounding box的GT来训练回归,每种类型的回归也是单独训练的。输入的是pool5的特征和样本对的坐标(x,y)和长宽w, h。另外只跟和GT的IOU超过某个阈值,并且最大的RP进行回归,其余的RP不参与回归。
    假设我们现在有:候选框P,对应的ground truth :G,以及我们希望获得的预测结果\hat G,那么我们希望\hat G尽可能接近G。通过pool5层的特征X做线性变换得到函数F(X),输出平移量和缩放量,从而得到\hat G.
    详细的叙述下:
         P = (P_x,P_y,P_w,P_h)
         G = (G_x,G_y,G_w,G_h)
         \hat G = ({\hat G}_x,{\hat G}_y,{\hat G}_w,{\hat G}_h)
    我们提出了一个候选框P时,发现它与G IOU较低,那么可以把从候选框P到通过平移和缩放使得与G的IOU尽量大,那么其实学习的是一个平移量(\Delta x,\Delta y),移动P_x,P_y,使得其尽量靠近G_x,G_y,还需要学习一个缩放量\Delta w, \Delta h,让P_w,P_h按照一定比列缩放,使得最终的预测框\hat GG的IOU尽可能的大。

输入:
样本值:输入的是P区域经过Alexnet网络在pool5的特征向量
标签值:GT: G_* = ({G_x,G_y,G_w,G_h})
输出:平移以及缩放尺度 \Delta x, \Delta y, \Delta w,\Delta h

训练过程:

2. SppNet

R-CNN缺陷与SppNet的改进

pipeline

上图是R-CNN和SppNet的pipeline,我们只讨论SppNet。输入一张图片Image到CNN中,得到全图的feature map,让2000个候选框RP与feature map直接映射,可以直接得到RP的特征(这里通过映射得到feature,不用经过CNN了,因为是直接从计算好的全局的feature map中得到的),然后将这个RP对应的feature map输入到空间金字塔变换层,输出一个固定大小的向量给到fc6,fc7中,进行分类。实际上,我们只需要着重关注两个点:RP到全局feature map的映射,空间金字塔变换层的结构。

RP->feature map

原始图片到feature map的映射要从感受野(receptive field)说起,感受野即特征图上一点在原始图像上对应的面积,之前我们找到一个图片,给定一层CNN的filter,stride,经过运算后可以得到其运算结果feature map的大小,实际上,它们的坐标之间是有关联的,我们以下图为例:


ec.jpg

在这个图中,假定Conv1为feature map1,Conv2为feature map2,原始图像大小为7*7,假定从在原图上那四个框框起来的面积为RP,我们用两个坐标来确定他的位置:(x_{min},y_{min}),(x_{max},y_{max}) = (0,0), (5,5)第一次的运算filter1 = 3,stride1=2,那么RP在Conv1上其坐标为( \hat x_{min\_conv1},\hat y_{min\_conv1}),(\hat x_{max\_conv1},\hat y_{max\_conv1}) = (0,0), (2,2)
第二次的运算filter1 = 2,stride1=1,那么RP在Conv2上其坐标为( \hat x_{min\_conv2},\hat y_{min\_conv2}),(\hat x_{max\_conv2},\hat y_{max\_conv2}) = (0,0), (0,0)
由这个例子可知,给定原图上的一个位置RP其坐标,可以计算出其在feature map上的坐标。

Spatial Pyramid Pooling

如下图,假设RP在feature map上得到的特征向量为N*N*256,那么先对N*N的面积做一个maxpooling,得到一个1*256向量,再把N*N分成四块,每块做maxpooling,得到一个4*256维向量,然后把N*N分成16块,每块做maxpooling,得到一个16*16的向量,然后把这三个向量合并起来得到一个21*256维向量输入到FCN中,可以看到,得到这个21*256维向量和尺寸N*N没有关系,输出的都是固定的大小,划分为4块或者是16块有时候并不一定可以均分,有固定的公式,这里就不展开。

SPPNET2.PNG

3. Fast R-CNN

SppNet缺点

ROI layer

ROI层实际上就是单尺度的一个SppNet,就是把RP的feature map直接划分为H*W大小的块,然后直接去做maxpooling那么得到的一定是一个固定大小的向量。

4. Faster R-CNN

实际上,Fast R-CNN最耗时间的地方是在Region proposal,通过selective search获取2000个候选区RP,Faster R-CNN提出了RPN网络(region proposal network)来提取特征,使得R-CNN系列形成了一个完整的end-to-end的网络结构。Faster R-CNN = RPN +Fast R-CNN .

参考:
[1] RPN网络通俗理解
[2] 目标检测(一)——目标检测综述

上一篇 下一篇

猜你喜欢

热点阅读