non-local network的理解,论文公式解析,二维图像分类部分
non-local network的理解,论文公式解析,二维图像分类部分
前言
原文链接 Non-local Neural Networks
Non-local主要是提出一种深度学习中的远程依赖模块。主要的实现的理论依据是:一个位置的响应也是所有位置输入的特征图谱的响应权重之和。这样就将局部和全局联系起来,而普通CNN只能将kernel大小的感受野相互关联,因此就可以体现出non-local的价值。
Non-local属于self-attention的一种,将原本机器翻译中的自注意与更通用的非局部过滤类相结合,适用于计算机视觉汇总图像和视频问题的操作。
示例
这个图里面,xi的响应,是xj相应的特征的权重平均,(图中只展示了权重最高的那些点)
就是建立当前像素点和远处像素点之间的关系。
具体的公式,解释:
i是输出位置的索引,j是所有可能位置的索引,x是输入信号,y是与x同大小的输出信号,f是来计算i位置和所有可能的j位置之间的关系。g是一个一元函数,用来计算j位置的输入信号的表示。最后在经过一个c(x)进行归一化。
(理解:其实我觉得就是将单独的输出位置i和图像中很多其他的像素进行匹配,计算其关系)
所以说,non-local是将所有的像素都放在一起进行了计算,而单纯的卷积只能是卷积核大小的感受野。
并且non-local和fc也不同。fc是固定尺寸的,根据学习到的权重进行的输入到输出的映射。而公式(1)主要是计算的i和所以其他的像素点j之间的关系,通过pairwise function进行计算的,具有一定的位置信息,而fc是没有位置信息的。
并且non-local可以建立在网络的任何一个位置。
接下来是具体介绍f和g都是什么内容了(这里可以提出一个问题,就是以后看公式的时候,还是要进一步细致的提出来,这公式里面的c是什么啊,f是什么啊,g又是什么,是怎么样实现的呢)
但是文中的发现f和g可以是以下任意的函数,对于g就是普通的一元线性函数,而对于f的选择如下:(文中试了如下的四种形式)
1.高斯函数:
XiTxj是点乘
是对应的归一化函数
2.嵌入式的高斯函数
3.点乘
4.连接型
non-local block
具体的是将这个公式变成一个non-local block嵌入到任意的,甚至是已经训练完成了的网络中
在使用这个模块时,还可以通过pooling采样,来减少计算量,可以减少1/4