RoIPooling、RoIAlign筆記

      一)、RoIPooling算法

      這個能夠在Faster RCNN中使用以便使生成的候選框region proposal映射產生固定大小的feature map網絡

      先貼出一張圖,接着經過這圖解釋RoiPooling的工做原理   ide

      

      針對上圖spa

      1)Conv layers使用的是VGG16,feat_stride=32(即表示,通過網絡層後圖片縮小爲原圖的1/32),原圖800*800,最後一層特徵圖feature map大小:25*253d

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

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

     因此,產生了替代方案,RoiAlignio

 

     二)、RoIAlign

      這個是在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,更精準些....

    

      做爲一枚技術小白,寫這篇筆記的時候參考了不少博客論文,在這裏表示感謝,同時,未經贊成,請勿轉載....

相關文章
相關標籤/搜索