RPN详细解剖

读了许多关于Faster-RCNN的文章,但是一直都没能很好地理解整个过程,其实主要就是没能理解RPN。最近有了新的认识,记录一下我的理解,主要是关于RPN的全卷积过程,至于Faster-RCNN其他细节已经有很多文章讲得很好了。

一.特征提取

原paper中作者测试了标准的分类网络如ZF和VGG16来提取特征图。这里我们以VGG16为例,特征网络首先在ImageNet上进行预训练,然后去掉第5个pool2与后面的全连接层,也就是只留到conv5_3,因此此时输出特征图的大小为原图大小的1/16。若原图的shape为224*224*3,则最后输出应为14*14*512。

RPN详细解剖_第1张图片

二.RPN网络

第二步是最重要也是最难理解的一部分,其实重点就在于RPN是一个全卷积神经网络。关于FCN(全卷积神经网络)我会再写一篇文章。

从conv5_3我们得到了大小为14*14*512的特征图,由于卷积的尺寸不变性,这14*14个点可以分别对应到原图上14*14个位置上,具体计算也很简单,按照其比例即可。到这一步我们已经可以很直观地理解到此时已经生成了14*14个512-d的特征向量,每一个512-d的特征向量我们都可以对应到原图上的某一个位置,且14*14个位置按比例分布。

然后对于这个特征图,我们用512个3*3*512的卷积核进行卷积再次得到14*14*512的特征图。这里可能有人有疑问了conv5_3的输出已经是14*14*512了,为什么还要用3*3的卷积核卷积一次得到同样尺寸的输出?可以理解为对特征图又进行了一次平滑操作,增大了网络的容量。

此时,已经可以使用这14*14个512-d的特征向量来对原图上以这14*14个位置为中心的anchors进行预测了。显然,当anchors的数量为k时,每个中心位置,即每个512-d的特征向量都应该用来预测出2k个分值(分别为k个前景,k个背景的分数)与4k(k个水平平移,垂直平移,水平缩放,垂直缩放)个用来微调anchors位置的值。我们使用两个并行的1*1*512的卷积核,卷积核的个数分别为2k个与4k个,因此最后的输出分别为14*14*2k和14*14*4k,正好预测出了14*14*k个anchors是前景与背景的打分以及其回归微调所需的4个值。于是便可以计算得到RPN的LOSS,然后训练RPN,并可将得到的proposals送入下一步继续处理。

RPN详细解剖_第2张图片

至此,相信你应该已经清楚了RPN是如何工作的。

你可能感兴趣的:(机器学习)