RoIPooling、RoIAlign筆記


      一)、RoIPooling

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

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

      

      針對上圖

      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,偏差成大小為7*7的,這樣的像素偏差勢必會對后層的回歸定位產生影響

     所以,產生了替代方案,RoiAlign

 

     二)、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,更精准些....

    

      作為一枚技術小白,寫這篇筆記的時候參考了很多博客論文,在這里表示感謝,同時,未經同意,請勿轉載....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM