Faster R-CNN

2017-07-09  本文已影响0人  深度厌学

Fast R-CNN提出后,RP的生成成为了计算瓶颈(SS在CPU下需要2s)。Faster R-CNN中的RPN网络就是解决这个问题。

RPN

用n * n(3 * 3)大小的窗口在conv 特征映射上滑动,每个窗口生成一个低维向量(256-d for ZF and 512-d for VGG)。这向量后接两个并行的全连接层,一个是分类层(2k维,2类,9个anchor),一个是回归层(4k维,(k=9, 3 * 3, 3尺度,3长宽比))

由于窗口是滑动的,参数也是共享的,所以整个过程可以用全卷积来实现:

conv(3,3,512,1) -> conv(1,1,18,1)和conv(1,1,36,1)

损失函数 

称anchor是正的,若与某个GT的IOU是最高的或大于0.7;

称anchor是负的,若与所有的GT的IOU都小于0.3;

其余的anchor非正非负,损失函数不计算这些anchor。

注意这个和Fast R-CNN的定义不一样。

p是预测的包含物体的概率值,p*=1 if anchor 是正 else 0

Ncls=256(batch size), Nreg~2400(anchor size),λ=10,Lreg=R(t-t*),R是Smooth L1.


优化

每个batch(256)的anchor都来自同一张图片,正:负 = 1:1,如果正样本少于128,则用负样本补足。


Faster R-CNN训练

1. RPN训练

2. 使用RPN得到的框训练Fast R-CNN

3. 将Fast R-CNN的卷基层权重赋予 RPN的卷基层权重,只调整RPN独有层权重。

4. 固定Fast R-CNN的共享层, 只FT全连接层权重。

实现细节

1. 将同比例放到图片,使得最短边s = 600。

2. 出于速度和准确率的权衡,训练和测试都是单尺度的。

3. 三尺度(128 * 128,256 * 256, 512 * 512),三长宽比(1:1, 1:2, 2:1)。对于尺度大于感受野,文中的解释是:人能在物体中部可见的情况下,大致推断出该物体的类别

4. 训练时不考虑超出边界的anchor,因为如果把这些anchor加到loss里,会导致训练不收敛。测试的时候如果anchor超出边界,就把它们裁剪至边界。

5. 对RPN提出的RP进行NMS,阈值是0.7,这样就剩下2K左右的RP,然后取top-N(300)来检测。

实验

参考文献

1. Faster R-CNN [code]

2. Fast R-CNN

上一篇下一篇

猜你喜欢

热点阅读