參考部落格: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得到分類結果。