【目标检测】对Faster-RCNN论文的一些理解

1.faster-RCNN的核心思想

faster-RCNN作为rcnn系列目标检测算法的最终版,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression,classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显,真正实现了end to end的训练,使得模型的推断速度大大增加。faster-RCNN可以看作RPN+fast-RCNN,其与fast-RCNN的主要区别是去除通过SS方法产生region proposal,而是由RPN网络(即基于区域生成网络的目标检测算法)来产生。

即faster-RCNN的主要贡献如下:

1.如何设计区域生成网络

2.如何训练区域生成网络

3.如何让区域生成网络与fast-rcnn共享参数

2.faster-RCNN的框架

其中有两个主要组成部分:

1.区域生成网络 RPN,这是一个全卷积网络。

2.Fast R-CNN检测模块。 基于RPN生成的proposal检测并进行分类。

3.RPN介绍

其实rpn的本质可以理解为基于滑动窗口的无类别检测器。这个网路可以单独拿出来使用,比如检测单一物体如人脸等。

使用的方法本质上就是滑动窗口,因为anchor机制和边框回归可以得到多尺度多长宽比例的region proposal。

RPN网络也是全卷积网络,可以针对生成建议框的任务进行端到端的训练,能够同时预测出object的类别和边框,只是在CNN上额外增加了两个卷积层(全卷积层cls和reg)。

我们以论文中的ZF5网络为例,在这里有个很重要的细节:

  1. 所有的conv层都是: kernel\_size=3 , pad=1 , stride=1
  2. 所有的pooling层都是: kernel\_size=2 , pad=0 , stride=2

这样就保证了卷积前后feature map的size不变,也就是只有4次2*2的池化,那么到了conv5的feature map中的每一个位置,其实是对应原始图像中16*16的区域的!在论文中对ZF5进行实验:

RPN的具体流程如下:使用一个小网络在最后卷积得到的特征图上进行滑动扫描,这个滑动网络每次与n*n(论文中n=3)的窗口全连接(图像的有效感受野很大,ZF是171像素,VGG是228像素),然后映射到一个低维向量(256d for ZF / 512d for VGG),最后将这个低维向量送入到两个全连接层,即bbox回归层(reg)和box分类层(cls)。sliding window的处理方式保证reg-layer和cls-layer关联了conv5-3的全部特征空间。原图600*1000经CNN卷积后,在CNN最后一层(conv5)得出的是40*60大小的特征图,对应文中说的典型值为2400。若特征图大小为W*H,则需要W*H*K个anchor,本文中需要40*60*9≈2k个。在RPN网络中,我们需要重点理解其中的anchors概念,Loss fucntions计算方式和RPN层训练数据生成的具体细节。

 

Anchor机制

要注意,3*3卷积核的中心点对应原图(re-scale,源代码设置re-scale为600*1000)上的位置(点),将该点作为anchor的中心点,在原图中框出多尺度、多种长宽比的anchors。所以,anchor不在conv特征图上,而在原图上。对于一个大小为H*W的特征层,它上面每一个像素点对应9个anchor,这里有一个重要的参数feat_stride = 16, 它表示特征层上移动一个点,对应原图移动16个像素点(看一看网络中的stride就明白16的来历了)。把这9个anchor的坐标进行平移操作,获得在原图上的坐标。对于每个anchor的rpn-label,是根据与gt的IOU来设置的,论文的设置如下:

a. 对每个标定的真值候选区域,与其重叠比例最大的anchor记为前景样本 
b. 对a)剩余的anchor,如果其与某个标定重叠比例大于0.7,记为前景样本;如果其与任意一个标定的重叠比例都小于0.3,记为背景样本 
c. 对a),b)剩余的anchor,弃去不用。 
d. 跨越图像边界的anchor弃去不用

关于anchor的实现代码:https://blog.csdn.net/sinat_33486980/article/details/81099093

训练

RPN通过反向传播与随机梯度下降训练。依照FastR-CNN中的“image-centric”采样策略训练这个网络。每个mini-batch由包含了许多正负样本的单个图像组成。我们可以优化所有anchor的损失函数,但是这会偏向于负样本,因为它们是主要的。每一个mini-batch包含从一张图像中随机提取的256个anchor(注意,不是所有的anchor都用来训练),前景样本和背景样本均取128个,达到正负比例为1:1。如果一个图像中的正样本数小于128,则多用一些负样本以满足有256个Proposal可以用于训练。新增的2层参数用均值为0,标准差为0.01的高斯分布来进行初始化,其余层(都是共享的卷积层,与VGG共有的层)参数用ImageNet分类预训练模型来初始化。

代价函数

同时最小化两种代价: 
a. 分类误差 

 

b. 前景样本的窗口位置偏差  

测试

输入一张图片,由rpn产生区域建议框后根据scores进行非极大值抑制,然后选择得分最高的300个proposal送入检测网络。

 

RPN的平移不变性

在计算机视觉中的一个挑战就是平移不变性:比如人脸识别任务中,小的人脸(24*24的分辨率)和大的人脸(1080*720)如何在同一个训练好权值的网络中都能正确识别。若是平移了图像中的目标,则建议框也应该平移,也应该能用同样的函数预测建议框。

传统有两种主流的解决方式:
第一、对图像或feature map层进行尺度\宽高的采样;
第二、对滤波器进行尺度\宽高的采样(或可以认为是滑动窗口).

但Faster R-CNN解决该问题的具体实现是:通过卷积核中心(用来生成推荐窗口的Anchor)进行尺度、宽高比的采样,使用3种尺度和3种比例来产生9种anchor。

窗口分类和位置精修

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

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

对于每一个位置来说,分类层从256维特征中输出属于前景和背景的概率;窗口回归层从256维特征中输出4个平移缩放参数。

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

4.RPN与Fast-RCNN的权重共享

上面介绍了RPN,并且我们提到faster-RCNN实现了endtoend的单个网络训练,那么faster-RCNN是如何做到两个网络合并成一个网络呢,论文中是如下实现的:

1.先使用ImageNet初始化RPN,即在原ImageNet的基础上增加两个卷积层,权重初始化为均值为0,方差为0.001的高斯分布,偏移设置为0,进行一波fine-tuning。

2.用训练好的RPN产生的候选框训练fast-rcnn,fast-rcnn同样使用ImageNet进行训练初始化,这个时候两个网络还没有进行参数共享。

3.用fast-rcnn网络初始化rpn,这个时候固定前面的卷积层,只微调RPN后面的两层卷积层(实现参数共享)

4.用RPN网络产生的候选框再次训练fast-rcnn,这个时候固定前面的卷积层,只微调后面的全连接层的参数。
注意:第一次迭代时,用ImageNet得到的模型初始化RPN和Fast-R-CNN中卷积层的参数;从第二次迭代开始,训练RPN时,用Fast-R-CNN的共享卷积层参数初始化RPN中的共享卷积层参数,然后只Fine-tune不共享的卷积层和其他层的相应参数。训练Fast-RCNN时,保持其与RPN共享的卷积层参数不变,只Fine-tune不共享的层对应的参数。这样就可以实现两个网络卷积层特征共享训练。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值