轉自https://www.cnblogs.com/liaohuiqiang/p/9226335.htmlhtml
2015, NIPS
Max Jaderberg, Karen Simonyan, Andrew Zisserman, Koray Kavukcuoglu
Google DeepMind網絡
爲何提出(Why)優化
STN是什麼(What)ui
STN是怎麼作的(How)atom
下面針對每一個模塊闡述一下
(1) Localisation net
這個模塊就是輸入U,輸出一個變化參數ΘΘ,那麼這個ΘΘ具體是指什麼呢?
咱們知道線性代數裏,圖像的平移,旋轉和縮放均可以用矩陣運算來作
舉例來講,若是想放大圖像中的目標,能夠這麼運算,把(x,y)中的像素值填充到(x',y')上去,好比把原來(2,2)上的像素點,填充到(4,4)上去。
[x′y′]=[2002][xy]+[00][x′y′]=[2002][xy]+[00]spa
若是想旋轉圖像中的目標,能夠這麼運算(能夠在極座標系中推出來,證實放到最後的附錄)
[x′y′]=[cosΘsinΘ−sinΘcosΘ][xy]+[00][x′y′]=[cosΘ−sinΘsinΘcosΘ][xy]+[00]3d
這些都是屬於仿射變換(affine transformation)
[x′y′]=[acbd][xy]+[ef][x′y′]=[abcd][xy]+[ef]
在仿射變化中,變化參數就是這6個變量,Θ={a,b,c,d,e,f}Θ={a,b,c,d,e,f}(此ΘΘ跟上述旋轉變化裏的角度ΘΘ無關)
這6個變量就是用來映射輸入圖和輸出圖之間的座標點的關係的,咱們在第二步grid generator就要根據這個變化參數,來獲取原圖的座標點。orm
(2) Grid generator
有了第一步的變化參數,這一步是作個矩陣運算,這個運算是以目標圖V的全部座標點爲自變量,以ΘΘ爲參數作一個矩陣運算,獲得輸入圖U的座標點。
xml
其中(xti,yti)(xit,yit)記爲輸出圖V中的第i個座標點,V中的長寬能夠和U不同,本身定義的,因此這裏用i來標識第幾個座標點
(xsi,ysi)(xis,yis)記爲輸入圖U中的點,這裏的i是從V中對應過來的,表示V中的第i的座標點映射的U中座標,i跟U沒有關係htm
(3) Sampler
因爲在第二步計算出了V中每一個點對應到U的座標點,在這一步就能夠直接根據V的座標點取得對應到U中座標點的像素值來進行填充,而不須要通過矩陣運算。須要注意的是,填充並非直接填充,首先計算出來的座標多是小數,要處理一下,其次填充的時候每每要考慮周圍的其它像素值。填充根據的公式以下。
其中n和m會遍歷原圖U的全部座標點,UnmUnm指原圖U中某個點的像素值,k()爲取樣核,兩個ϕϕ爲參數,(xsi,ysi)(xis,yis)表示V中第i個點要到U圖中找的對應點的座標,表示的座標是U圖上的,k表示使用不一樣的方法來填充,一般會使用雙線性插值,則會獲得下面的公式
舉例來講,我要填充目標圖V中的(2,2)這個點的像素值,通過如下計算獲得(1.6,2.4)
若是四捨五入後直接填充,則難以作梯度降低。
咱們知道作梯度降低時,梯度的表現就是權重發生一點點變化的時候,輸出的變化會如何。
若是用四捨五入後直接填充,那麼(1.6,2.4)四捨五入後變成(2,2)
當ΘΘ(咱們求導的時候是須要對ΘΘ求導的)有一點點變化的時候,(1.6,2.4)可能變成了(1.9,2.1)四捨五入後仍是變成(2,2),輸出並無變化,對ΘΘ的梯度沒有改變,這個時候無法用梯度降低來優化ΘΘ
若是採用上面雙線性插值的公式來填充,在這個例子裏就會考慮(2,2)周圍的四個點來填充,這樣子,當ΘΘ有一點點變化的時,式子的輸出就會有變化,由於(xsi,ysi)(xis,yis)的變化會引發V的變化。注意下式中U的下標,第一個下標是縱座標,第二個下標纔是橫座標。
(4) STN小結
簡單總結一下,以下圖所示
【實驗】Distorted MNIST
【實驗】SVHN: Street View House Numbers
【 實驗】CUB-200-2011 birds dataset
【附錄】旋轉的矩陣運算