1 概述
CNN 的机理使得 CNN 在处理图像时可以做到 transition invariant,却没法做到 scaling invariant 和 rotation invariant。即使是现在火热的 transformer 搭建的图像模型 (swin transformer, vision transformer),也没办法做到这两点。(注:spatial transformer和这两个transformer原理不一样,虽然都叫transformer)因为他们在处理时都会参考图像中物体的相对大小和位置方向。不同大小和不同方向的物体,对网络来说是不同的东西。
其实 pooling layer 有一定程度上解决了这个问题,因为在做pooling 的时候,只要这个特征在,就可以提取出来,但池化层的感受野(receptive field)是固定(fixed)且局部(local)的,ST的行为取决于单个数据样本(意思是对于不同input image,ST的行为是随之改变的),因此是非局部的(non-locally)、动态的。
STN(spatial transformer network) 引入了一个新的可学习模块,空间变换器(ST),它可以对网络内的数据进行空间变换操作。
ST可以用反向传播机制(back-propagation,BP)进行端到端(end-to-end)训练。
这个可微模块可以插入到现有的卷积架构中,使神经网络能够以特征图本身为条件,主动地对特征图进行空间转换,而不需要任何额外的训练监督或对优化过程进行修改。
STN 能够在没有标注关键点的情况下,根据任务自己学习图片或特征的空间变换参数,将输入图片或者学习的特征在空间上进行对齐,从而减少物体由于空间中的旋转、平移、尺度、扭曲等几何变换对分类、定位等任务的影响。
a是输入图片,b 是 STN 中的 localisation 网络检测到的物体区域,c是 STN 对检测到的区域进行线性变换后输出,d 是有 STN 的分类网络的最终输出。
2 模型说明
STN(spatial transformer network) 更准确地说应该是 STL(spatial transformer layer),它就是网络中的一层,并且可以在任何两层之间添加一个或者多个。
如下图所示,spatial transformer 主要由两部分组成,分别是 localisation net 和 grid generator。
输入的特征图U被本地网络处理得到参数theta,然后经过网格生成器得到采样器,映射到原图U上,从而得到输出V。
2.1 Localisation Network
我们的目的是把第
但如果直接加一层全连接让模型学的话,模型可能学出来的就不是仿射变换了,参数量也很大,很难学,很难控制。所有就设计了一个 localisation net,直接让模型学仿射变换的参数,这相当于是一个归纳偏置。
localisation net 的输入是前一层的特征,输出是仿射变换的参数,如果是平面的放射变换就是 6 个参数,通过这六个参数可以控制整个图像的平移,旋转,缩放。
图 2-3 通过参数进行仿射变换示例
图 2-3 中的
其中,
2.2 Parameterised Sampling Grid
localisation net 输出了仿射变换参数之后,仿射变换公式告诉了我们当前层
我们想要的是,当
于是,作者就采用了插值的方法来进行采样。比如当坐标为
双线性插值的基本思想是通过某一点周围四个点的灰度值来估计出该点的灰度值,如图所示.
将 (11) 代入 (12) 整理得:
因为
是相邻的四个点,所以
文章出处登录后可见!