深度学习方法(十二):卷积神经网络结构变化——Spatial Transformer Networks

欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
技术交流QQ群:433250724,欢迎对算法、机器学习技术感兴趣的同学加入。


今天具体介绍一个Google DeepMind在15年提出的Spatial Transformer Networks,相当于在传统的一层Convolution中间,装了一个“插件”,可以使得传统的卷积带有了[裁剪]、[平移]、[缩放]、[旋转]等特性;理论上,作者希望可以减少CNN的训练数据量,以及减少做data argument,让CNN自己学会数据的形状变换。这篇论文我相信会启发很多新的改进,也就是对卷积结构作出更多变化,还是比较有创意的。

背景知识:仿射变换、双线性插值

在理解STN之前,先简单了解一下基本的仿射变换、双线性插值;其中,双线性插值请跳转至我刚刚写的一篇更详细的介绍“三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法”。这里只放一个示意图[1]:

这里写图片描述

而仿射变换,这里只介绍论文中出现的最经典的2D affine transformation,实现[裁剪]、[平移]、[缩放]、[旋转],只需要一个[2,3]的变换矩阵:

这里写图片描述

对于平移操作,仿射矩阵为:

这里写图片描述

对于缩放操作,仿射矩阵为:

这里写图片描述

对于旋转操作,设绕原点顺时针旋转αα度,坐标仿射矩阵为:
(这里有个trick,由于图像的坐标不是中心坐标系,所以只要做下Normalization,把坐标调整到[-1,1])[1]
这里写图片描述

至于裁剪(Crop)操作,作者在论文中提到:

determinant of the left 2×2 sub-matrix has magnitude less than unity

其实作用就是让变换后的坐标范围变小了,这样就相当于从原图中裁剪出来一块;

Spatial Transformer Networks

OK,开始讲正题。论文中作者讲的比较简略,所以初看有点费劲,而且我看了网上很多资料,很对博主自己也没有理解清楚。最主要的结构图,还是这张:

这里写图片描述
图1 STN架构

按照作者的说法,STN可以被安装在任意CNN的任意一层中——这里有些同学有误解,以为上图中U到V是原来的卷积,并且在卷积的路径上加了一个分支,其实并不是,而是将原来的一层结果U,变换到了V,中间并没有卷积的操作。看下图右边,通过U到V的变换,相当于又生成了一个新数据,而这个数据变换不是定死的而是学习来的,即然是学习来的,那它就有让loss变小的作用,也就是说,通过对输入数据进行简单的空间变换,使得特征变得更容易分类(往loss更小的方向变化)。另外一方面,有了STN,网络就可以动态地做到旋转不变性,平移不变性等原本认为是Pooling层做的事情,同时可以选择图像中最终要的区域(有利于分类)并把它变换到一个最理想的姿态(比如把字放正)。

这里写图片描述

再回到前面图1 STN架构中,分为三个部分:

  1. Localisation net
  2. Grid generator
  3. Sampler

Localisation net
把feature map U作为输入,过连续若干层计算(如卷积、FC等),回归出参数 θ ,在我们的例子中就是一个[2,3]大小的6维仿射变换参数,用于下一步计算;

Grid generator
名字叫grid生成器,啥意思?理解了这个名字就理解了这一步做啥了——在source图中找到用于做插值(双线性插值)的grid。这也是很多人理解错的地方。仔细看下前面公式1:

这里写图片描述

s表示source(U中的坐标),t表示target(V中的坐标)。是不是很奇怪?因为前向计算中,是已知U的,而这个公式怎么是把V做变换呢?——其实这里的意思是,通过仿射变换,找到目标V中的坐标点变换回source U中的坐标在哪里,而V这时候还没有产生,需要通过下一层采样器sampler来产生。

Sampler
作者也叫这一步Differentiable Image Sampling,是希望通过写成一种形式上可微的图像采样方法,目的是为了让整个网络保持可以端到端反向传播BP训练,用一种比较简洁的形式表示双线性插值的公式:

这里写图片描述

和最前面双线性插值的示意图含义是一样的,只是因为在图像中,相邻两个点的坐标差是1,就没有分母部分了。而循环中大部分都没用的,只取相邻的四个点作为一个grid。

