您的位置:首页 > 其它

Faster R-CNN 简单梳理

2016-11-07 22:22 405 查看

Faster R-CNN 简单梳理

作者:xg123321123

出处:http://blog.csdn.net/xg123321123/article/details/53073388

声明:版权所有,转载请联系作者并注明出处

从R-CNN到Fast R-CNN,再到Faster R-CNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)被统一到一个深度网络框架之内。所有计算没有重复,全部都在GPU中完成,大大提高了运行速度。

三个框架的示意图如下:



1 亮点

Faster R-CNN可以看做“区域生成网络+Fast R-CNN“的系统,其中区域生成网络代替了Fast RCNN中的Selective Search方法。

Faster R-CNN解决了三个问题:

如何设计区域生成网络

如何训练区域生成网络

如何让区域生成网络和Fast R-CNN网络共享特征提取网络

2 区域生成网络(RPN)

先使用VGG等现有模型提取特征,然后使用一个小的网络在卷积最后得到的这个特征图上进行滑动扫描,这个滑动的网络每次与特征图上n*n 的窗口全连接,然后映射到一个低维向量,最后将这个低维向量送入到两个全连接层,对特征图上所有可能的候选框进行分类和回归。

特征提取

原始特征提取包含若干层Conv+ReLu,直接套用ImageNet上常见的分类模型即可(Faster R-CNN试验了两种网络:5层的ZF,16层的VGG-16)。

然后“额外”添加一个conv+relu层,输出256维的特征。



anchor生成

为方便举例,由VGG等现有模型提取的特征图,在这里我们将其看做尺度为51*39的256通道的图像,然后在这个特征图上进行滑窗操作。

在特征图上进行的滑窗操作,相当于映射回原图后,Sliding Window中心对应的原图上的中心,在不同尺寸和比例的anchor区域中进行特征提取(这个对应关系是在实现代码里事先确定好的);同时值得一提的是,作者实验指出,映射回原图的anchor比Sliding Window相应的感受野大一点也是可以的,因为有可能像人一样有预测边缘的能力。(感受野计算,见这里

另一方面,Sliding Window的尺寸为3*3的滑窗操作可以看做3*3的卷积核与特征图进行卷积操作(也就是那“额外”的conv+relu层),那么这个3*3的区域卷积后可以获得一个256维的特征向量。

这个256维的向量提取的特征就对应着一个Sliding Window中心映射回原图后,9个anchor所在的区域。

当然我们知道,Sliding Window在不断滑动,所以还有很多这样的256维向量。



论文中,3*3滑窗中心点位置,对应预测输入图像3种尺度{1282,2562,5122},3种长宽比{1:1,1:2,2:1}共9个可能的候选窗口。

这些候选窗口就称为anchors。

下图示出51*39个anchor中心,以及9种anchor示例。



窗口分类和位置精修

分类层(cls_score)输出每一个位置上,9个anchor属于前景和背景的概率;

窗口回归层(bbox_pred)输出每一个位置上,9个anchor对应窗口应该平移缩放的参数。

对于每一个位置的Sliding Window(没个都生成一个256维特征向量)来说,分类层从256维特征中输出属于前景和背景的概率,所以对应的最后一层卷积numout为18;窗口回归层从256维特征中输出4个平移缩放参数,所以对应的最后一层卷积numout为36。

就局部来说,这两层是全连接网络;

就全局来说,由于网络在所有位置(共51*39个)的参数相同,所以实际用尺寸为1×1的卷积网络实现。

需要注意的是:并没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。

训练样本

对于训练集中每张图像:

a. 对每个标定的真值候选区域,与其重叠比例最大的anchor记为前景样本

b. 对a)剩余的anchor,如果其与某个标定重叠比例大于0.7,记为前景样本;如果其与任意一个标定的重叠比例都小于0.3,记为背景样本

c. 对a),b)剩余的anchor,弃去不用。

d. 跨越图像边界的anchor弃去不用

3 共享特征&网络训练

如果分别训练两种不同任务的网络,即使它们的结构、参数完全一致,但各自的卷积层内的卷积核也会向着不同的方向改变,导致无法共享网络权重。

为了实现网络权重的共享,Faster R-CNN提出了一个复杂但是有效的训练方式。

首先,区域生成网络(RPN)和Fast R-CNN都需要一个原始特征提取网络(下图灰色方框)。这个网络使用ImageNet的模型得到初始参数W0。



然后,用交替优化来学习共享的特征,主要有4步:

第一步: 用ImageNet模型初始化,得到W0,从W0开始,独立训练一个RPN网络,用RPN提取训练集上的候选区域;

第二步: 仍然用ImageNet模型初始化,得到W0,从W0开始,独立训练一个Fast R-CNN网络,但是使用上一步RPN网络产生的proposal作为输入,得到的网络权重为W1,此时,两个网络每层的参数完全不共享;

第三步:使用第二步的Fast R-CNN网络权重W1初始化一个新的RPN网络,但是把RPN和Fast R-CNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN特有的那些网络层,重新训练,此时,两个网络已经共享了所有公共的卷积层;

第四步:仍然固定共享的那些网络层,把Fast R-CNN特有的网络层也加入进来,只微调 Fast R-CNN 特有的网络层形成一个unified network,继续训练;此时,该网络已经实现我们设想的目标,即网络内部预测proposal并实现检测的功能。

回顾

Faster R-CNN最大贡献是把proposal部分从网络外边嵌入了网络里边,从此一个网络模型即可完成end-to-end的检测任务而不需要我们在前面手动先执行一遍proposal的搜索算法。

几年前比较流行的检测算法,比如HOG+SVM和DPM之类的,同样是需要用分类器逐个对一些矩形框里提取出来的特征进行分类,只不过那时是全图设置好stride、scale等参数然后搜索,不像selective search这些算法会去对图像进行内容分析,然后输出一些可疑的矩形候选框。

本篇博客主要参考自

《RCNN, Fast-RCNN, Faster-RCNN的一些事》

《Faster RCNN算法详解》

《RCNN,Fast-RCNN,Faster-RCNN》

《faster-rcnn 之 RPN网络的结构解析》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: