关于R-FCN,其实我一开始是完全懵逼的,完全理解不了究竟是什么样的流程。今天我不知道自己理解的对不对,但还是把自己理解的做个记录吧。

1. Introduction

在Faster R-CNN中,RPN生成的region proposal经过RoI pooling layer处理,变成固定尺寸的特征向量,这是都能理解的。

这里的问题是,RoI pooling layer后面的FC层不是共享的,每个Roi都需要单独连接FC层,然后求置信度,这样效率肯定没有共享高。

所以为了可以做到共享网络层,有了R-FCN。R-FCN将原来FC层的计算替换成了卷积层的共享计算,使得最后的RoI直接输出结果。

2. Key idea

Resnet50 reshape层 全连接层_网络层


Resnet50 reshape层 全连接层_卷积_02


首先是在RPN和本文主要网络的共享卷积层最后一个feature map处,一方面,利用RPN生成region proposals。另一方面,用1x1的卷积核对feature map进行卷积,生成k*k*(C+1)深度的所谓的score map。(注意:整个深度是k*k*(c+1),深度!)

这个k*k表示要把region proposal划分为几块。

我们将region proposal映射到这个score map上,这样所有region proposal(或者叫RoI)在score map上的深度就是k*k*(C+1)。RoI上每个grid cell都会占据一中颜色的通道(如图)。

我们对RoI进行池化,RoI的top-left这个grid,是由土黄色那个channel上对应的k*k的区域top-left区域里的像素进行pool的结果。
这样得到RoI左上角的第一个值。剩下k*k-1个值方法一样。

score map上所有的RoI的池化操作都是共享进行的,只是所需的区域不同。

这样,我们就可以得到池化后的RoI,shape为k x k x C+1。

然后,再进行vote操作,利用的是average pooling,得到一个C+1的向量。

然后,用softmax来进行分类。

回归操作类似,只不过score map是k*k*4的。

从这整段解释可以看出,R-FCN真正做到了完全共享,大大提高了效率。

3.总结

一句话总结R-FCN,就是:原先Faster R-CNN是单独对每个proposal进行RoI pooling再分类,R-FCN则是在最后一层feature map上对所有的proposal同时进行RoI pooling,然后直接投入softmax进行分类,实现了所有层都共享。

4. References:

1.https://www.jianshu.com/p/9d11f4409a08?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation