Lecture 3 -- Spatial Transformer Layer

1. Spatial Transformer Layer 功能简介


Spatial Transformer Layer能够帮助我们对图像进行缩放和旋转,它可以作用与原始图像,也可以作用于Feature Map

Spatial Transformer Layer在做的事情其实是控制输入图像和输出图像之间的连接方式

换句话说,就是输出图像的每一个pixel应该对应于输入图像的哪一个pixel?

上图(左)连接方式:平移;上图(右)连接方式:旋转

 

 

2. How to do Image Transformation?


我们把图像中的每一个pixel坐标化,在其前面乘以一个变换矩阵,并加上一个平移向量,就可以得到这个pixel在新的图像中的位置坐标;

Spatial Transformer Layer学习的就是这个变换矩阵和平移向量,共6个参数!

如上图所示,我们只需要输入[输出图像]的某一个pixel的位置索引,通过变换矩阵和平移向量处理后,即可得到其应该对应于[输入图像]的哪一个pixel

呃...Wait...这里的6个参数(a-f)是模型自己学出来的,那输出的pixel索引如果不是整数怎么办???

大聪明:那简单啊,你看上图,它的输出索引是[1.6, 2.4],没有这样的索引,那我们去找离[1.6, 2.4]最近的索引好了,就对应[输入图像]坐标为[2, 2]的pixel就行了!

这样会不会有问题???

当然!如果这样的话,这个网络根本训练不起来!

假如我们今天参数发生了微小的变化,使得输出坐标为[1.61, 2.39],最终我们找的还是[2, 2]对应的pixel,模型的输出没有变化,

也就是说,即使参数发生了微小的变化,损失函数始终没有改变,模型的参数对损失函数的微分始终为0

因此,会导致我们的Gradient Descent无法进行下去!造成模型根本Train不起来!

那我们应该怎么办?用Interpolation

 

 

3. Interpolation


假设今天模型输出坐标为[1.6, 2.4],那么我们的做法不是去找距离最近的某一个坐标,而是去找距离最近的4pixel

[1.6, 2.4]1.61-2之间,2.42-3之间,那么我们就去找[1, 2], [1, 3], [2, 2], [2, 3]4个点!

具体计算方式如上图!

这样以来,我们就可以使用梯度下降更新参数了!

因为参数发生微小的变化时,[1.6, 2.4]如果变成了[1.61, 2.39],那么我们[原始图像]上[2, 2]坐标对应的pixel值也会跟着发生变化!

最后,我们可以将ST(Spatial Transformer)放在原始图像的后面,也可以放在Feature Map的后面,一个层也可以放多个ST去对图像做多种变换!

 

 


END
posted @ 2023-07-25 22:59  Peg_Wu  阅读(75)  评论(0)    收藏  举报