ROI Pooling和ROI Aligen

ROI Pooling可以在Faster RCNN中使用以便使生成的候選框region proposal映射產生固定大小的feature map。

ROI Align 是在Mask-RCNN這篇論文裏提出的一種區域特徵聚集方式, 很好地解決了ROI Pooling操作中兩次量化造成的區域不匹配(mis-alignment)的問題。實驗顯示,在檢測測任務中將 ROI Pooling 替換爲 ROI Align 可以提升檢測模型的準確性。

一.ROI Pooling

                                        

 針對上圖

  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的,這樣的像素偏差勢必會對後層的迴歸定位產生影響

ROI Pooling需要取整,這樣的取整操作進行了兩次,一次是得到bbox在feature map上的座標時。

例如:原圖上的bbox大小爲665x665,經backbone後,spatial scale=1/32。因此bbox也相應應該縮小爲665/32=20.78,但是這並不是一個真實的pixel所在的位置,因此這一步會取爲20。0.78的差距反饋到原圖就是0.78x32=25個像素的差距。如果是大目標這25的差距可能看不出來,但對於小目標而言差距就比較巨大了。

二.ROI Align

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

先貼出一張圖,接着通過這圖解釋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的小區域,平分四份,每一份取其中心點位置,而中心點位置的像素,採用雙線性插值法進行計算,這樣,就會得到四個點的像素值,如下圖

                                                             

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

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

總結:知道了RoiPooling和RoiAlign實現原理,在以後的項目中可以根據實際情況進行方案的選擇;對於檢測圖片中大目標物體時,兩種方案的差別不大,而如果是圖片中有較多小目標物體需要檢測,則優先選擇RoiAlign,更精準些,並且對於實例分割這種涉及圖像的像素分割的任務,也是要選取roi align方法。

補充:

ROI Align:

               

  1. 將bbox區域按輸出要求的size進行等分,很可能等分後各頂點落不到真實的像素點上
  2. 沒關係,在每個bin中再取固定的4個點(作者實驗後發現取4效果較好),也就是圖二右側的藍色點
  3. 針對每一個藍點,距離它最近的4個真實像素點的值加權(雙線性插值),求得這個藍點的值
  4. 一個bin內會算出4個新值,在這些新值中取max,作爲這個bin的輸出值
  5. 最後就能得到2x2的輸出

 

 

 

 

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