RPN全称是Region Proposal Network,也可理解为区域生成网络,或区域候选网络;它是用来提取候选框的。
在RCNN和Fast RCNN等物体检测架构中,提取候选框的方法通常是传统的Selective Search,比较耗时。
在Faster RCNN中,RPN专门用来提取候选框,这也是RPN第一次被使用;RPN耗时少。
Faster RCNN = RPN + Fast RCNN
RPN网络的任务是找到proposals。输入:feature map。输出:proposal。
RPN总体流程:
feature maps 的每一个点都配9个锚框,作为初始的检测框。重要的事说三遍:
锚框作为初始的检测框!、 锚框作为初始的检测框!、 锚框作为初始的检测框!
虽然这样得到的检测框很不准确,但后面可通过 bounding box regression 来修正检测框的位置。
下面介绍那9个anchor boxes 锚框,先看看它的形状:
这里一共有9个框框,绿色3个,红色3个,蓝色3个。有3种形状,长宽比分别是1:1, 1:2, 2:1
在feature map上,设置了密密麻麻的候选anchor boxes 锚框。为什么会有这么多?因为 feature maps 的每一个点都配9个锚框,如果一共有1900个点,那一共有1900*9=17100个锚框了。
设 feature maps 的尺寸为 W*H,那么总共有 W*H*9个锚框。(W:feature maps的宽;H:feature maps 的高。)
然后用cnn去判断哪些anchor box是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,RPN做的只是个二分类。
关于cnn的模型结构,可以参考下图:
已知anchor box 包含物体称为positive anchors,那怎么调整,才能使得 anchor box 与 ground truth 更接近?
图中红框为positive anchors,绿框为真实框(Ground Truth Box,简称GT)
positive anchors 和GT的梯度可以有dx, dy, dw, dh四个变换表示,bounding box regression通过线性回归学习到这个四个梯度,使positive anchors 不断逼近GT,从而获得更精确的proposal。
bounding box regression 思路,简单一点的,可以先做平移,再做缩放,最终包含物体anchor box和真实框很接近。
通过上面的判断anchor boxes是否包含物体,对有物体的anchor boxes通过回归进行修正它的尺子,最终包含物体anchor box和真实框很接近。RPN会输出一些框框,和这些框框包含物体的概率。
总结一下,Proposal 的输入有三个:
输出为:
RPN 只挑选出了可能包含物体的区域(rpn_rois)以及其包含物体的概率(rpn_roi_probs)。在后续处理中,设定一个阈值 threshold,如果某个ROI包含物体的概率的概率大于阈值,再判断其类别;否则直接忽略。
参考:https://zhuanlan.zhihu.com/p/106192020、https://zhuanlan.zhihu.com/p/31426458
https://www.cnblogs.com/Terrypython/p/10584384.html
本文只提供参考学习,谢谢。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。