目录
简介
卷积神经网络缺少对输入数据空间变化的鲁棒性,简而言之同样的物体假设在不同图片中存在旋转、平移
缩放等空间上的变化,也会对卷积神经网络的预测产生影响。在图像识别、物体定位、语义分割、动作识别等领域,增加对空间信息的鲁棒性都有助于提高最后的准确率。
尽管引入池化操作可以赋予我们的网络一定程度上对空间变化的鲁棒性,但池化操作其实是一个不理想的操作,因为它对丢弃原有feature map上的信息从而丢失原来的位置信息。其次,池化操作的感受野很小,能获得的全局信息也较少。
由此,作者们提出了Spatial Transformer Network,它是一种可学习的网络模块(可以通过反向传播优化参数),可以作为插件一样插入进任何已经存在的网络结构中,赋予网络对空间变化的鲁棒性。
网络结构
整个网络结构由三部分组成,其中输入为U,输出为V。
Localisation net
输入为feature map,经过一系列隐藏层后输出Spatial Transformation的参数,Spatial Transform会被应用到feature map
对于Localisation net的组成没有特别的要求,可以是全连接也可以是卷积,但在最后需要regression参数。对于仿射变化,可以知道参数是6维的
Parameterised Sampling Grid
对每个像素点进行采样,与localisation net所获得的spatial transformation参数结合可以知道输出feature map上的点在输入feature map上的对应点
然而经过计算后得到的源图像的坐标点可能是小数,而图像中点的坐标都是整数怎么办呢?
Differentiable Image Sampling
为了解决上述的问题,我们可以想到使用双线性插值来进行采样,当然也可以使用其他的采样方法,然而为了让梯度可以反向传播,使用的方法必须要可以对其参数进行求导。通过插值,我们可以改变最终输出V的大小,从而完成整个transformer
搬运一些公式。
结论
至此,其实整个网络已经结束了,看看它的效果吧
Coding
https://github.com/kevinzakka/spatial-transformer-network/blob/master/stn/transformer.py
整个代码逻辑很清晰和论文描述的过程一样分成三个部分,不再一一介绍。
References
https://arxiv.org/abs/1506.02025
https://kevinzakka.github.io/2017/01/10/stn-part1/