我們知道cnn是無法識別到經過縮放和旋轉的圖片的,但是這個spatial transformer這個neutral network是可以做到的,可以被放到cnn里
接下來就是講解一個空間變換層地例子:我們可以看到,layerl就是layerl-1經過平移得到的,其中,我們layerl中的每一個元素,是上一層每一個元素與權重相乘之后再相加得到的結果,這個權重是什么呢,是當i? = n - 1, j = m時,w = 1, 不然w = 0,這就可以讓我們上一個layer中的元素在這一個layer中往下一格,所以其實靠w來進行變換
?重要的是找到相應的w
對于圖像平移,我們調整圖像,可以將每個像素pixel建系,然后通過坐標的移動來對圖片移動,先對坐標進行放縮(也可以理解為對圖片進行放縮),然后對坐標進行平移(也可以理解為對圖片進行平移)
對于旋轉圖形,我們可以用三角函數
其實,它的工作原理是這樣的,看起來好像這個index搞反了,但實際上沒有,這是反向映射,我們根據l來找l-1
我們來舉例說明一下,我們通過layer l 中的a22這個neuron來找到上一個layer中對應的neuron,可以看到,就是layer l-1中的a11
如果這個matrix里面是小數該怎么辦呢,我們得到的index很可能也是小數,但是index應該是整數,難道我們四舍五入嗎,但是這樣子我們就無法進行gradient descent,因為這種round函數的gradient是0
我們就要引入interpolation ,也就是插值,我們要用到的是線性插值
接下來就是使用它的流程,可以將它放在很多地方
接下來就是一些例子
在辨識鳥中,我們設定四個數字,是他只能放縮,無法旋轉