详细解读Spatial Transformer Networks(STN)-一篇文章让你完全理解STN了

目录

  1. STN的作用
    1.1 灵感来源
    1.2 什么是STN?
  2. STN的基本架构
  3. Localisation net是如何实现参数的选取的?
    3.1 实现平移
    3.2 实现缩放
    3.3 实现旋转
    3.4 实现剪切
    3.5 小结
  4. Grid generator实现像素点坐标的对应关系
    4.1 为什么会有坐标的问题?
    4.2 仿射变换关系
  5. Sampler实现坐标求解的可微性
    5.1 小数坐标问题的提出
    5.2 解决输出坐标为小数的问题
    5.3 Sampler的数学原理
  6. Spatial Transformer Networks(STN)
  7. STN 实现代码
  8. reference

1.STN的作用

1.1 灵感来源

普通的CNN能够显示的学习平移不变性,以及隐式的学习旋转不变性,但attention model 告诉我们,与其让网络隐式的学习到某种能力,不如为网络设计一个显式的处理模块,专门处理以上的各种变换。因此,DeepMind就设计了Spatial Transformer Layer,简称STL来完成这样的功能。

1.2 什么是STN?

关于平移不变性 ,对于CNN来说,如果移动一张图片中的物体,那应该是不太一样的。假设物体在图像的左上角,我们做卷积,采样都不会改变特征的位置,糟糕的事情在我们把特征平滑后后接入了全连接层,而全连接层本身并不具备 平移不变性 的特征。但是 CNN 有一个采样层,假设某个物体移动了很小的范围,经过采样后,它的输出可能和没有移动的时候是一样的,这是 CNN 可以有小范围的平移不变性 的原因。

这里写图片描述
如图所示,如果是手写数字识别,图中只有一小块是数字,其他大部分地区都是黑色的,或者是小噪音。假如要识别,用Transformer Layer层来对图片数据进行旋转缩放,只取其中的一部分,放到之后然后经过CNN就能识别了。

我们发现,它其实也是一个layer,放在了CNN的前面,用来转换输入的图片数据,其实也可以转换feature map,因为feature map说白了就是浓缩的图片数据,所以Transformer layer也可以放到CNN里面。

2. STN的基本架构

这里写图片描述
如图是Spatial Transformer Networks的结构,主要的部分一共有三个,它们的功能和名称如下:

Localisation net
Grid generator
Sampler
为了让大家对这三个部分有一个先验知识,我先简单介绍一下。

如下图是完成的一个平移的功能,这其实就是Spatial Transformer Networks要做一个工作。
这里写图片描述
假设左边是 Layer l1 的输出,也就是当前要做Transform的输入,最右边为Transform后的结果。这个过程是怎么得到的呢?

假设是一个全连接层,n,m代表输出的值在输出矩阵中的下标,输入的值通过权值w,做一个组合,完成这样的变换。

  • 举个例子,假如要生成 al11 ,那就是将左边矩阵的九个输入元素,全部乘以一个权值,加权相加:
    al11=wl1111al111+wl1112al112+wl1113al113++wl1133al133
    这仅仅是 al11
空间变换网络(Spatial Transformer NetworksSTN)是一种神经网络结构,用于改善卷积神经网络(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示例代码供参考。
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值