faster rcnn 中核心部分RPN网络的整理与理解

学习fasterrcnn检测已经有一段时间了,最近才把核心的RPN部分进行的理解和整理,理解的偏差还请各位大神指正, 

RPN(RegionProposal Network)区域生成网络

 1.  在五层conv,poolling,relu之后,取出conv5的输出,送给RPN网络;

layer {

 name: "rpn_conv1"

 type: "Convolution"

 bottom: "conv5"

 top: "rpn_conv1"

 param { lr_mult: 1.0 }

 param { lr_mult: 2.0 }

 convolution_param {

   num_output: 256

   kernel_size: 3 pad: 1 stride: 1

   weight_filler { type: "gaussian" std: 0.01 }

   bias_filler { type: "constant" value: 0 }

  }

}

layer {

 name: "rpn_relu1"

 type: "ReLU"

 bottom: "rpn_conv1"

 top: "rpn_conv1"

}

我们只需要一个3*3*256*256这样的一个4维的卷积核,就可以将每一个3*3的sliding window 卷积成一个256维的向量,相当于feature map每个点都是256-d。

   anchors。按照尺度变换(128×128, 256*256,512*512,2:1, 1:1, 1:2)计算这256维向量每个像素的9个anchor,所谓anchors,实际上就是一组由rpn/generate_anchors.py生成的矩形。直接运行generate_anchors.py得到以下输出:

[[ -84.  -40.  99.   55.]

 [-176.  -88.  191. 103.]

 [-360. -184.  375.  199.]

 [ -56.  -56.  71.   71.]

 [-120. -120.  135.  135.]

 [-248. -248.  263.  263.]

 [ -36.  -80.  51.   95.]

 [ -80. -168.   95. 183.]

 [-168. -344.  183.  359.]]。

2.

 计算每个像素256-d的9个尺度下的值,得到9个anchor,我们给每个anchor分配一个二进制的标签(前景背景)。我们分配正标签前景给两类anchor:1)与某个ground truth(GT)包围盒有最高的IoU重叠的anchor(也许不到0.7),2)与任意GT包围盒有大于0.7的IoU交叠的anchor。注意到一个GT包围盒可能分配正标签给多个anchor。我们分配负标签(背景)给与所有GT包围盒的IoU比率都低于0.3的anchor。非正非负的anchor对训练目标没有任何作用,由此输出维度为(2*9)18-d,anchor(label和概率)一共18维。

layer {

 name: "rpn_cls_score"

 type: "Convolution"

 bottom: "rpn_conv1"

 top: "rpn_cls_score"

 param { lr_mult: 1.0 }

 param { lr_mult: 2.0 }

 convolution_param {

   num_output: 18   # 2(bg/fg) *9(anchors)

   kernel_size: 1 pad: 0 stride: 1

   weight_filler { type: "gaussian" std: 0.01 }

   bias_filler { type: "constant" value: 0 }

  }

}

对前景anchor使用softmax进行分类,得到anchor类别以及softmax score。

3.

前2.)中已经计算出foreground anchors,使用bounding box regression回归得到预设anchor-box到ground-truth-box之间的变换参数,即平移(dx和dy)和伸缩参数(dw和dh),由此得到初步确定proposal。

Boundingbox regression原理http://blog.csdn.net/elaine_bao/article/details/60469036

4.

将预proposal利用feat_stride和im_info将anchors映射回原图,判断预proposal是否大范围超过边界,剔除严重超出边界的。

按照softmax score进行从大到小排序,提取前2000个预proposal,对这个2000个进行NMS(非极大值抑制),将得到的再次进行排序,输出300个proposal。

继续:

对300个proposal进行ROIpooling提取出固定长度的特征送入全连接层

再进行softmax分类计算得分,进行boundingbox regression得到精确位置。


附上参考的连接,

http://www.cnblogs.com/zf-blog/p/7286405.html

http://lib.csdn.net/article/deeplearning/61641

http://blog.csdn.net/mllearnertj/article/details/53709766


如理解有偏差请留言指正!谢谢
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值