歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。
技術交流QQ羣:433250724,歡迎對算法、機器學習技術感興趣的同窗加入。html
今天具體介紹一個Google DeepMind在15年提出的Spatial Transformer Networks,至關於在傳統的一層Convolution中間,裝了一個「插件」,可使得傳統的卷積帶有了[裁剪]、[平移]、[縮放]、[旋轉]等特性;理論上,做者但願能夠減小CNN的訓練數據量,以及減小作data argument,讓CNN本身學會數據的形狀變換。這篇論文我相信會啓發不少新的改進,也就是對卷積結構做出更多變化,仍是比較有創意的。算法
在理解STN以前,先簡單瞭解一下基本的仿射變換、雙線性插值;其中,雙線性插值請跳轉至我剛剛寫的一篇更詳細的介紹「三十分鐘理解:線性插值,雙線性插值Bilinear Interpolation算法」。這裏只放一個示意圖[1]:markdown
而仿射變換,這裏只介紹論文中出現的最經典的2D affine transformation,實現[裁剪]、[平移]、[縮放]、[旋轉],只須要一個[2,3]的變換矩陣:網絡
對於平移操做,仿射矩陣爲:架構
對於縮放操做,仿射矩陣爲:less
對於旋轉操做,設繞原點順時針旋轉αα度,座標仿射矩陣爲:
(這裏有個trick,因爲圖像的座標不是中心座標系,因此只要作下Normalization,把座標調整到[-1,1])[1]
機器學習
至於裁剪(Crop)操做,做者在論文中提到:ide
determinant of the left 2×2 sub-matrix has magnitude less than unity學習
其實做用就是讓變換後的座標範圍變小了,這樣就至關於從原圖中裁剪出來一塊;atom
OK,開始講正題。論文中做者講的比較簡略,因此初看有點費勁,並且我看了網上不少資料,很對博主本身也沒有理解清楚。最主要的結構圖,仍是這張:
圖1 STN架構
按照做者的說法,STN能夠被安裝在任意CNN的任意一層中——這裏有些同窗有誤解,覺得上圖中U到V是原來的卷積,而且在卷積的路徑上加了一個分支,其實並非,而是將原來的一層結果U,變換到了V,中間並無卷積的操做。看下圖右邊,經過U到V的變換,至關於又生成了一個新數據,而這個數據變換不是定死的而是學習來的,即然是學習來的,那它就有讓loss變小的做用,也就是說,經過對輸入數據進行簡單的空間變換,使得特徵變得更容易分類(往loss更小的方向變化)。另一方面,有了STN,網絡就能夠動態地作到旋轉不變性,平移不變性等本來認爲是Pooling層作的事情,同時能夠選擇圖像中最終要的區域(有利於分類)並把它變換到一個最理想的姿態(好比把字放正)。
再回到前面圖1 STN架構中,分爲三個部分:
Localisation net
把feature map U做爲輸入,過連續若干層計算(如卷積、FC等),迴歸出參數
Grid generator
名字叫grid生成器,啥意思?理解了這個名字就理解了這一步作啥了——在source圖中找到用於作插值(雙線性插值)的grid。這也是不少人理解錯的地方。仔細看下前面公式1:
s表示source(U中的座標),t表示target(V中的座標)。是否是很奇怪?由於前向計算中,是已知U的,而這個公式怎麼是把V作變換呢?——其實這裏的意思是,經過仿射變換,找到目標V中的座標點變換回source U中的座標在哪裏,而V這時候尚未產生,須要經過下一層採樣器sampler來產生。
Sampler
做者也叫這一步Differentiable Image Sampling,是但願經過寫成一種形式上可微的圖像採樣方法,目的是爲了讓整個網絡保持能夠端到端反向傳播BP訓練,用一種比較簡潔的形式表示雙線性插值的公式:
和最前面雙線性插值的示意圖含義是同樣的,只是由於在圖像中,相鄰兩個點的座標差是1,就沒有分母部分了。而循環中大部分都沒用的,只取相鄰的四個點做爲一個grid。
因此上面 2. Grid generator和 3. Sampler是配合的,先經過V中座標
OK,本文就講到這裏,基本上前向過程都提到了,論文中還有關於求導(由於Sampler不連續,只能求Sub-Gradient)和訓練loss的一些內容,推薦讀者再結合論文看一下,這裏不寫了。另外,但願寫博客的同窗本身可以多理解清楚一點再寫,不要隨便糊弄一下~~~
歡迎轉載,註明出處便可。預告一下,下一篇講一下最新MSRA的deformable convolutional network,和STN有不少類似的idea,也比較有意思。
[1] http://www.cnblogs.com/neopenx/p/4851806.html
[2] http://blog.csdn.net/shaoxiaohu1/article/details/51809605 [3] Spatial Transformer Networks, DeepMind,2015