《Non-local Neural Networks》--阅读笔记-CVPR2018
本文作者:
Authors
Xiaolong Wang1,2∗ Ross Girshick2 Abhinav Gupta1 Kaiming He2
Motivation
卷积运算和递归操作都在空间或时间上处理一个local邻域;只有在重复应用这些运算、通过数据逐步传播信号时,才能捕获long-range相关性。重复这些local的操作有几个限制。
1、在计算上效率低下
2、它会导致优化困难,需要解决梯度消失问题(Residual),短时记忆(LSTM)问题
3、使得multi-hop依赖的模型变得困难
Advantages
1、与recurrent和convolution 运算相反,non-local运算通过计算任意两个位置之间的相互作用,直接捕获远程依赖关系,而不考虑它们的位置距离;
2、使用更少的层达到非常好的效果。
3、可复用性强
4、与3D卷积相比,computional economy
Non-local image processing
non-local means是计算图像中所有像素的加权平均值的经典滤波算法。它允许远处的像素在基于外观相似性的位置对过滤后的响应做出贡献.
参考https://zhuanlan.zhihu.com/p/33345791
Local这个词主要是针对感受野(receptive field)来说的。以卷积操作为例,它的感受野大小就是卷积核大小,而我们一般都选用3*3,5*5之类的卷积核,它们只考虑局部区域,因此都是local的运算。同理,池化(Pooling)也是。相反的,non-local指的就是感受野可以很大,而不是一个局部领域。
那我们碰到过什么non-local的操作吗?有的,全连接就是non-local的,而且是global的。但是全连接带来了大量的参数,给优化带来困难。这也是深度学习(主要指卷积神经网络)近年来流行的原因,考虑局部区域,参数大大减少了,能够训得动了。
那我们为什么还需要non-local?
我们知道,卷积层的堆叠可以增大感受野,但是如果看特定层的卷积核在原图上的感受野,它毕竟是有限的。这是local运算不能避免的。然而有些任务,它们可能需要原图上更多的信息,比如attention。如果在某些层能够引入全局的信息,就能很好地解决local操作无法看清全局的情况,为后面的层带去更丰富的信息。
感谢解释了local和non-local
所以,该文章是把远处的像素相关性加入到网络中,得到更加丰富的feature map
Network
,i和j分别代表输入的某个位置,x_i是一个向量,维数跟x的channel数一样,y是输出向量,大小和x一样。f是一个计算任意两点相似关系的函数也就是x_i和x_j,g是一个一元函数,将一个点映射成一个向量,可以看成是计算一个点的特征。也就是说,为了计算输出层的一个点,需要将输入的每个点都考虑一遍。
function f可以有多种选择,高斯:, embedding 高斯
,dot prodcut
,直接concanate
,这种操作对输入feature map每个向量都进行相同操作,所以输入输出feature map大小相同。
Non-local block
作者设定,这个non-local block如下图,卷积都是1*1*1大小的
作者把这个block融合到residual 中。也就是如下所示。
,
是前面non-local的输出,
,就是residual connection了。这种方式就可以嵌入到其它的一般网络中。Wz是卷积。
由于是先看了CCnet,所以看non-local感觉会computational ineconomy了。可以根绝CCNet修改看看效果。下一步