ROI操作:ROIPooling和ROIAlign

目標:爲了使得檢測網絡可以輸入任意size的圖片,使用ROIPooling在網絡中某一個階段將不同尺度的圖片ROI pooling成相同的尺度,使得fc的存在也無法寫死輸入圖片的size。

ROIPooling:

方法:直接Pooling,若尺寸不對應則直接取整

缺點:

由於 RoIPooling 採用的是 INTER_NEAREST(即最近鄰插值) ,在resize時,對於 縮放後坐標不能剛好爲整數 的情況,採用了 粗暴的捨去小數,相當於選取離目標點最近的點,損失一定的空間精度。

例如:一張圖片輸入VGG16,則得到的尺寸縮小爲1/32,如下圖中,圖片大小爲800,則恰好爲25,但區域塊大小爲665經過VGG後則爲20.78,則直接處理爲20,再通過ROIPooling(即,將所有不同的尺寸全部Pooling處理爲相同的大小)處理爲7*7,則20/7--> 2,由下圖可知,Pooling之後存在一定的位置偏移。

具體計算:

下圖爲一張8*8的feature map,選取其中一個5*7的region輸入ROIPooling輸出2*2的結果。

(1)劃分爲2*2=4塊區域

1)5/2 = 2.5 --> 2, 剩下的爲3,則2+3

2)7/2 = 3.5 -->3, 剩下的爲4,則3+4

(2)取每個小區域的最大值爲pooling值

ROIAlign:

改進:將最近鄰插值換爲雙線性插值,使得即使縮放後坐標不能剛好爲整數,也能通過插值得到浮點數處的值處理得到pooling後的值。

如下圖所示:ROIAlign中池化的塊允許爲浮點數,通過雙線性插值得到尺寸爲浮點數的塊池化後的結果,保證了空間精度。

具體計算:

下圖爲一張8*8的feature map,選取其中一個5*7的region輸入ROIPooling輸出2*2的結果。

(1)劃分爲2*2=4塊區域

1)5/2 = 2.5 --> 2.5, 不再取整,則2.5+2.5

2)7/2 = 3.5 -->3.5,不再取整,則3.5+3.5

(2)將每小塊再分爲4個小區域,使用雙線性插值的方法求取這四個小區域的中心點處的值

(3)取每個區域的最大值爲pooling值

ROIPooling換爲ROIAlign所做的改動:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章