cs231n笔记(11+)--faster-rcnn中,对RPN的理解

 

2017年05月28日 00:45:55 美利坚节度使 阅读数:20487更多

个人分类: 深度学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ying86615791/article/details/72788414

 

cs231n笔记(11+)--faster-rcnn中,对RPN的理解_第1张图片

原文中rcnn部分的截图

 

 

cs231n笔记(11+)--faster-rcnn中,对RPN的理解_第2张图片

图片来自网上,黑色是滑动窗口的区域,就是上图的红色区域的sliding window其他颜色 9种窗口 就是anchor机制生成的9种区域

这里要把sliding window和卷积层的滑动区别开,sliding winsow的stride步长是1!(想到经典的harr+adaboost人脸检测)

sliding window只是选取所有可能区域,并没有额外的什么作用!

 

以下是我对faster-rcnn中的RPN的理解:

经过前面的网络 生成了一个 多通道的特征图,接下来就是通过在这些特征图上应用 滑动窗口 加 anchor 机制 进行目标区域判定和分类了,

目标检测,就是包括 目标框定 和 目标判定。

所以 这里的 滑动窗口 + anchor的机制 的功能就 类似于 fast rcnn 的selective search 生成proposals 的作用

rpn网络用来生成proposals

用原文的话讲“we slide a small network over the conv feature map output by the last shared conv layer”

1.RPN是一个 卷积层(256维) + relu + 左右两个层的(clc layer 和 reg layer)的小网络
  应用在滑动窗口区域上的 , 所有的滑动窗口共享这个 RPN
  这个卷积层 对比 普通的卷积层
  1,它是一个将 n x n x channels的输入 通过256个 n x n 大小的卷积核 生成 1 * 1 * 256的feature map,即最后是256维的特征
  2,它的输入就是滑动窗口nxn对应的特征图区域,经过它卷积后 特征图变成1 x 1了
  3,由于此时输出的是 1 * 1 *256,所有cls layer 和reg layer是用 1 x 1的卷积核进行进一步的特征提取,
这里1 x 1卷积核卷积时,对各个通道都有不同的参数,因为输入又是1 x 1的图片,所以相当于全连接的功能,相当于把 1 * 1 * 256展平成 256,然后进行全连接
2.关于 anchor机制
  anchor机制 就是 在n x n的滑动窗口上,进一步生成k种不同大小的可能区域
  滑动窗口 加 anchor机制 基本把目标可能出现的区域都涵盖了

  所以 滑动窗口 加 anchor 就替代了 滑动窗口加金字塔 的功能

 

3.RPN损失计算
  RPN提取出的256d特征是被这k种区域共享的
,输给clc layer和reg layer后,只要一次前向,就同时预测k个区域的前景、背景概率(1个区域2个scores,所以是2k个scores),以及bounding box(1个区域4个coordinates,所以是4k个coordinates),具体的说:

clc layer输出预测区域的2个参数,即预测为前景的概率pa和pb,损失用softmax loss(cross entropy loss)(本来还以为是sigmoid,这样的话只预测pa就可以了?)。需要的监督信息是Y=0,1,表示这个区域是否ground truth

reg layer输出预测区域的4个参数:x,y,w,h,用smooth L1 loss。需要的监督信息是anchor的区域坐标{xa,ya,wa,ha} 和 ground truth的区域坐标{x*,y*,w*,h*}

计算损失时,我们需要确定k个区域中的各个区域是不是有效的,是前景还是背景。有效的区域才计算损失。上面的监督信息:Y,{xa,ya,wa,ha}(k个),{x*,y*,w*,h*}(1个)是根据文章中的样本产生规则得到的:

对于这k个区域
1 分配正标签给满足以下规则的区域
1.1 与某个ground truth(GT)的IoU最大的区域
1.2 与任意GT的IoU大于0.7的区域
(使用规则2基本可以找到足够正样本,但对于所有区域与GT的IoU都不大于0.7,可以用规则1)
(一个GT可能分配正标签给多个anchor,具体怎么分配?)
2 分配负标签给与所有GT的IoU都小于0.3的区域。

非正非负的区域不算损失,对训练没有作用
RPN只对有标签的区域计算loss。

最后
参与训练RPN的区域都有参与最后rcnn的训练,只是只有RPN预测为前景的区域 在rcnn才有计算回归损失

在使用faster rcnn的时候,rpn预测为前景的区域才是proposal,然后按照softmax score从大到小排序选出前2000个区域,在用NMS进一步筛选出300个区域,然后输给后面的rcnn进行预测(注意此时rcnn的预测类别不包括背景,已经RPN输出的已经默认是前景了

你可能感兴趣的:(卷积神经网络)