特征图51x39x256通过一个3x3的卷积核,s=1,padding=2,得到也是51x39x256的特征图,也就是HxW个256维向量,而锚点并不存在于这张图中,anchor是在原图上的,映射回原图就有HxW个Anchor(锚点),每个anchor为中心,构建9个proposal。
接下来分为两路:
(1)通过1x1的卷积核展平,预测每个anchor_box属于前景和背景的概率,也就是每个anchor有9个anchor_box,每个box都预测属于前景和后景的概率,得到18个feature_map。前景和后景的真值给定是根据当前像素(中心)是否在发ground truth box内。
(2)负责预测位置,每个anchor(锚点,像素点)预测9x4=36个参数
之后就得到的是很多个proposal了。
注意:RPN内部有两个Loss层,一个box的loss,通过减小ground-truth-box与预测的anchor-box之间的差异来进行参数学习,从而使RPN网络中的权重能够学习到预测box的能力。实现细节是每一个位置的anchor-box与ground-truth里面的box进行比较,选择IOU最大的一个作为该anchor-box的真值,若没有,则将之class设为背景(概率值0,否则1),这样背景的anchor-box的损失函数中每个box乘以其class的概率后就不会对bbox的损失函数造成影响。
另一个loss是分类loss,该处的loss是指代的前景背景并不是实际的框中物体类别,它的存在可以使得在最后生成roi时能快速过滤掉预测值是背景的box。也可实现bbox的预测函数不受影响,使得anchor-box能(专注于)正确的学习前景框的预测,正如前所述。
所以,综合来讲,整个RPN的作用就是替代了以前的selective-search方法,因为网络内的运算都是可GPU加速的,所以一下子提升了ROI生成的速度。可以将RPN理解为一个预测前景背景,并将前景框定的一个网络,并进行单独的训练,实际上论文里面就有一个分阶段训练的训练策略,实际上就是这个原因。
最后通过NMS,RPN产生的输出是一系列的ROI_data,通过与ROI的相对映射关系,将conv5_3的特征存入到ROI_data中,供后面的分类网使用。
anchor有一下几种尺度和比例:
三种尺度(面积):128x128,256x256,512x512
三种比例: 1:1,1:2,2:1
每个点有3x3个anchor。
anchor是在原图上的,而不是在特征图上。
在特征图上滑动窗口得到的区域,通过SPPnet机制映射到原图上得到anchors,由于特征图维度与原图的尺寸成比例关系,如果图片尺寸w*h,特征图的尺寸是w/r ×h/r(由pool5层得到的尺寸,计算后得到这个r)。r是下采样率(subsampling ratio)。如果在卷积图空间位置定义anchor,则最终的图片会是由r像素划分的anchor集。在VGG中,r=16。也就是在特征图中得到的anchor尺寸乘以这个r就是在原图中的尺寸了。
原文:https://www.cnblogs.com/pacino12134/p/11409620.html