R-FCN理解

参考博客:https://www.cnblogs.com/lillylin/p/6277094.html

整个R-FCN的流程:

  • 一个base的conv网络如ResNet101, 一个RPN(Faster RCNN来的),一个position sensitive的prediction层,最后的ROI pooling+投票的决策层

如图所示:

下面是我自己画的图,从经过特征提取网络得到的特征图开始,后续的处理过程:

1、假设由网络得到特征图为大小为:H*W*2048,( ResNet 101——去掉原始ResNet101的最后一层全连接层,保留前100层,再接一个1*1*1024的全卷积层(100层输出是2048,为了降维,再引入了一个1*1的卷积层)),得到H*W*1024的特征图。然后和k^2(C+1)个1*1*1024的卷积核进行卷积, 得到H*W*K^2(C+1)的特征图,如图所示:

右边彩色的特征图中k=3,特征图的厚度为3^2*(C+1)=9(C+1),共9个大块,每个大块厚度为C+1。其中有个白色的九宫格表示经过RPN网络映射到特征图上的目标区域。这里采用分为9格的做法,为了得到作者提出的位置敏感的score map。

k = 3,表示把一个ROI划分成3*3,对应的9个位置分别是:上左(左上角),上中,上右,中左,中中,中右,下左,下中,下右(右下角),对应前面的9*(C+1)的特征图中的9个块(9种颜色), 每个块厚度为C+1,每个块对应原图中ROI 区域的一个位置,将ROI区域划分成9块,相当于将目标 划分为不同的部分,比如下图:

图中小孩子对应的ROI区域划分成9块,分别对应小孩的身体的一部分,而映射到特征图中的的ROI,分成9块,这9块怎么得到呢? 如下图所示,这个ROI的左上角的区域,由厚度为9*(C+1)的特征图中的大红色部分得到,在整个红色块中,只取ROI所在位置的左上角的部分,而ROI 的上中部分,由红色后面的淡红色块中ROI所在位置的中上部分得到,依次可以得到ROI的右上角,中左,中中,中右, 下左,下中,下右(右下角)。

  这样就得到了ROI区域对应的H*W*(C+1)的score map, 然后经过一个ROI pooling,每个类别做一次,也就是有C+1个类别,每个类别 对应的3*3=9个区域,每个区域进行池化,得到3*3=9个值,共有C+1个类别,所以会得到3*3*(C+1)的feature map,然后每个类别对应的9个值再进行一个投票,得到一个值,共C+1个类别,所以会得到长度为C+1的特征向量,最后经过一个softmax得到分类结果。 

猜你喜欢

转载自blog.csdn.net/sinat_33486980/article/details/92143804
今日推荐