ROIPooling和ROIAlign的特點和區別

2021-09-10 14:44:09 字數 1912 閱讀 9261

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

所以,產生了替代方案,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,更精準些....

ROI Pooling層簡單理解

目標檢測typical architecture 通常可以分為兩個階段 1 region proposal 給定一張輸入image找出objects可能存在的所有位置。這一階段的輸出應該是一系列object可能位置的bounding box。這些通常稱之為region proposals或者 reg...

RoIPooling與RoIAlign的區別

通過對faster rcnn的學習我媽了解的rolpooling可以使生成的候選框region proposal對映產生固定大小的feature map 先貼出一張圖,接著通過這 釋roipooling的工作原理 針對上圖 1 conv layers使用的是vgg16,feat stride 32 ...

cupy系列(二) 實現roi pooling

從chainer中copy出來的。官方有cpu和gpu的分別實現 尊重原創,請看原始碼chainer roipooling import cupy as cp import numpy as np bottom data cp.random.randn 1,3,40,40,dtype np.floa...