RoIPooling與RoIAlign的區別


一、RoIPooling與RoIAlign

1.1、RoIPooling

通過對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

 

1.2、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。

 

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

 

二、雙線性插值法(圖像插值法)

2.1、為什么要用雙線性插值法

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

 

2.2、一維線性插值

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

我們可以得到:.     

令:

則:

 

2.3、雙線性插值法的推導過程

雙線性插值是做了二次一維的線性插值,我們用四個最近鄰估計給定的灰度。我們新圖像的像素點對應輸入圖像的(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,更精准些。


免責聲明!

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



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