ROI Pooling層解析
ROI Pooling的意義
ROIs Pooling顧名思義,是Pooling層的一種,而且是針對RoIs的Pooling,他的特點是輸入特徵圖尺寸不固定,但是輸出特徵圖尺寸固定。
- 什麼是ROI呢?
- ROI是Region of Interest的簡寫,指的是在“特徵圖上的框”:
- 1)在Faste RCNN中, RoI是指Selective Search 完成後得到的“候選框”在特徵圖上的對映,如下圖所示;
- 2)在Faster RCNN中,候選框是經過RPN產生的,然後再把各個“候選框”對映到特徵圖上,得到RoIs.
圖1 Faste RCNN整體結構
往往經過rpn後輸出的不止一個矩形框,所以這裡我們是對多個ROI進行Pooling。
ROI Pooling的輸入
輸入有兩部分組成:
1、特徵圖:指的是圖1中所示的特徵圖,在Fast RCNN中,它位於RoI Pooling之前,在Faster RCNN中,它是與RPN共享那個特徵圖,通常我們常常稱之為“share_conv”;
2、rois:在Faster RCNN中,指的是Selective Search的輸出;在Faster RCNN 中指的是RPN的輸出,一堆矩形候選框,形狀為1x5x1x1(4個座標+索引|index),其中值得注意的是:座標的參考系不是針對feature map這張圖的,而是針對原圖的(神經網路最開始的輸入)
ROI Pooling的輸出
輸出是batch個vector, 其中batch的值等於RoI的個數,vector的大小為channel * w * h; RoI Pooling 的過程就是將一個個大小不同的box矩形框,都對映成大小固定(w * h)的矩形框;
ROI Pooling的過程
如圖所示,我們先把roi中的座標對映到feature map上, 對映規則比較簡單,就是把各個座標除以“輸入圖片與feature map的大小的比值”, 得到了feature map 上的box座標後,我們使用Pooling得到輸出;由於輸入的圖片大小不一,所以這裡我們使用的類似Spp Pooling, 在Pooling 的過程中需要計算Pooling後的結果對應到feature map 上所佔的範圍,然後在那個範圍中進行取max或者取average.