大致看了看这个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.