大致看了看這個paper, 很novel.
我的觀點: 在traditional convolutional neural netwoks 中,我們通常會depend 於 extracting features. 而本paper把 hand-crafted 和 feature extraction 結合在了一起,用於處理 invariance of various inputs.
spatial transformer 可以包括:平移、旋轉、放縮等操作。 在數學上的名稱有: affine transformasion ,另外還有:projective transformation、 piece-wise affine、 thin plate spline等。
實施方法:
列舉文中的二維的例子:
對於二維的圖片識別中,如果圖片是旋轉的怎么辦?被平移怎么辦?(通常做法就是不管輸入如何,我就統統原樣輸入給CNN,讓其學習 features), 現在我們可以手動進行糾正吧,方法就是通過 affine transformation, 這個變換需要參數的,參數如何確定只能靠人了。。。 而這個 paper的做法為根據輸入的圖片讓 auxiliary 學習這個參數,然后進行 affine transformation(這個是提前決定好的),然后再進行原來的操作。 另個,這個transformer 可以應用於inputs 上,也可以用於feature maps上。
具體:
第一步: 利用一個 localization network 來學習后面進行transformer 需要的參數; 這個 network 可以是fully-connected 也可以是 convolutional neural networks, 兩個網絡最后都會通過一個regression layer進行輸出參數;
注意: 一開始,我認為這個參數的訓練也是 supervise的,即訓練的時候給定對應每一個輸入的參數,不過我認為錯了, 訓練過程中並沒有已知的參數, 而是像其它的網絡參數一下通過back-propagetion進行訓練。 既然如此,我認為這個參數的初始化絕對不一樣,一開始應該都設為 idnetity 變換的相應參數;
第二步: 有了第一步的transformer的參數,這一步進行求出這個 transformer 的映射來。 用文中的方法就是求出: sampling grid(原像素點的位置組成的grid)與regular grid(變換以后的像素點組成的grid).
通常的作法: 求出從輸入點到輸出點的位置的映射。 本文的作法: 學習出從輸出點到輸入點的位置的映射。 (通常:輸入與輸出這個映射矩陣互為逆)
文中這么做的好處: 我們可以保證的是:輸出的每一個像素點的值來自輸入的像素點或者通過輸入像素點的插值得到。 反過來就不操作了。 所以呢,應該求從 regular grid 至 sampling grid 的映射; 這一點很重要,也很容易范錯的;
從 regular grid 至 sampling grid 的映射矩陣的參數就是第一步求出來的參數組成了;
第三步:不可能永遠可以映射到輸入的像素點,所以呢,就需要進行插值了, 文中的 differentiable image samling介紹了一個簡單的插值方法(雙張線性插值,在求像素的value時,會用到相關的公式), 並且證明了這個過程是可以求導的, 意思就是可能通過 back-propagation algorithm 進行訓練;
整個過程:
用文中一個圖表示一下:
這個圖畫的很簡單;
我認為的核心:
這篇文章引入了 hand-crafted的 transformer(如, affine transformer). 但是呢,相關的參數是通過網絡訓練得到的;
(這個不算):另外, 求不連續的函數導數時,需要用於sub-gradient(子梯度,我需要了解一下)
不清楚的地方:
通過網絡訓練,學習到的tansformer的相關參數的含義,是否就是我們希望得到的 spatial transformer 呢?? 文中的實驗結果表明了,是。如下圖所示(第二個圖):
即然是,這個參數是怎么學到的呢,沒有引用相應的 參數的label啊。。 純粹通過 back-propagation algorithm . 這個讓我有點驚訝!!!!!!!!
引用文獻:Jaderberg M, Simonyan K, Zisserman A. Spatial transformer networks[C]//Advances in Neural Information Processing Systems. 2015: 2017-2025.