深度学习方法(十二):卷积神经网络结构变化——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架构中,分为三个部分:
- Localisation net
- Grid generator
- 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
深度学习方法(十二):卷积神经网络结构变化——Spatial Transformer Networks的更多相关文章
- 深度学习方法(十三):卷积神经网络结构变化——可变形卷积网络deformable convolutional networks
上一篇我们介绍了:深度学习方法(十二):卷积神经网络结构变化--Spatial Transformer Networks,STN创造性地在CNN结构中装入了一个可学习的仿射变换,目的是增加CNN的旋转 ...
- 深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 最近接下来几篇博文会回到神经网络结构 ...
- 深度学习方法(十一):卷积神经网络结构变化——Google Inception V1-V4,Xception(depthwise convolution)
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 上一篇讲了深度学习方法(十) ...
- libevent源码深度剖析十二
libevent源码深度剖析十二 ——让libevent支持多线程 张亮 Libevent本身不是多线程安全的,在多核的时代,如何能充分利用CPU的能力呢,这一节来说说如何在多线程环境中使用libev ...
- Spatial Transformer Networks(空间变换神经网络)
Reference:Spatial Transformer Networks [Google.DeepMind]Reference:[Theano源码,基于Lasagne] 闲扯:大数据不如小数据 这 ...
- (转载)理解Spatial Transformer Networks
理解Spatial Transformer Networks 转载于:知乎-SIGAI 书的购买链接 书的勘误,优化,源代码资源 获取全文PDF请查看:理解Spatial Transformer Ne ...
- spatial transformer networks 这篇论文
大致看了看这个paper, 很novel. 我的观点: 在traditional convolutional neural netwoks 中,我们通常会depend 于 extracting fea ...
- 论文笔记:空间变换网络(Spatial Transformer Networks)
2015, NIPS Max Jaderberg, Karen Simonyan, Andrew Zisserman, Koray Kavukcuoglu Google DeepMind 为什么提出( ...
- [论文理解] Spatial Transformer Networks
Spatial Transformer Networks 简介 本文提出了能够学习feature仿射变换的一种结构,并且该结构不需要给其他额外的监督信息,网络自己就能学习到对预测结果有用的仿射变换.因 ...
随机推荐
- 洛谷U14200 Changing 题解 【杨辉三角】
题目描述 有nnn盏灯环形排列,顺时针依次标号为1⋯n1\cdots n1⋯n.初始时刻为000,初始时刻第iii盏灯的亮灭aia_iai给定,000表示灭,111表示亮.下一时刻每盏灯的亮灭取决于 ...
- mysql 查询小demo
两张表的的结构如下,需求是写出从one表到two表和从two表到one表的查询转换. create table student_one( name varchar(50) default '' not ...
- 二叉树系列 - 二叉树的深度,例 [LeetCode]
二叉树的深度的概念最值得注意的地方,在于 到"叶子"节点的距离. 一般来说,如果直接说“深度”,都是指最大深度,即最远叶子的距离. 这里放两道例题,最小深度和最大深度. 1. 二叉 ...
- [Wc2007]剪刀石头布
[Wc2007]剪刀石头布 http://www.lydsy.com/JudgeOnline/problem.php?id=2597 Time Limit: 20 Sec Memory Limit: ...
- 分治法:三维偏序问题之CDQ分治
我怀疑那个k是用来定界限用的 #include <cstdio> #include <cstring> #include <algorithm> using nam ...
- 搭建简单的node+express+mongodb项目
安装 首先要确保已经安装了 Node.js,接下来创建一个目录,然后进入此目录并将其作为当前工作目录. mkdir myapp cd myapp 通过 npm init 命令为应用创建一个 packa ...
- 如何发布一个自定义Node.js模块到NPM(详细步骤,附Git使用方法)
咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着, ...
- 源自人脑的神奇算法 -- 读《How to make your own neural network》有感
最近读到了一本很好的关于机器学习-深度学习的书值得推荐下并特意做了这个学习总结. 为什么推荐 在我认为好书(计算机类)的评判有几个标准: 试图以通俗的语言阐述,并在引入任何新概念的时候都讲述来龙去脉, ...
- 【洛谷 P4360】 [CEOI2004]锯木厂选址(斜率优化)
题目链接 一开始我的\(dp\)方程列错了,其实也不能说列错了,毕竟我交上去还是把暴力的分都拿到了,只是和题解的不一样,然后搞半天没搞出来去看题解,又看不懂,对不上,原来状态设置不一样自闭了. \(f ...
- 2017ACM暑期多校联合训练 - Team 1 1006 HDU 6038 Function (排列组合)
题目链接 Problem Description You are given a permutation a from 0 to n−1 and a permutation b from 0 to m ...