天天看點

RoIPooling、RoIAlign

功能:将不同size的ROI區域映射到固定大小的feature map上

1.RoIPooling

這個可以在Faster RCNN中使用以便使生成的候選框region proposal映射産生固定大小的feature map

 先貼出一張圖,接着通過這圖解釋RoiPooling的工作原理   

RoIPooling、RoIAlign

    針對上圖

  1)Conv layers使用的是VGG16,feat_stride=32(即表示,經過網絡層後圖檔縮小為原圖的1/32),原圖800*800,最後一層特征圖feature map大小:25*25

  2)假定原圖中有一region proposal,大小為665*665,這樣,映射到特征圖中的大小:665/32=20.78,即20.78*20.78,如果你看過Caffe的Roi Pooling的C++源碼,在計算的時候會進行取整操作,于是,進行所謂的第一次量化,即映射的特征圖大小為20*20

  3)假定pooled_w=7,pooled_h=7,即pooling後固定成7*7大小的特征圖,是以,将上面在 feature map上映射的20*20的 region  proposal劃分成49個同等大小的小區域,每個小區域的大小20/7=2.86,即2.86*2.86,此時,進行第二次量化,故小區域大小變成2*2;經過這兩次量化,候選區域已經出現了較明顯的偏差(如圖中綠色部分所示)

  4)每個2*2的小區域裡,取出其中最大的像素值,作為這一個區域的‘代表’,這樣,49個小區域就輸出49個像素值,組成7*7大小的feature map

  總結,是以,通過上面可以看出,經過兩次量化,即将浮點數取整,原本在特征圖上映射的20*20大小的region proposal,偏差成大小為14*14的,這樣的像素偏差勢必會對後層的回歸定位産生影響

它的缺點:由于兩次量化帶來的誤差;

(1)将候選框邊界量化為整數點坐标值。

(2)将量化後的邊界區域平均分割成 k x k 個單元(bin),對每一個單元的邊界進行量化。

 是以,産生了替代方案,RoiAlign

2.RoIAlign

ROI Align的思路很簡單:取消量化操作,使用雙線性内插的方法獲得坐标為浮點數的像素點上的圖像數值,進而将整個特征聚集過程轉化為一個連續的操作

這個是在Mask RCNN中使用以便使生成的候選框region proposal映射産生固定大小的feature map時提出的

先貼出一張圖,接着通過這圖解釋RoiAlign的工作原理

RoIPooling、RoIAlign

 同樣,針對上圖,有着類似的映射

 1)Conv layers使用的是VGG16,feat_stride=32(即表示,經過網絡層後圖檔縮小為原圖的1/32),原圖800*800,最後一層特征圖feature map大小:25*25

 2)假定原圖中有一region proposal,大小為665*665,這樣,映射到特征圖中的大小:665/32=20.78,即20.78*20.78,此時,沒有像RoiPooling那樣就行取整操作,保留浮點數

 3)假定pooled_w=7,pooled_h=7,即pooling後固定成7*7大小的特征圖,是以,将在 feature map上映射的20.78*20.78的region proposal 劃分成49個同等大小的小區域,每個小區域的大小20.78/7=2.97,即2.97*2.97

 4)假定采樣點數為4,即表示,對于每個2.97*2.97的小區域,平分四份,每一份取其中心點位置,而中心點位置的像素,采用雙線性插值法進行計算,這樣,就會得到四個點的像素值,如下圖

RoIPooling、RoIAlign

上圖中,四個紅色叉叉‘×’的像素值是通過雙線性插值算法計算得到的

 最後,取四個像素值中最大值作為這個小區域(即:2.97*2.97大小的區域)的像素值,如此類推,同樣是49個小區域得到49個像素值,組成7*7大小的feature map

 總結:知道了RoiPooling和RoiAlign實作原理,在以後的項目中可以根據實際情況進行方案的選擇;對于檢測圖檔中大目标物體時,兩種方案的差别不大,而如果是圖檔中有較多小目标物體需要檢測,則優先選擇RoiAlign,更精準些....

RoIPooling                                RoIAlign
RoIPooling、RoIAlign

繼續閱讀