RoIPooling與RoIAlign的區別

2022-07-25 02:21:09 字數 2988 閱讀 5812

通過對faster rcnn的學習我媽了解的rolpooling可以使生成的候選框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

這個是在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。

上面說到雙線性插值法,那麼什麼是雙線性插值法呢?

在影象的放大和縮小的過程中,需要計算新影象畫素點在原圖的位置,如果計算的位置不是整數,就需要用到影象的內插,我們需要尋找在原圖中最近得畫素點賦值給新的畫素點,這種方法很簡單是最近鄰插法,這種方法好理解、簡單,但是不實用,會產生是真現象,產生棋盤格效應,更實用的方法就是雙線性插值法。

我們已經知道(x0,y0)與(x1, y1)的值,並且已知 x 的值,要求 y 的值。根據初中的知識:

我們可以得到:

.     

令:則:

雙線性插值是做了二次一維的線性插值,我們用四個最近鄰估計給定的灰度。我們新影象的畫素點對應輸入影象的(u0 , v0)(u0,v0不是整數),則其必定落在原始影象四個畫素點中間。四個畫素點分別是(u' , v' )、(u' , v' +1)、(u'+1 , v' )、(u' +1, v'+1 )。如下圖1所示:

圖一

圖二

圖三

圖四如圖2所示:在紅色平面內,在紅色平面內,只有u' 是變數,v' 是常值,連線 g(u' , v' )、 g(u'+1 , v' ),相當於做一次一維線性插值,求出 g(u0, v' )的值。同理,如圖3中,在藍色的平面內我們可以再做一次一維線性插值,求出g(u0, v' +1)的值。同理如圖4,在黑色的平面內,我們可以求出(u0, v0)對應的值g(u0, v0)的值。(雙線性插值就是分別在 u、v方向上做線性插值)數學推導過程如下:

知道了roipooling和roialign實現原理後,在以後的專案中可以根據實際情況進行方案的選擇;對於檢測中大目標物體時,兩種方案的差別不大,而如果是中有較多小目標物體需要檢測,則優先選擇roialign,更精準些。

ROIPooling和ROIAlign的特點和區別

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

ROI Pooling層簡單理解

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

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...