作用:RPN是用来提取候选框的网络。
rpn出自Faster R-CNN。Faster R-CNN = RPN + Fast R-CNN。
上图所示为Faster R-CNN的网络结构。
Faster R-CNN的算法流程可以分为三个步骤:
1.将输入图像输入到特征提取网络中的到特征图
2.使用RPN网络生成候选框,投影到特征图上获得相应的特征矩阵。
3.将每个特征矩阵通过ROI pooling层缩放到7*7大小的特征图,将特征图展平通过一系列的全连接层得到预测结果。
RPN网络的结构:
在网络输出的特征图上有一个滑动的窗口。每滑动一次就生成一个1维的特征向量。然后通过两个全连接层分别输出目标概率以及边界框的回归参数。(这里的256是因为是通过ZF生成的特征图,深度为256,如果是VGG16那深度就是512)
这个滑动的窗口其实是一个3*3*256的卷积(stride=1,padding=1)这样每个点就都能预测的到了。
经过滑动窗口之后生成的shape与特征图是一样的。然后经过卷积核大小为1*1卷积核个数为2k的卷积生成对类别的预测,经过卷积核大小为1*1卷积核个数为4k的卷积生成对边界框回归参数的预测。(原文k=9)
cls的参数两个为一组。第一个值预测是背景的概率,第二个值预测是物体的概率。所以RPN只会区分前景跟背景。
reg的参数四个为一组。(x,y)代表对anchor中心坐标预测的偏移量。w,h是对anchor高度和宽度的调整。我们希望调整之后能够尽可能的框住真实的目标。
文中给出的anchor的尺度和比例。所以一共有九种anchor。 每个地方会生成2*9=18个类别分数,以及4*9=36个边界框回归参数。
当然这么多的anchor我们肯定不能都用来训练。每一张图片采用256张anchor,正负样本的比例大约为1:1。如果我们的正样本的个数不够那么就用负样本的个数来填充,假如只有100个正样本,那负样本的个数就为 256-100=156个。
正样本的定义:
1.只要anchor与gt框的IOU大于一个阈值(原文为0.7)那么就认定他为正样本。
2.anchor与某一个gt框有最大的IOU也认定他为正样本
负样本的定义:
与所有的gt框的IOU值都小于0.3的就认定为负样本。