所以上面 2. Grid generator和 3. Sampler是配合的,先通过V中坐标 (xtarget,ytarget) 以此找到它在U中的坐标,然后再通过双线性插值采样出真实的像素值,放到 (xtarget,ytarget) 。到这里一层STN就结束了。最后再借用一张[1]作者的示意图作为总结,还是比较清楚的(当然,[1]中作者写的有些理解我看下来也有不准确的,里面的评论区也有讨论,读者自己鉴别一下)。
这里写图片描述


OK,本文就讲到这里,基本上前向过程都提到了,论文中还有关于求导(因为Sampler不连续,只能求Sub-Gradient)和训练loss的一些内容,推荐读者再结合论文看一下,这里不写了。另外,希望写博客的同学自己能够多理解清楚一点再写,不要随便糊弄一下~~~

欢迎转载,注明出处即可。预告一下,下一篇讲一下最新MSRA的deformable convolutional network,和STN有很多相似的idea,也比较有意思。

参考资料

[1] http://www.cnblogs.com/neopenx/p/4851806.html
[2] http://blog.csdn.net/shaoxiaohu1/article/details/51809605
[3] Spatial Transformer Networks, DeepMind,2015

  • 29
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
The first CNN appeared in the work of Fukushima in 1980 and was called Neocognitron. The basic architectural ideas behind the CNN (local receptive fields,shared weights, and spatial or temporal subsampling) allow such networks to achieve some degree of shift and deformation invariance and at the same time reduce the number of training parameters. Since 1989, Yann LeCun and co-workers have introduced a series of CNNs with the general name LeNet, which contrary to the Neocognitron use supervised training. In this case, the major advantage is that the whole network is optimized for the given task, making this approach useable for real-world applications. LeNet has been successfully applied to character recognition, generic object recognition, face detection and pose estimation, obstacle avoidance in an autonomous robot etc. myCNN class allows to create, train and test generic convolutional networks (e.g., LeNet) as well as more general networks with features: - any directed acyclic graph can be used for connecting the layers of the network; - the network can have any number of arbitrarily sized input and output layers; - the neuron’s receptive field (RF) can have an arbitrary stride (step of local RF tiling), which means that in the S-layer, RFs can overlap and in the C-layer the stride can differ from 1; - any layer or feature map of the network can be switched from trainable to nontrainable (and vice versa) mode even during the training; - a new layer type: softmax-like M-layer. The archive contains the myCNN class source (with comments) and a simple example of LeNet5 creation and training. All updates and new releases can be found here: http://sites.google.com/site/chumerin/projects/mycnn
空间变换网络(Spatial Transformer Networks,STN)是一种神经网络结构,用于改善卷积神经网络CNN)的空间不变性。STN可以对经过平移、旋转、缩放和裁剪等操作的图像进行变换,使得网络在变换后的图像上得到与原始图像相同的检测结果,从而提高分类的准确性。STN由三个主要部分组成:局部化网络(Localisation Network)、参数化采样网格(Parameterised Sampling Grid)和可微分图像采样(Differentiable Image Sampling)。 局部化网络是STN的关键组件,它负责从输入图像中学习如何进行变换。局部化网络通常由卷积和全连接层组成,用于估计变换参数。参数化采样网格是一个由坐标映射函数生成的二维网格,它用于定义变换后每个像素在原始图像中的位置。可微分图像采样则是通过应用参数化采样网格来执行图像的变换,并在变换后的图像上进行采样。 使用STN的主要优点是它能够在不改变网络结构的情况下增加空间不变性。这使得网络能够处理更广泛的变换,包括平移、旋转、缩放和裁剪等。通过引入STN层,CNN可以学习到更鲁棒的特征表示,从而提高分类准确性。 关于STN的代码实现,您可以在GitHub上找到一个示例实现。这个实现使用TensorFlow框架,提供了STN网络的完整代码和示例。您可以通过查看该代码来了解如何在您的项目中使用STN。 综上所述,spatial transformer networks(空间变换网络)是一种神经网络结构,用于增加CNN的空间不变性。它包括局部化网络、参数化采样网格和可微分图像采样三个部分。通过引入STN层,CNN可以学习到更鲁棒的特征表示,从而提高分类准确性。在GitHub上有一个使用TensorFlow实现的STN示例代码供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值