詳細解讀Spatial Transformer Networks(STN)-一篇文章讓你完全理解STN了

目錄

STN的作用 
1.1 靈感來源 
1.2 什麼是STN?
STN的基本架構
Localisation net是如何實現參數的選取的? 
3.1 實現平移 
3.2 實現縮放 
3.3 實現旋轉 
3.4 實現剪切 
3.5 小結
Grid generator實現像素點座標的對應關係 
4.1 爲什麼會有座標的問題? 
4.2 仿射變換關係
Sampler實現座標求解的可微性 
5.1 小數座標問題的提出 
5.2 解決輸出座標爲小數的問題 
5.3 Sampler的數學原理
Spatial Transformer Networks(STN)
STN 實現代碼
reference
1.STN的作用
1.1 靈感來源

普通的CNN能夠顯示的學習平移不變性,以及隱式的學習旋轉不變性,但attention model 告訴我們,與其讓網絡隱式的學習到某種能力,不如爲網絡設計一個顯式的處理模塊,專門處理以上的各種變換。因此,DeepMind就設計了Spatial Transformer Layer,簡稱STL來完成這樣的功能。

1.2 什麼是STN?

關於平移不變性 ,對於CNN來說,如果移動一張圖片中的物體,那應該是不太一樣的。假設物體在圖像的左上角,我們做卷積,採樣都不會改變特徵的位置,糟糕的事情在我們把特徵平滑後後接入了全連接層,而全連接層本身並不具備 平移不變性 的特徵。但是 CNN 有一個採樣層,假設某個物體移動了很小的範圍,經過採樣後,它的輸出可能和沒有移動的時候是一樣的,這是 CNN 可以有小範圍的平移不變性 的原因。

 
如圖所示,如果是手寫數字識別,圖中只有一小塊是數字,其他大部分地區都是黑色的,或者是小噪音。假如要識別,用Transformer Layer層來對圖片數據進行旋轉縮放,只取其中的一部分,放到之後然後經過CNN就能識別了。

我們發現,它其實也是一個layer,放在了CNN的前面,用來轉換輸入的圖片數據,其實也可以轉換feature map,因爲feature map說白了就是濃縮的圖片數據,所以Transformer layer也可以放到CNN裏面。

2. STN的基本架構
 
如圖是Spatial Transformer Networks的結構,主要的部分一共有三個,它們的功能和名稱如下:
參數預測:Localisation net
參數預測:Localisation net
座標映射:Grid generator
座標映射:Grid generator
像素的採集:Sampler
像素的採集:Sampler
爲了讓大家對這三個部分有一個先驗知識,我先簡單介紹一下。
如下圖是完成的一個平移的功能,這其實就是Spatial Transformer Networks要做一個工作。 
 
假設左邊是Layer l−1Layer l−1的輸出,也就是當前要做Transform的輸入,最右邊爲Transform後的結果。這個過程是怎麼得到的呢?

假設是一個全連接層,n,m代表輸出的值在輸出矩陣中的下標,輸入的值通過權值w,做一個組合,完成這樣的變換。

舉個例子,假如要生成al11a11l,那就是將左邊矩陣的九個輸入元素,全部乘以一個權值,加權相加:
al11=wl1111al−111+wl1112al−112+wl1113al−113+⋯+wl1133al−133
a11l=w1111la11l−1+w1112la12l−1+w1113la13l−1+⋯+w1133la33l−1
這僅僅是al11a11l的值,其他的結果也是這樣算出來的,用公式表示稱如下這樣:
 
通過調整這些權值,達到縮放,平移的目的,其實這就是Transformer的思想。

在這個過程中,我們需要面對三個主要的問題:

這些參數應該怎麼確定?
圖片的像素點可以當成座標,在平移過程中怎麼實現原圖片與平移後圖片的座標映射關係?
參數調整過程中,權值一定不可能都是整數,那輸出的座標有可能是小數,但實際座標都是整數的,如果實現小數與整數之間的連接?
其實定義的三個部分,就是專門爲了解決這幾個問題的,接下來我們一個一個看一下怎麼解決。

3.Localisation net是如何實現參數的選取的?
3.1 實現平移

 
如果是平移變換,比如從al−111平移到al21a11l−1平移到a21l,得到al21a21l的表示爲:
al21=wl2111al−111+wl2112al−112+wl2113al−113+⋯+wl2133al−133
a21l=w2111la11l−1+w2112la12l−1+w2113la13l−1+⋯+w2133la33l−1
我們可以令wl2111=1w2111l=1,其餘均爲0,不就得到了
al21=1∗al−111
a21l=1∗a11l−1
這就完成了平移了嗎?其他的平移也可以用類似的方法來做到。
你可能會問了,那我該怎麼得到這些權值呢?總不能人工去看吧! 
當然不會,我們可以設置一個叫做NN這類的東西,把Layer l−1Layer l−1的輸出放到NN裏,然後生成一系列w。這樣聽起來好玄乎,但確實是可以這麼做的。

