论文笔记:Spatial Transformer Networks
STN的作用
CNN本身对平移、旋转、放缩等许多基础变换是不具有不变性的。
举个例子,如果一个CNN一直在学习如何识别一直猫,训练样本都是一整只猫放满整张图片,如果我们输入一只小猫,那它很有可能不能正确识别。
当然我们可以通过data argumentation来手动使CNN学习到各种基础变换后的猫。
但attention model告诉我们,与其让网络隐式的学习到某种能力,不如为网络设计一个显式的处理模块,专门处理以上的各种变换。
两个概念
STN的基本构架
如图是空间转换模型(spatial transformer module)的基本结构,包括三部分:
- localisation net
- grid generator
- sampler
如何工作
有了第2部分的基础,可以很容易理解STN的做法:
- 生成$V$的meshgrid,然后通过一个$(2\times3)$的变换矩阵$M$得到每个坐标在$U$中对应的像素位置。
- 这个位置可能不是整数,使用双线性插值对该位置的像素值进行估计。
通过仿射变换+双线性插值就可以得到我们需要的图像的相关变形。唯一未知的参数就是变换矩阵$M$,需要什么样的仿射由$M$的值确定。
三部分
这就是localisation net的作用:
通过前一层的特征$U$找到一个合适的$M$。这个$f_{loc}$可以是任何形式的,通常用一个全连接网络。
而grid generator,就是通过localisation net得到的$\theta$,也就是变换矩阵$M$,来对$V$的meshgrid进行仿射变换。
最后一步$Sampler$使用双线性插值得到最终的$V$。
优点
模块化:STN可以插入到模型的任意位置with small tweaking。
可微分:可以使用反向传播进行收敛操作。
动态变换:STN对每个输入样本的特征图都进行不同的仿射变换。相比,pooling layer对所有输入样本的作用相同。