美食类网站模板,有的网站为什么打不开怎么回事,如何经营一个网店,深圳的网站建设公司有哪些文章目录1 概述2 模型说明2.1 Localisation Network2.2 Parameterised Sampling Grid3 模型效果参考资料1 概述
CNN的机理使得CNN在处理图像时可以做到transition invariant#xff0c;却没法做到scaling invariant和rotation invariant。即使是现在火热的transformer搭建的图…
文章目录1 概述2 模型说明2.1 Localisation Network2.2 Parameterised Sampling Grid3 模型效果参考资料1 概述
CNN的机理使得CNN在处理图像时可以做到transition invariant却没法做到scaling invariant和rotation invariant。即使是现在火热的transformer搭建的图像模型(swin transformer, vision transformer)也没办法做到这两点。因为他们在处理时都会参考图像中物体的相对大小和位置方向。不同大小和不同方向的物体对网络来说是不同的东西。这个问题在这篇文章统称为spatially invariant问题。甚至不同方向的物体本身就真的是不同的东西比如文字。
其实pooling layer有一定程度上解决了这个问题因为在做max pooling或者average pooling的时候只要这个特征在就可以提取出来在什么位置pooling layer是不关心的。但是pooling的kernel size通常都比较小需要做到大物体的spatially invariant是很难的除非网络特别深。
STN(spatial transformer network)的提出就是为了解决spatially invariant问题这个问题。它的主要思想很简单就是训练一个可以把物体线性变换到模型正常的大小和方向的前置网络。这个网络可以前置于任何的图像网络中即插即用。同时也可以和整个网络一起训练。
再说的直白一点就是一个可以根据输入图片输出仿射变换参数的网络。
图1-1 STN结果示例图1-1是STN网络的一个结果示意图图1-1(a)是输入图片图1-1(b)是STN中的localisation网络检测到的物体区域图1-1©是STN对检测到的区域进行线性变换后输出图1-1(d)是有STN的分类网络的最终输出。
2 模型说明
STN(spatial transformer network)更准确地说应该是STL(spatial transformer layer)它就是网络中的一层并且可以在任何两层之间添加一个或者多个。如下图2-1所示spatial transformer主要由两部分组成分别是localisation net和grid generator。
图2-1 stn模型结构示意图2.1 Localisation Network
我们的目的是把第l−1l-1l−1层的第nnn行第mmm列的特征移动到第lll层的某行某列。如下图2-2所示一个3×33 \times 33×3的特征要变换的话第lll层的每个位置都可以表示为l−1l-1l−1层的特征的加权和。通过控制权重wnm,ijlw_{nm,ij}^lwnm,ijl就可以实现任何仿射变换。
图2-2 通过全连接进行仿射变换示例但如果直接加一层全连接让模型学的话模型可能学出来的就不是仿射变换了参数量也很大很难学很难控制。所有就设计了一个localisation net直接让模型学仿射变换的参数这相当于是一个inductive bias。
localisation net的输入是前一层的特征输出是仿射变换的参数如果是平面的放射变换就是6个参数通过这六个参数可以控制整个图像的平移旋转缩放。
图2-3 通过参数进行仿射变换示例图2-3中的[a,b,c,d,e,f][a,b,c,d,e,f][a,b,c,d,e,f]参数就是localisation net的输出。核心公式就是
[x′y′][abecdf][xy1](2-1)\left [ \begin{matrix} x \\ y \end{matrix} \right ] \left [ \begin{matrix} a b e \\ c d f \end{matrix} \right ] \left [ \begin{matrix} x \\ y \\ 1\end{matrix} \right ] \tag{2-1} [x′y′][acbdef]⎣⎡xy1⎦⎤(2-1)
其中xxx和yyy是当前层的坐标x′xx′和y′yy′是前一层的坐标aaa和ddd主要控制缩放bbb和ccc主要控制旋转eee和fff主要控制平移。
2.2 Parameterised Sampling Grid
localisation net输出了仿射变换参数之后式(2−1)(2-1)(2−1)告诉了我们当前层(x,y)(x,y)(x,y)这个位置的特征是前一层的(x′,y′)(x, y)(x′,y′)位置的特征拿过来的。但是如图2-4中的例子所示(x′,y′)(x, y)(x′,y′)可能是小数位置需要是正整数如果采用取整的操作的话网络就会变得不可梯度下降没法更新参数了。
我们想要的是当[a,b,c,d,e,f][a,b,c,d,e,f][a,b,c,d,e,f]发生微小的变化之后下一层的特征也发生变化这样才可以保证可以梯度下降。
图2-4 带插值的仿射变换示意图于是作者就采用了插值的方法来进行采样。比如当坐标为[1.6,2.4][1.6, 2.4][1.6,2.4]时就用[a12l−1,a13l−1,a22l−1,a23l−1][a_{12}^{l-1}, a_{13}^{l-1}, a_{22}^{l-1}, a_{23}^{l-1}][a12l−1,a13l−1,a22l−1,a23l−1]这几个值进行插值。这样一来[a,b,c,d,e,f][a,b,c,d,e,f][a,b,c,d,e,f]发生微小的变化之后[x,y][x,y][x,y]位置采样得到的值也会有变化了。这也使得spatial transformer可以放到任何层跟整个网络一起训练。
3 模型效果
1文字识别任务 图3-1表示了STN加入到文字识别任务时带来的效果提升图3-1左侧是不同模型在SVHN数据集上的错误率。这相当于是一个只有数字的文字识别任务。 图3-1 数字识别的效果示意图不过用在OCR任务中STN其实有点鸡肋。OCR有文字检测和文字识别两个部分一般文字检测部分会带有检测框四个顶点的坐标我们直接把文字检测的结果进行仿射变换再去文字识别就可以了不需要在文字识别时再加一个STN。一个是难训练再就是推理性能下降。
2图像分类任务 图3-2表示了STN在图像识别任务的效果图3-2左侧表示了不同模型在Caltech-UCSD Birds-200-2011数据集上的准确率。
图3-2 数字识别的效果示意图2×ST−CNN2 \times ST-CNN2×ST−CNN表示在同一层是用了两个不同的STL4×ST−CNN4 \times ST-CNN4×ST−CNN表示在同一层是用了四个不同的STL。图3-2右侧中的方框表示了不同STL要进行放射变换的位置。
图3-3 鸟类识别中的STN示意图可以看到不同的STL关注的鸟的部位也是不一样的一个一直关注头部一个一直关注身子。这就相当于是一个attention把感兴趣的区域提取出来了。
还有一个地方是这里的方框都是正的这其实是因为作者把仿射变换中的参数[b,c][b, c][b,c]人为置0了变成了
[x′y′][a0e0df][xy1](3-1)\left [ \begin{matrix} x \\ y \end{matrix} \right ] \left [ \begin{matrix} a 0 e \\ 0 d f \end{matrix} \right ] \left [ \begin{matrix} x \\ y \\ 1\end{matrix} \right ] \tag{3-1} [x′y′][a00def]⎣⎡xy1⎦⎤(3-1)
可见STN是一个可以融入到很多图像模型且可拓展性高的模块。
参考资料
[1] Spatial Transformer Networks [2] 李宏毅-Spatial Transformer Layer