3.2 實現縮放

其實縮放也不難,如圖所示,如果要把圖放大來看,在x→(X2)→x′x→(X2)→x′,y→(X2)→y′y→(X2)→y′將其同時乘以2,就達到了放大的效果了,用矩陣表示如下: 
 
縮小也是同樣的原理,如果把這張圖放到座標軸來看,就是如圖所示,加上偏執值0.5表示向右,向上同時移動0.5的距離,這就完成了縮小。

3.3 實現旋轉

既然前面的平移和縮放都是通過權值來改的,那旋轉其實也是。但是旋轉應該用什麼樣的權值呢? 
仔細思考,不難發現,旋轉是跟角度有關係的,那什麼跟角度有關係呢? 
正弦餘弦嘛,爲什麼它們能做旋轉呢? 
一個圓圈的角度是360度,可以通過控制水平和豎直兩個方向,就能控制了,如圖所示。


由點A旋轉θθ度角,到達點B.得到
x′=Rcosα
x′=Rcosα
y′=Rsinα
y′=Rsinα
由A點得
x=Rcos(α+θ)
x=Rcos(α+θ)
y=Rsin(α+θ)
y=Rsin(α+θ)
展開,有:
x=Rcosα cosθ−Rsinα sinθ
x=Rcosα cosθ−Rsinα sinθ
y=Rsinα cosθ+Rcosα sinθ
y=Rsinα cosθ+Rcosα sinθ
把未知數αα替換掉
x=x′ cosθ−y′sinθ
x=x′ cosθ−y′sinθ
y=y′cosθ+x′sinθ
y=y′cosθ+x′sinθ

我們可以簡單的理解爲cosθ,sinθcosθ,sinθ就是控制這樣的方向的,把它當成權值參數,寫成矩陣形式,就完成了旋轉操作。 
 
注:如果想了解正餘弦控制方向是怎麼導出的,可以參考計算機圖形學的相關書籍,一般都有介紹和數學公式的推導。
3.4 實現剪切

剪切變換相當於將圖片沿x和y兩個方向拉伸,且x方向拉伸長度與y有關,y方向拉伸長度與x有關,用矩陣形式表示前切變換如下: 


3.5 小結

由此,我們發現所有的這些操作,只需要六個參數[2X3]控制就可以了,所以我們可以把feature map U作爲輸入,過連續若干層計算(如卷積、FC等),迴歸出參數θ,在我們的例子中就是一個[2,3]大小的6維仿射變換參數,用於下一步計算;

4.Grid generator實現像素點座標的對應關係
4.1 爲什麼會有座標的問題?

由上面的公式,可以發現,無論如何做旋轉,縮放,平移,只用到六個參數就可以了,如圖所示: 
 
這6個參數,就足以完成我們需要的幾個功能了。

而縮放的本質,其實就是在原樣本上採樣,拿到對應的像素點,通俗點說,就是輸出的圖片(i,j)的位置上,要對應輸入圖片的哪個位置? 
 
如圖所示旋轉縮放操作,我們把像素點看成是座標中的一個小方格,輸入的圖片U∈RHxWxCU∈RHxWxC可以是一張圖片,或者feature map,其中H表示高,W表示寬,C表示顏色通道。經過變換Tθ(G)Tθ(G),θθ是上一個部分(Localisation net)生成的參數,生成了圖片V∈RH′xW′xCV∈RH′xW′xC,它的像素相當於被貼在了圖片的固定位置上,用G=GiG=Gi表示,像素點的位置可以表示爲Gi={xti,yti}Gi={xit,yit}這就是我們在這一階段要確定的座標。

4.2 仿射變換關係

因此定義瞭如圖的一個座標矩陣變換關係: 
 
(xti,yti)(xit,yit)是輸出的目標圖片的座標,(xsi,ysi)(xis,yis)是原圖片的座標,AθAθ表示仿射關係。

但仔細一點,這有一個非常重要的知識點,千萬別混淆,我們的座標映射關係是:
從目標圖片→原圖片
從目標圖片→原圖片
也就是說,座標的映射關係是從目標圖片映射到輸入圖片上的,爲什麼這樣呢?
作者在論文中寫的比較模糊,比較滿意的解釋是座標映射的作用,其實是讓目標圖片在原圖片上採樣,每次從原圖片的不同座標上採集像素到目標圖片上,而且要把目標圖片貼滿,每次目標圖片的座標都要遍歷一遍,是固定的,而採集的原圖片的座標是不固定的,因此用這樣的映射。

舉個自我感覺很貼切的小例子說一下吧。 


