目标检测之空间变形网络(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.用来计算空间变换的参数θ。
- grid generator. 得到input map U∈RH×W×C到 output map 各位置的V∈RH′×W′×C对应关系 Tθ。
- 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.实现平移
如果是平移变换,比如
我们可以令
其余均为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(x0−y0)+( x x x- x 0 x_0 x0)( y 1 y_1 y1-y) f ( x 1 − y 0 ) f(x1-y0) f(x1−y0)