1.1简介
CNN并不存在几个特性:
1.Scaling的特性,filter size尺寸固定的情况下,大只狗与小只狗的形状并没有办法自动缩放辨识。
2.Rotation的特性,『3』转过来看起来对机器而言就是『m』。
3.也许仅有些许的Translation,但移动过多情况下对CNN来说也是不一样的。
上图范例,也许照片上有着缩小的『5』、『6』,但对机器而言两个数字应该就是很大,即使是单纯的缩放,对CNN而言也是不一样的东西。
因此Spatial Transformer Layer想做的事就是将图片做旋转缩放,让特征可以符合机器识别。
Spatial Transformer Layer本身也是一个NN layer,可以跟CNN并在一起直接训练,不仅可以Transform输入,所有的feature map都可以。
1.2 核心理论
上图左是transform之前的照片,上图右是transform之后的照片,明显的发现到这个transform是将照片做了平移。
一般fully connect layer来说可以将Output视为Input与Weight的计算加总而得,它也可以做的到Transformation,只要对Weight做一些适当的调整。
上图为例,只要让,就是让这一层的值等于上一层的上一的值。
Weight设计成索引于米且的时候,那Weight=1,其余为0,这样就可以达成平移的目的。换句话说,如果要对照片做缩放或旋转的话,只需要对Weight做不同的设计就可以。
只需要对Weight做调整就可以达成平移(左)与旋转(右)的效果,要做到这种调整可以利用NN来控制。
1.3Image Transformation
这边说明照片缩放与平移的作法,原值乘上参数加上平移值。
图上范例为放大两倍,因此乘上参数2,不做平移,因此最后加0。
图下范例为缩小两倍并且移至右上,因此乘上参数0.5最后加上平移值0.5。
如果要将凉宫春日旋转,可以利用Sin, Cos来做调整。
1.4Spatial Transformer Layer
是图像的索引,当=(2,3),带入上面公式,可
=(1,2),其他的变换类似,结果如上图的箭头。
刚才说的是很刚好的得到的解都是整数,但如果不是的话就会有上图的结果,接到小数点的索引,但这种索引是不存在的,因此我们可以将计算所得的索引取四舍五入,得到,怪怪的对吧,不能这么做。
注意到,这种情况下是无法利用梯度下降来求解的,梯度是一种将参数做小小的变化,它对Output会有多少影响,对Spatial Transformer Layer的NN参数做小小的改变,也许变为1.61,2.39,但四舍五入之后它接到的位置还是一样,代表Output没有任何变化,因此微分是『0』
1.41解决上面出现微分为0的方法
方案:插值
要处理小数点问题,就需要利用Interpolation,求出来的数值是有小数的,而这个小数索引实际上是在四个点的区间内,我们不单纯的参考它跟距离最近的那个点,而是四个点的数值都参考。
这种情况下NN参数有些微的变化的时候Output也会有些微的变化,就可以利用梯度下降来优化求解了。
1.5 完整STN网络结构
这个网络可以加入到CNN的任意位置,而且相应的计算量也很少。
将 spatial transformers 模块集成到 cnn 网络中,允许网络自动地学习如何进行 featuremap 的转变,从而有助于降低网络训练中整体的代价。定位网络中输出的值,指明了如何对每个训练数据进行转化。
2. 应用
1.翻译杂乱的MNIST: 应用于MINIS上,不论数值如何的平移、旋转,对Output都没有影响。
2.街景门牌号
3.鸟类的辨识案例