如圖所示,假設只有平移變換,這個過程就相當於一個拼圖的過程,左圖是一些像素點,右圖是我們的目標,我們的目標是確定的,目標圖的方框是確定的,圖像也是確定的,這就是我們的目標,我們要從左邊的小方塊中拿一個小方塊放在右邊的空白方框上,因爲一開始右邊的方框是沒有圖的,只有座標,爲了確定拿過來的這個小方塊應該放在哪裏,我們需要遍歷一遍右邊這個方框的座標,然後再決定應該放在哪個位置。所以每次從左邊拿過來的方塊是不固定的,而右邊待填充的方框卻是固定的,所以定義從
目標圖片→原圖片
目標圖片→原圖片
的座標映射關係更加合理,且方便。
5.Sampler實現座標求解的可微性
5.1 小數座標問題的提出

我們可以假設一下我們的權值矩陣的參數是如下這幾個數,x,y分別是他們的下標,經過變換後,可以得到如下這樣的對應。 


前面舉的例子中,權值都是整數,那得到的也必定是整數,如果不是整數呢? 
如圖所示: 
 
假如權值是小數,拿得到的值也一定是小數,1.6,2.4,但是沒有元素的下標索引是小數呀。那不然取最近吧,那就得到2,2了,也就是與al22a22l對應了。 
那這樣的方法能用梯度下降來解嗎?

5.2 解決輸出座標爲小數的問題

用上面的四捨五入顯然是不能進行梯度下降來回傳梯度的。 
爲什麼呢? 
梯度下降是一步一步調整的,而且調整的數值都比較小,哪怕權值參數有小範圍的變化,雖然最後的輸出也會有小範圍的變化,比如一步迭代後,結果有:
1.6→1.64,2.4→2.38
1.6→1.64,2.4→2.38
但是即使有這樣的改變,結果依然是:
al−122→al22
a22l−1→a22l
的對應關係沒有一點變化,所以output依然沒有變,我們沒有辦法微分了,也就是梯度依然爲0呀,梯度爲0就沒有可學習的空間呀。所以我們需要做一個小小的調整。
仔細思考一下這個問題是什麼造成的,我們發現其實在推導SVM的時候,我們也遇到過相同的問題,當時我們如果只是記錄那些出界的點的個數,好像也是不能求梯度的,當時我們是用了hing loss,來計算一下出界點到邊界的距離,來優化那個距離的,我們這裏也類似,我們可以計算一下到輸出[1.6,2.4]附近的主要元素,如下所示,計算一下輸出的結果與他們的下標的距離,可得:


然後做如下更改:


他們對應的權值都是與結果對應的距離相關的,如果目標圖片發生了小範圍的變化,這個式子也是可以捕捉到這樣的變化的,這樣就能用梯度下降法來優化了。

5.3 Sampler的數學原理

論文作者對我們前面的過程給出了非常嚴密的證明過程,以下是我對論文的轉述。

每次變換,相當於從原圖片(xsi,ysi)(xis,yis)中,經過仿射變換,確定目標圖片的像素點座標(xti,yti)(xit,yit)的過程,這個過程可以用公式表示爲: 
 
(注:把一張圖片展開,相當於把矩陣變成座標向量) 
kernel k表示一種線性插值方法,比如雙線性插值,更詳細的請參考:(線性插值,雙線性插值Bilinear Interpolation算法),ϕx,ϕyϕx,ϕy表示插值函數的參數;UcnmUnmc表示位於顏色通道C中座標爲(n,m)的值。

如果使用雙線性插值,可以有: 


爲了允許反向傳播回傳損失,我們可以求對該函數求偏導: 
 
對於ysiyis的偏導也類似。

如果就能實現這一步的梯度計算,而對於∂xsi∂θ,∂ysi∂θ∂xis∂θ,∂yis∂θ的求解也很簡單,所以整個過程
Localisation net←Grid generator←Sampler
Localisation net←Grid generator←Sampler
的梯度迴轉就能走通了。
6.Spatial Transformer Networks(STN)
將這三個組塊結合起來,就構成了完整STN網絡結構了。 
 
這個網絡可以加入到CNN的任意位置,而且相應的計算量也很少。

將 spatial transformers 模塊集成到 cnn 網絡中,允許網絡自動地學習如何進行 feature 
map 的轉變,從而有助於降低網絡訓練中整體的代價。定位網絡中輸出的值,指明瞭如何對 
每個訓練數據進行轉化。

7.STN 實現代碼
相應的代碼已經有人實現了,我就不做重複工作了。 
請參考:Spatial Transformer Networks 
Torch code 
Theano code

8.reference
原論文 
Spatial Transformer 
Spatial Transformer Networks 
卷積神經網絡結構變化——Spatial Transformer Networks 
三十分鐘理解:線性插值,雙線性插值Bilinear Interpolation算法 
Spatial Transformer Networks 筆記 
李宏毅老師的視頻講解
--------------------- 
作者:黃小猿 
來源:CSDN 
原文:https://blog.csdn.net/qq_39422642/article/details/78870629 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

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