空间变换网络(Spatial Transformer Network)
参考链接: https://www.cnblogs.com/liaohuiqiang/p/9226335.html.
为什么提出这个网络
1.一个理想中的网络
作者希望鲁棒的图像处理模型具有空间不变性,当目标发生某种转化后,模型依然能给出同样的正确的结果
2.什么是空间不变性
举例来说,如下图所示,假设一个模型能准确把左图中的人物分类为凉宫春日,当这个目标做了放大、旋转、平移后,模型仍然能够正确分类,我们就说这个模型在这个任务上具有尺度不变性,旋转不变性,平移不变性
3.CNN在这方面的能力是不足的
maxpooling的机制给了CNN一点点这样的能力,当目标在池化单元内任意变换的话,激活的值可能是相同的,这就带来了一点点的不变性。但是池化单元一般都很小(一般是2*2),只有在深层的时候特征被处理成很小的feature map的时候这种情况才会发生
4.Spatial Transformer
本文提出的空间变换网络STN(Spatial Transformer Networks)可以使得模型具有空间不变性。
STN是什么
- STN对feature map(包括输入图像)进行空间变换,输出一张新的图像。
- 我们希望STN对feature map进行变换后能把图像纠正到成理想的图像,然后丢进NN去识别,举例来说,如下图所示,输入模型的图像可能是摆着各种姿势,摆在不同位置的凉宫春日,我们希望STN把它纠正到图像的正中央,放大,占满整个屏幕,然后再丢进CNN去识别。
- 这个网络可以作为单独的模块,可以在CNN的任何地方插入,所以STN的输入不止是输入图像,可以是CNN中间层的feature map。
STN是怎么做的
- 如下图所示,STN的输入为U,输出为V,因为输入可能是中间层的feature map,所以画成了立方体(多channel),STN主要分为下述三个步骤
- Localisation net:是一个自己定义的网络,它输入U,输出变化参数Θ,这个参数用来映射U和V的坐标关系
- Grid generator:根据V中的坐标点和变化参数Θ,计算出U中的坐标点。这里是因为V的大小是自己先定义好的,当然可以得到V的所有坐标点,而填充V中每个坐标点的像素值的时候,要从U中去取,所以根据V中每个坐标点和变化参数Θ进行运算,得到一个坐标。在sampler中就是根据这个坐标去U中找到像素值,这样子来填充V
- Sampler:要做的是填充V,根据Grid generator得到的一系列坐标和原图U(因为像素值要从U中取)来填充,因为计算出来的坐标可能为小数,要用另外的方法来填充,比如双线性插值。