当前位置: 首页 > article >正文

目标检测之空间变形网络(STN)

目标检测之空间变形网络(STN)

一、STN定义

STN:是一个可以放置在CNN前面,或嵌入到CNN其中的某一环节的模块(空间变形器),是Google旗下 DeepMind 公司的研究成果。该论文提出空间变换网络STN,分为参数预测、坐标映射、像素采集三大部分,可以插入到现有的CNN模型中。通过对数据进行反向空间变换来消除图片上目标的变形,从而使得分类网络的识别更加简单高效。

二、CNN的平移不变性

普通的CNN能够显示的学习平移不变性,以及隐式的学习旋转不变性,所以图像上的目标物体就算是做了平移或者旋转,CNN仍然能够准确的识别出来,这对于CNN的泛化能力是有益的。但是 CNN 有一个采样层,假设某个物体移动了很小的范围,经过采样后,它的输出可能和没有移动的时候是一样的,这是 CNN 可以有小范围的平移不变性的原因。
传统CNN中使用卷积和池化操作在一定程度上实现了平移不变性,但这种人工设定的变换规则使得网络过分的依赖先验知识,既不能真正实现平移不变性(不变性对于平移的要求很高),又使得CNN对于旋转,扭曲等未人为设定的几何变换缺乏应有的特征不变性,因此提出了STN。
在这里插入图片描述

三、STN基本结构

在这里插入图片描述

主要的部分一共有三个,它们的功能和名称如下:

  • 参数预测:Localisation net
  • 坐标映射:Grid generator
  • 像素的采集:Sampler
    1.localisation network.用来计算空间变换的参数θ。
  1. grid generator. 得到input map U∈RH×W×C到 output map 各位置的V∈RH′×W′×C对应关系 Tθ。
  2. sampler. 根据input map U 和 对应关系 Tθ,生成最终的output map。

1)Localisation net
  它的作用就是通过一个子网络(全连接或者卷积网,再加一个回归层),生成空间变换的参数θ。θ 的形式可以多样,如需实现2D仿射变换,θ 就是一个6维(2x3)向量的输出。

2)Parameterised Sampling Grid
  假设U (不局限于输入图片,也可以是其它层输出的feature map)每个像素的坐标为(x_si,y_si), V 的每个像素坐标为(x_ti,y_ti),空间变换函数 Tθ 为仿射变换函数,那么 (x_si,y_si) 和 (x_ti,y_ti) 的对应关系可以写为:
  (xsi,ysi)=Tθ(Gi)=Aθ(xti,yti)
  当然,Aθ也可以有其它形式,如3D仿射变换,透射变换等。

3)Differentiable Image Sampling
  在计算得到 Tθ 后,就可以由以下公式 U 得到 V 了(省略推导公式若干,只放上最终形式):
  Vci=∑nH∑mW U_cnm max(0,1−|xsi−m|)max(0,1−|ysi−n|)

一些符号的意义:
在这里插入图片描述

四、坐标映射

在这里插入图片描述
由上图可知,无论是平移,还是旋转、缩放、剪切,都可以由a,b,c,d,e,f六个参数控制。
1.实现平移
在这里插入图片描述
如果是平移变换,比如从al−111平移到al21a11l−1平移到a21l,得到al21a21l的表示为

在这里插入图片描述

我们可以令在这里插入图片描述
其余均为0,就得到了在这里插入图片描述
2 实现缩放

其实缩放也不难,如图所示,如果要把图放大来看,在x→(X2)→x′x→(X2)→x′,y→(X2)→y′y→(X2)→y′将其同时乘以2,就达到了放大的效果了,用矩阵表示如下:
在这里插入图片描述
3.实现旋转

既然前面的平移和缩放都是通过权值来改的,那旋转其实也是。但是旋转应该用什么样的权值呢?
仔细思考,不难发现,旋转是跟角度有关系的,那什么跟角度有关系呢?
正弦余弦嘛,为什么它们能做旋转呢?
一个圆圈的角度是360度,可以通过控制水平和竖直两个方向,就能控制了,如图所示。

在这里插入图片描述
由点A旋转θ度角,到达点B.得到
x′=Rcosα
y′=Rsinα
由A点得
x=Rcos(α+θ)
y=Rsin(α+θ)
展开,有:
x=Rcosα cosθ−Rsinα sinθ
y=Rsinα cosθ+Rcosα sinθ
把未知数 αα替换掉
x=x′ cosθ−y′sinθ
y=y′cosθ+x′sinθ

