原文鏈接:https://www.jianshu.com/p/670a3e42107d
一、什麼是RoI Pooling
RoI是Region of Interest的簡寫,是指對一張圖片的“感興趣區域”,用於RCNN系列算法當中,輸入圖片在經過卷積網絡得到feature maps後,利用選擇搜索或者RPN算法來得到多個目標候選框,這些以輸入圖片爲參考座標的候選框在feature maps上的映射區域,即爲目標檢測中所說的RoI。
RoI Pooling的過程如上圖所示,其中有兩個計算細節的問題有:
問題1、以輸入圖片爲參考座標的候選框在feature maps上如何映射?
scale = Sf / Si, Xf = scale * Xi,Yf = scale * Yi,其中 Sf 爲feature map的Size,Si 爲輸入image的Size,(Xf,Yf)爲feature map上的座標點,(Xi,Yi)爲輸入image的座標點。
問題2、如何把形狀和大小各異的候選區域歸一化爲固定大小的目標識別區域?
通過對feature map分塊池化實現歸一化到固定大小,假設ROI Pooling層的輸出大小爲 Wr * Hr,輸入候選區域的大小爲 Wi * Hi,ROI Pooling的過程包括兩個步驟:
- 以Wr * Hr的尺寸大小把輸入候選區域劃分爲多個子網格,每個窗口的大小是
( Hi / Hr) * (Wi / Wr),這裏會有一個取整量化的操作;
- 對每個子網格窗口取最大元素作爲輸出,最終得到大小爲Wr * Hr 的輸出。
二、RoI Pooling存在的問題
候選框從原圖座標映射到的feature map座標時,位置座標可能存在浮點數,此時進行取整操作從而出現第一次量化;其次,在ROI Pooling求取每個小網格的位置時也同樣存在浮點數取整的情況。這兩次量化的結果都使得候選框的位置出現了偏差。
三、RoI Align
爲了解決RoI Pooling兩次量化問題,RoI Align不再採用取整量化操作,而是保留了浮點數的運算,並使用雙線性插值的方式來求取像素值。具體的過程步驟如下:
假設需要輸出2x2的fixed size feature map:
- 首先將ROI切分成2x2的單元格;
- 如果採樣點數是4,將每個單元格子均分成四個小方格,以每個小方格的中心作爲採樣點;
- 對採樣點像素進行雙線性插值,得到該像素點的值;
- 對每個單元格內的四個採樣點進行max pooling,得到最終的ROI Align結果。