https://blog.csdn.net/yaoqi_isee/article/details/72784881

Abstract:

作者说明了CNN对于输入的数据缺乏空间变换不变形(lack of spatially invariant ability to input data),因此作者引入了一个spatial transformer module,不需要额外的监督,能够以data-driven的方式学习得到输入图像的空间变换参数,赋予网络spatial invariant能力。

Introduction:

普通的神经网络通过max-pooling实现了一定程度上的translation invariance,但是这种不变形是通过网络的max-pooling层的堆叠实现的,对于网络内部的feature map来说,输入的图像如果进行了大范围的(平移)变换,feature map还是无法做到invariance(因为每一个max-pooling就只是2x2大小的模块,只能保证在2x2大小范围内的微小的变换,输出是不变的,通过堆叠这些2x2的池化单元,才能实现对大尺度平移变换的不变性)。

这篇文章中,作者提出了一个spatial transformer module(记为ST模块),这个模块对于任意输入的图像或者feature map,产生一个对应的spatial transform的参数,然后根据这个参数将原来的图像或者feature map做一个全局(而非局部)的空间变换,得到最终的canonical pose(也就是正正方方的图,比如原来物体是斜的,通过ST模块之后变成正的了)。

Spatial Transformer:
ST模块可以分成三个部分:localization network根据输入的feature map回归spatial transform的参数 θθ,然后用这个参数去生成一个采样的grid,最后根据这个grid以及输入的feature map得到输出的经过空间变换的feature map,如下图所示

Localization network
localization的网络输入一张feature map U∈RH×W×CU∈RH×W×C,输出 θ=floc(U)θ=floc(U), θθ 的size取决于我们预先定义的空间变换的类型,比如仿射变换的话,大小就是6维。

Parameterized Sampling Grid
有了空间变换的参数之后,我们就可以知道输出的feature map上的每一个点在输入的feature map上的位置了。比如说对于二维的仿射变换,我们可以建立输出feature map上的坐标和输入feature map上坐标之间的映射关系:

其中 (xti,yti)(xit,yit) 表示输出的feature map上的坐标,(xsi,ysi)(xis,yis) 表示输出feature map上坐标对应在输入feature map上的采样点坐标。
当我们把上面的参数特殊化之后,其实就可以model其他的变换,比如attention,crop,translation,以attention为例,参数为

Differentiable Image Sampling
知道了输出feature map在输入feature map上的采样点坐标之后,接下来就是要根据采样点的值确定输出目标点的值了。这里一般会用到kernel,以采样点为中心的kernel范围内的点对输出目标点的值都有贡献。

上式中,V表示输出特征图,i表示特征图的下标,c表示第c个channel,所有的空间变换对于各个channel都是一样的。H′,W′H′,W′ 表示输出的特征图的长宽。U表示输入的特征图,k表示预定义的kernel,xsi,ysixis,yis 表示采样点坐标,ΦΦ 表示kernel的参数。

一般常用的kernel为双线性插值kernel(根据输出feature map上规律的坐标值计算输入的feature map上采样点的坐标通常得到的坐标值是小数,所以可以用双线性插值计算采样点处的feature值),这个时候,上式就退化成

求导的话也很方便

根据采样点的坐标值可以继续对参数 θθ 求导,从而更新localization网络的参数。

Experiment

1.Distorted MNIST
作者首先在Distorted MNIST数据集上进行实验,主要存在以下几种空间变换:R(旋转)、RTS(旋转平移尺度变换)、P(投影变换)、E(弹性变换)
作者设置了两个baseline:fully-connected NN(FCN)以及convolutional NN(CNN)。
实验组加入了ST模块,分别是Aff(仿射变换)、Proj(投影变换)以及TPS(plate spline transformation)
实验结果如下所示:

表格中的数字表示不同的模型在不同的distorted mnist数据集上的错误率。可以看到加了ST模块的模型相比没有加ST的对照模型,错误率降低了。
右图中第一栏表示输入的distorted的图像,(b)栏表示根据 θθ 得到的sampling grid,(c)栏表示spatial transformer的输出。

3.Fine-Grained Classification
通过在一个网络里面加入多个ST模块,可以提高网络model各种空间变换的能力。作者在CUB数据集(the birds appear at a range of scales and orientations, are not tightly cropped)上进行了实验。
作者以state-of-art作为baseline
作者自己的网络采用了2个或者4个ST模块,模型如下图所示,ST模块用的是attention机制的:

