李宏毅深度学习(2017)

8.NN特殊结构(1)——Spatial Transformer

2019-02-20  本文已影响16人  SpareNoEfforts

这里介绍三种特殊的结构:spatial transformer layer,highway network & grid LSTM,还有recursive network。
本节介绍:spatial transformer layer.

如下图所示,输入5和6,你把他直接放大或者旋转,对于CNN来说,他认为是不一样的。那怎么办呢?那中间加一个Layer,旋转缩放层,即spatial transformer layer,也是一个NN layer。它不仅可以transform输入图像,也可以transform feature map。

那么我们要怎么对一个image/feature map做transform呢?我们假设以下图左边这个image是transform前的结果layer l-1,右边这个image是transform后的结果layer l,很明显,这次转换是把image由上往下做了平移。

一般而言,一个全连接层的式子我们可以写成:a_{nm}^l = \sum\limits_{i = 1}^3 {\sum\limits_{j = 1}^3 {w_{nm,ij}^la_{ij}^{l - 1}} },第l层里面的每一个神经元的输出是a_{nm}^l。如果我们想做到以上的这个平移的转换,我们只要适当的调整权重w_{nm,ij}^l。那么什么样的weight可以让我们做到平移这件事呢?即:a_{nm}^l = a_{(n - 1)m}^{l - 1},如果i=n-1,j=m的话,w_{nm,ij}^l = 1,否则,w_{nm,ij}^l = 0,这样子就可以做到平移。

接下来,我们来做放缩:

下图上面是 将图像放大两倍的做法;下面是 将图像缩小,移到右上角的做法: 接下来,我们来做image的旋转:比如,逆时针旋转120度:

如果我们想要控制两张image之间的关系,我们要怎么做呢?如果只是旋转平移缩放的话,即\varphi tranform,我们其实只需要6个参数,也就是abcdef这6个参数,我们就可以把一张image变成另外一张image。即:神经网络的输入是一整张image,输出是一个六维的vector:[\begin{array}{*{20}{c}} a&b\\ c&d \end{array}][\begin{array}{*{20}{c}} e\\ f \end{array}]

那我们现在举一个实际的例子:


那么如果参数是小数的情况呢?如下图所示,我们计算出来结果是
上面这个近似有没有问题呢?
实际上,我们在做这个的时候,我们需要做interpolation。
我们不要把对应的值直接设成离它距离最近的那个点,如果直接设成,可能导致没有办法微分。所以,我们的做法应该是,
取那四个点做插值,如下图所示做法:
现在我们就可以用梯度下降解了,为什么呢?因为我们发现,当

动画演示

上一篇下一篇

猜你喜欢

热点阅读