如果网络能够对经过平移、旋转、缩放及裁剪等操作的图片得到与未经变换前相同的检测结果,那么这个网络具有空间变换不变性。普通的卷积神经网络(CNN)具有显式的学习平移不变性和隐式的学习旋转不变性,但与其让神经网络隐式的学习到某种能力,不如为网络设计一个显式的处理模块,专门处理以上的各种变换。于是诞生了空间变换层 (Spatial Transformer Layer)。它可以包含在标准的神经网络架构中,以提供空间转换功能。下图是空间变换不变性的一种展示。
在标准的空间变换神经网络架构中存在空间变换器模块,负责提供空间转换功能。它的动作取决于各个数据样本,并且在训练期间学习了适当的行为(没有额外的监督)。与汇集层不同,感知域是固定和局部的,空间变换器模块是一种动态机制,可以通过为每个输入样本生成适当的变换来主动空间变换图像(或特征映射)。然后在整个特征图上执行变换,并且可以包括缩放,裁剪,旋转以及非刚性变形。这允许空间变换网络不仅可以选择最相关的图像区域,而且还将这些区域变换为规范的预期姿势以简化后续层中的推断。值得注意的是,空间变换器可以通过标准的反向传播进行训练,从而可以对注入的模型进行端到端的训练。
以手写数字识别为例,图中只有一小块是数字,其他大部分地区都是黑色的。如上图所示,(a)部分为神经网络的输入,然后经过(b)部分的空间转换输出为(c)部分,(d)部分为CNN的识别结果。
如图是Spatial Transformer Networks的结构,主要的部分一共有三个,它们分别是:
- 参数预测:Localisation net
输入:特征图
输出:变换矩阵 ,用于下一步计算
- 坐标映射:Grid generator
可以得到输出特征图的坐标点对应的输入特征图的坐标点的位置。计算方式如下:
${\wr {\mathbf{l}}^{\sqrt{(\quad \blacksquare \}.8}\blacksquare \mathrm{ff}}}^{\hat{t}})=\boldsymbol{\mathcal{H}}(\zeta {^{\mathbf{f}}\boldsymbol{l}}^{\blacksquare \blacklozenge }\}=\iota \boldsymbol{\theta }(\begin{array}{c} \wr ^{.}\hat{\mathbf{I}}\\ ll\wr \boldsymbol{l}\\ \end{array}{1^{\blacksquare }})=\lfloor {^{\theta .}\hat{\hookrightarrow }^{\{\theta {2}}}^{\theta \quad \theta {1^{\blacksquare \boldsymbol{\gamma }}}\quad \boldsymbol{\theta }{13}}$ $\breve{}$ $^{.\boldsymbol{\omega }\prime }$ $\blacksquare $ $\theta $ $\ngeq $ $\blacksquare \quad \blacksquare $ \ddag $\rceil (._{\blacksquare \oint }^{\boldsymbol{l}}$ . \textbf{t}1 $\wr $ \textbf{\textit{lt}} $\blacksquare $ $\blacksquare $ $)$
式中s代表输入特征图像坐标点,t代表输出特征图坐标点, 是局部网络的输出。这里需要注意的是坐标的映射关系是{目标图-->输入图片}。这是因为输入图片与目标图片坐标点均是人为定义的标准化格点矩阵,x,y的值在-1到1之间,图片任何一个位置的坐标点是固定不变的。这就好比两个坐标完全一样的图像,无论用谁乘以仿射变换矩阵,都可以得到经过仿射变换后的图像与原坐标点的映射关系。也就是说这里即使把坐标的映射关系变为{输入图片-->目标图片}得到的也是一样的映射关系。通过这一步,已经得到变换后的输出特征图每个位置的坐标在输入特征图上的对应坐标点。下面我们就可以直接提取出输入特征图的每个位置的像素值。在提取像素值之前,我们应该注意到一点:目标图片的坐标点对应的cd 输入图片的坐标点不一定是整数坐标点,而仅仅整数坐标才能提取像素值,所以需要利用插值的方式来计算出对应该点的灰度值(像素值)。可以看出,步骤一为步骤二提供了仿射变换的矩阵,步骤二为步骤三提供了输出特征图的坐标点对应的输入特征图的坐标点的位置,步骤三只需要提取这个对应的坐标点的像素值(非整数坐标需要使用双向性插值提取像素值)就能最终得到输出特征图V。
- 像素采集:Sampler
利用期望的插值方式来计算出对应点的灰度值。以双向性插值为例,计算公式如下:
$_{\$}^{_{.}^{\boldsymbol{W}}\mathfrak{e}\blacksquare ^{\blacksquare }}=\sum _{\blacksquare _{\mathrm{f}},}^{\prime l}\sum _{\mathfrak{m}}^{\mathrm{ll}^{\blacksquare }}\mathrm{f}_{^{\blacksquare \prime K}}^{\blacksquare \boldsymbol{\mathcal{C}}}\ \mathrm{l}\blacksquare \mathrm{l}\blacksquare \mathrm{ll}\ \mathrm{l}\times \blacksquare \hat{\blacksquare (\{}\}._{\hat{\hat{}}}^{\lfloor }\blacksquare -|\blacksquare \wr _{\mathfrak{i}}^{\blacksquare \mathbf{N}}-l$ $'$ $\blacksquare |)\wr \blacksquare 1\mathbf{l}^{\blacksquare }\ \mathrm{lX}(\mathfrak{l}^{|_{.}}$ ) $_{\hat{}\hat{}}-|\begin{array}{c} \wr _{\int }\\ \blacksquare \\ \end{array} $ \texttt{'}\textbf{\textit{S}} $\blacksquare $ $-'\mathfrak{f}^{|)}$
Vci为输出特征图上第c个通道某一点的灰度值, Ucnm为输入特征图上第c个通道点(n,m)的灰度。当Xsi - m或者 Ysi - n大于1时,对应的max()项将取0,也就是说,只有(Xi, Yi)周围4个点的灰度值决定目标像素点的灰度。并且当Xsi - m和Ysi - n越小,影响越大(即离点 (n,m)越近),权重越大,这和我们上面介绍双线性插值的结论是一致的。其实,这个式子等价于:
$'\langle p)\sqrt{-}(\}^{\hat{}\daleth -!\blacksquare \mathbf{S}\boldsymbol{\lambda }2-}\grave{}\rangle \int ^{\{}Q\}\})+\}$ $\hat{}\quad \blacksquare $ $\mathbf{I}^{\blacksquare }$ -- $\mathrm{l}^{\blacksquare }\}(\mathbf{Z}-$ \textbf{Z} $\mathrm{l}\}$ $^{\prime \blacksquare }(\begin{array}{rcc} _{Q},\}\rangle _{\langle }\ \mathrm{l}-\grave{\mathbf{l}\hat{}\}\}\langle \mathbf{X}2-\blacksquare } & \sqrt{} & \}Q\}\boldsymbol{\mathit{\Delta }}\rangle +(\\ \blacksquare \quad \blacksquare \quad \blacksquare & & \\ \end{array} $ $\leftarrow $ $\mathbf{I}^{\blacksquare }-\ \mathbf{l}\blacksquare \}\mathbf{l}\}$ $\blacksquare $ \textbf{X}-- $\mathbf{Z}\}\rangle $ $\sqrt{}$ $\{Q^{\boldsymbol{\eta }}2\}$
描述来源:
Jaderberg, M., Simonyan, K., & Zisserman, A. (2015). Spatial transformer networks. In Advances in neural information processing systems (pp. 2017-2025).
发展历史
2010年,Siddhartha Puri 开始研究神经网络的图像处理方向。
2015年,Max Jaderberg,Karen Simonyan和Andrew Zisserman 首次提出STN的概念并详细描述了STN的原理和算法过程。
2015年,Mrinal Haloi 将STN用于信号灯的识别,这是STN的首次应用。
2016年,Xu Jia等提出了STN的分支动态过滤网络(Dynamic filter networks)。
2017年,Anil Bas等在STN的基础上提出了3D形变模型(3DMM-STN),将STN的发展从2D提升到3D。
主要事件
年份 | 事件 | 相关论文/Reference |
2010 | Siddhartha Puri 开始研究神经网络的图像处理方向。 | Puri, S. (2010). Training convolutional neural networks on graphics processing units. U.S. Patent No. 7,747,070. Washington, DC: U.S. Patent and Trademark Office. |
2015 | Max Jaderberg,Karen Simonyan和Andrew Zisserman 首次提出STN的概念并详细描述。 | Jaderberg, M., Simonyan, K., & Zisserman, A. (2015). Spatial transformer networks. In Advances in neural information processing systems (pp. 2017-2025). |
2015 | Mrinal Haloi 将STN用于信号灯的识别。 | Haloi, M. (2015). Traffic sign classification using deep inception based convolutional networks. arXiv preprint arXiv:1511.02992. |
2016 | Xu Jia等提出了STN的分支动态过滤网络 | Jia, X., De Brabandere, B., Tuytelaars, T., & Gool, L. V. (2016). Dynamic filter networks. In Advances in Neural Information Processing Systems (pp. 667-675). |
2017 | Anil Bas等在STN的基础上提出了3D形变模型. | Bas, A., Huber, P., Smith, W. A., Awais, M., & Kittler, J. (2017, August). 3d morphable models as spatial transformer networks. In Proc. ICCV Workshop on Geometry Meets Deep Learning (pp. 904-912). |
发展分析
瓶颈
在训练中,带有STN模块的CNN存在的问题是需要监控两个网络是否过度拟合,这使得训练变得棘手且不稳定。同时,在像素采集过程中,使用的基函数数量有限且形式单一,导致其拟合能力有限。 其次,当非线性变形函数不明确或不连续时,基函数的线性组合表示将不准确。
未来发展方向
STN不需要关键点的标定,能够根据分类或者其它任务自适应地将数据进行空间变换和对齐(包括平移、缩放、旋转以及其它几何变换等)。在输入数据在空间差异较大的情况下,这个网络可以加在现有的卷积网络中,提高分类的准确性。
作为经典算法,未来发展方向还是用于提高CNN分类的准确性以及从平面识别提升到3D识别和建模上。
Contributor: Tiange Wang