通过locoliation网络预测两个 θθ,然后根据这两个 θθ 得到两个sampling的结果,分别取提取特征做分类。

上图表示CUB上的结果。可以看到2ST-CNN中一个集中在头部一个集中在身体。

---------------------

本文来自 yj_isee 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/yaoqi_isee/article/details/72784881?utm_source=copy

Spatial Transformer Network的更多相关文章

  1. stn,spatial transformer network总结

    对整篇paper的一个总结:https://blog.csdn.net/xbinworld/article/details/69049680 github:1.https://github.com/D ...

  2. Spatial Transformer Networks(空间变换神经网络)

    Reference:Spatial Transformer Networks [Google.DeepMind]Reference:[Theano源码,基于Lasagne] 闲扯:大数据不如小数据 这 ...

  3. spatial transformer networks 这篇论文

    大致看了看这个paper, 很novel. 我的观点: 在traditional convolutional neural netwoks 中,我们通常会depend 于 extracting fea ...

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

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 今天具体介绍一个Google ...

  5. STN(Spatial Transformer Networks)

    url: https://arxiv.org/abs/1506.02025 year:2015 blog: https://kevinzakka.github.io/2017/01/10/stn-pa ...

  6. [论文理解] Spatial Transformer Networks

    Spatial Transformer Networks 简介 本文提出了能够学习feature仿射变换的一种结构,并且该结构不需要给其他额外的监督信息,网络自己就能学习到对预测结果有用的仿射变换.因 ...

  7. 论文笔记之:Optical Flow Estimation using a Spatial Pyramid Network

    Optical Flow Estimation using a Spatial Pyramid Network   spynet  本文将经典的 spatial-pyramid formulation ...

  8. 论文笔记:空间变换网络(Spatial Transformer Networks)

    2015, NIPS Max Jaderberg, Karen Simonyan, Andrew Zisserman, Koray Kavukcuoglu Google DeepMind 为什么提出( ...

  9. (转载)理解Spatial Transformer Networks

    理解Spatial Transformer Networks 转载于:知乎-SIGAI 书的购买链接 书的勘误,优化,源代码资源 获取全文PDF请查看:理解Spatial Transformer Ne ...

随机推荐

  1. eclipse的项目和配置文件 .project .cproject .classpath .metadata

    eclipse CDT建立project后在project name对应的目录下面会生成.project和.cproject两个隐藏文件. eclipse  java建立project后在projec ...

  2. 关于JAVA_HOME, CLASSPATH和PATH的设置

    http://bbs.csdn.net/topics/120079565 1.PATH,这个是给WINDOWS操作系统用的,告诉命令行里,执行的命令行工具在那里,比如java,javac这都是命令行工 ...

  3. Spring JdbcTemplate+JdbcDaoSupport实例

    在Spring JDBC开发中,可以使用 JdbcTemplate 和 JdbcDaoSupport 类来简化整个数据库的操作过程. 在本教程中,我们将重复上一篇文章Spring+JDBC例子,看之前 ...

  4. JPA入门样例(採用JPA的hibernate实现版本号)

    (1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了眼下Java持久化技术的长 ...

  5. GO -- 一个经验

    加锁要在有用的的上下文再加锁, 不要加的范围多了, 否则被锁住.

  6. whois协议

    1.原理非常简单,域名的查询主要是基于RFC 954提供的WHOIS协议.在上述过程中,我们实际上是访问了InterNIC站点的WHOIS服务器,该服务器从WHOIS数据库中查询我们所需要的内容.WH ...

  7. CentOS安装mysql*.rpm提示conflicts with file from package的解决的方法

    CentOS 6.5下安装MySql 5.6 解压文件:tar xvf MySQL-5.6.19-1.linux_glibc2.5.x86_64.rpm-bundle.tar 释放出下面文件: MyS ...

  8. ORACLE 查看CPU使用率最高的语句及一些性能查询语句

    select * from (select sql_text,sql_id,cpu_time from v$sql order by cpu_time desc) where rownum<=1 ...

  9. plsql只有注释显示问号,其余中文可以正常显示

    在plsql客户端查看表信息,注释均为乱码,使用select 查询字段中中文字符正常,以下为解决方案: 1.使用语句 select * from V$NLS_PARAMETERS 查询 nls_lan ...

  10. 二十道经典C#面试题

    1.在下面的代码中,如何引用命名空间fabulous中的great? namespace fabulous{// code in fabulous namespace}namespace super{ ...