深度学习系列之Faster R-CNN 个人总结

在Fast R-CNN中,说检测速度有显著的提升。这是没错,但如果算上用selective search生成region proposal的时间,其实速度提升并不是特别大。而且这个过程是CPU上进行的,显得不伦不类。

因此,Faster R-CNN提出了RPN(region proposal network),代替了费时的selective search,利用共享的卷积网络来预测建议框(数量限定在300个,不同于之前的2000个),这次是真的大幅提升了目标检测的速度。而且这个过程是在GPU中完成。

一、RPN(Region Proposal Networks)

RPN是Faster R-CNN的特色,摒弃了预先利用ss计算proposal的工作。

首先,我们将任意尺寸的image输入到CNN,可以得到最后一层conv feature map
引用参考文献[1]中的图:
这里写图片描述
对conv feature map上每个点,我们生成9个anchor(3个不同尺度,3个不同的aspect ratio)。

什么是anchor呢?
我们把不同尺度和宽高比的sliding window称为anchor。默认在每个位置使用3种尺度和3个宽高比,形成9个anchor。对于一张W * H的feature map,总共有9 * W * H个anchor。

这里之前一直有一个困惑我的地方:anchor到底是feature map上的?还是image上的?
参考了很多文献后,博主认为:首先feature map上每个点都可以映射到image上一片感受野,以感受野中心像素为中心,生成anchor。因此anchor是image上的,但是由feature map上的点产生的。

anchor的设置与计算
我们做目标检测,需要根据自己数据集中object的尺度设置合理的anchor。需要设置的参数如下:

base_size=10
ratios = [0.5,1,2]
scales = [4,8,12]

这里,我们有一个base_size =10, 面积为100,先算3个值[sqrt(100/2) , sqrt(100), sqrt(100*2)],即[7 , 10, 14]。这时候,考虑到ratio,再算3个值[7*2, 10*1 , 14/2],即[14,10,7]。此时已经得到了3个anchor了[(7x14), (10x10),(14x7)]。再考虑我们设置了3个尺度,得到最终的9个anchor,这9个anchor对应input img上的大小。
这里写图片描述
将conv feature map输入到RPN,RPN会处理其对应到image上的anchor,并在image上输出proposals,每个proposal都有一个类得分。

下面将讲述RPN如何得到proposal的。
每个anchor,其实都有两个输出。第一个输出是2分类的概率分数(是object的分数,不是object的分数),这里不关注是具体哪一类,只关注是不是object。第二个输出是bbox回归值(Δx_center、Δy_center、Δwidth、Δheight),用于调整anchor,使其变成最终输出的proposal
这里写图片描述

训练RPN

制作样本:
我们为两种anchor贴正标签: (1)与GT的IoU最高的anchor。 (2) 与GT的IoU大于0.7的anchor。
第(1)种是为了防止所有IoU都低于0.7时至少还有正样本。

我们为一种anchor贴负标签: 与所有GT的IoU低于0.3的anchor

介于两者之间的anchor以及跨越图像边界的anchor弃之不用。

在一张image上的anchor中随机采样256个样本,其中正负样本比例为1:1,如果正样本少于128,则用负样本填补。
为什么1:1?而不是所有anchor?
因为所有anchor的话,负样本会过多,导致最终模型对正样本的预测准确率很低。

损失函数
这里写图片描述
其中,i表示第i个anchor,pi表示anchor是object的概率。当anchor是正样本,pi*为1,否则为0. (二分类,训练时是有IoU决定0或1,测试时则是由概率得分决定0或1)
ti表示predict box相对于anchor的偏移量(第一次迭代为0),ti*表示GT相对于anchor的偏移量。
Nreg和Ncls都是其平衡两个损失的作用,和lambda一样。
这里写图片描述
分类损失和fast R-CNN类似,正样本是object的概率得分越大,loss越小。

回归损失:(仅仅对正样本激活, pi*=1时)
这里写图片描述
其中R()是smooth L1 loss。预测值的偏移量与GT的偏移量越相近,则loss越小。
注:负样本没有回归损失。

NMS(非极大值抑制)

由于anchor经常重合,所以proposal也是。利用NMS,按分数由高到低排列proposal,设置一个IoU阈值,把IoU高的且分数没自己高的proposal给踢掉。后面的过程就不写了。之前已经多次写过NMS了。最后,取300个得分最高的作为最终RPN输出的proposal。

二、Faster R-CNN

RoI pooling
将proposal映射到conv feature map上,进行RoI pooling,后面fast R-CNN一样。
这里写图片描述
这里写图片描述

三、训练

分4步

1.训练RPN(由ImageNet初始化)

2.使用步骤1生成的proposal作为输入,训练单独的检测网络,即Fast R-CNN(由ImageNet初始化)。到目前为止,两者没有共享卷积层

3.使用第2步的网络初始化RPN,但是固定共享的卷积层(将共享的卷积层lr=0,即不更新),仅仅微调RPN特有的层。此时,两个网络共享卷积层

4.固定共享层,把Fast R-CNN加入到新的RPN网络中,形成统一的网络。仅仅微调Fast R-CNN。
这里写图片描述
经过这样的训练,即可实现预测proposal+检测。

四、参考文献:

1.http://www.elecfans.com/d/624414.html
2.https://zhuanlan.zhihu.com/p/24916624?refer=xiaoleimlnote
3.http://www.cnblogs.com/skyfsm/p/6806246.html
4.http://blog.csdn.net/wopawn/article/details/52223282

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值