我们可以简单的理解为 cosθ,sinθ就是控制这样的方向的,把它当成权值参数,写成矩阵形式,就完成了旋转操作。
4.实现剪切
剪切变换相当于将图片沿x和y两个方向拉伸,且x方向拉伸长度与y有关,y方向拉伸长度与x有关,用矩阵形式表示前切变换如下:
在这里插入图片描述

由此,我们发现所有的这些操作,只需要六个参数[2X3]控制就可以了,所以我们可以把feature map U作为输入,过连续若干层计算(如卷积、FC等),回归出参数θ,在我们的例子中就是一个[2,3]大小的6维仿射变换参数,用于下一步计算;

五、Grid generator:

网格生成器负责将V中的坐标位置,通过矩阵运算,计算出目标图V中的每个位置对应原图U中的坐标位置。即生成T(G)。
在这里插入图片描述
这里的Grid采样过程,对于二维仿射变换(旋转,平移,缩放)来说,就是简单的矩阵运算。
上式中,s代表原始图的坐标,t代表目标图的坐标。A为Localisation Network网络回归出的6个角度值。
在这里插入图片描述
整个Grid生成过程就是,首先你需要想象上图中V-FeatureMap中全是白色或者全是黑色,是没有像素信息的。也就是说V-FeatureMap还不存在,有的只是V-FeatureMap的坐标位置信息。然后将目标图V-FeatureMap中的比如(0,0)(0,1)…位置的坐标,与2*3变换矩阵运算。就会生成出在原始图中对应的坐标信息,比如(5,0)(5,1)…。这样所有的目标图的坐标都经过这样的运算就会将每个坐标都产生一个与之对应的原图的坐标,即T(G)。然后通过T(G)和原始图U-FeatureMap的像素,将原始图中的像素复制到V-FeatureMap中,从而生成目标图的像素。

六、Sampler

Sampler就是用来解决Grid generator模块变换出现小数位置的问题的。针对这种情况,STN采用的是双线性插值(Bilinear Interpolation)
在这里插入图片描述
上图中( x , y )是变换后输出图像上的位置,带下标的坐标位置表示的是与( x , y )在输入图像对应的四个相邻的坐标。上面的坐标满足下面的关系
x 1 x_1 x1- x 0 x_0 x0=1
y 1 y_1 y1- y 0 y_0 y0=0

根据双线性插值的原则距离相邻点近的坐标占的比重越大,所以( x , y ) 对应的像素值为,我们用 f ( x , y ) f _ (x,y) f(x,y)表示点( x , y ) 所对应的像素值
f ( x , y ) =( x 1 x_1 x1-x)( y 1 y_1 y1-y) f ( x 0 − y 0 ) f(x0-y0) f(x0y0)+( x x x- x 0 x_0 x0)( y 1 y_1 y1-y) f ( x 1 − y 0 ) f(x1-y0) f(x1y0)

http://www.lryc.cn/news/2420310.html

相关文章:

  • 什么是ISO(国际标准化组织)?
  • 简单介绍了解白鹭引擎Egret
  • CSharp编程语言
  • 如何在linux系统下安装QQ
  • 【MySQL管理】:用户User和权限Privileges
  • Oracle Rac 介绍
  • HTML基础-06-表格(表<table> ,行 <tr>,列 <tb>,表头 <th>,跨列colspan,跨行rowspan,单元格边距 cellpadding,单元格间距cellspacing)
  • 了解XXS攻击---安全测试需了解的内容之一
  • 软件编程学习网站汇总——持续更新中
  • 内网渗透测试:活动目录 Active Directory 的查询
  • 智能小车——循迹模块、避障模块使用介绍
  • 学会重构与对比 ——码农鼻祖天才香农
  • JVM运行时数据区——JDK1.7、JDK1.8
  • CentOS7安装Oracle11gR2
  • vux从安装到基本使用
  • UEFI原理与编程实践--FDF文件
  • HTML select option 详解
  • 解决Windows找不到steam_api.dll文件
  • 一文详解 RSA 非对称加密算法
  • 最新2023年3月编程排行榜出炉,Python太牛了
  • red hat 基本命令的使用
  • 什么是SLO?
  • 解决Win系统缺少msvcr71.dll无法运行软件或游戏问题
  • 鸿蒙系统和安卓系统有什么区别的,看这篇文章就够了
  • 研究方法的类型有哪些?(实例与技巧)
  • 《计算机科学与探索》期刊投稿
  • ES elasticsearch 从入门到放弃-ELK和ELS简介
  • Overload(重载)、Override(覆盖)、Overwrite(重写) 三者区别
  • QPlainText功能详解 Python
  • ELMo解读