RoIPooling與RoIAlign的區別

目錄

一、RoIPooling與RoIAlign

1.1、RoIPooling

1.2、RoIAlign

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

2.1、爲什麼要用雙線性插值法

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

​​


一、RoIPooling與RoIAlign

1.1、RoIPooling

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、爲什麼要用雙線性插值法

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

我們已經知道(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所示:

 

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章