论文:Non-local Neural Networks
Github:GitHub - AlexHex7/Non-local_pytorch: Implementation of Non-local Block.
GitHub - facebookresearch/video-nonlocal-net: Non-local Neural Networks for Video Classification
cvpr2018 凯明作品
论文提出了非局部依赖的attention模块,该模块支持空间维度(space),时间维度(time),时空维度(spacetime)的更大的感受野捕捉。该模块适用与视频分类、物体检测、分割、姿态估计等多项视觉任务。最终论文在Kinetics 和 Charades datasets两个数据集上取得了SOTA的效果。
传统的卷积需要依靠不断一层一层堆叠来获得足够大的感受野,这样操作存在几个问题,第一,计算不高效,第二,优化训练过程麻烦,第三,使得模型有多次反射依赖。
本文提出的non-local方法具有高效(efficient),简洁(simple), 通用(generic)等优点。
- 相比于卷积和RNN,non-local可以无视两个位置的距离,直接计算任意两个位置的attention。
- 通过实验验证,non-local是高效的,仅仅简单几层就可以取得非常好的成绩。
- non-local支持任意维度的特征输入,可以很方便的和其他模块进行组合。
Non-local通用表示:
Non-local在神经网络中的通用操作如公式所示。
其中,i表示输出位置的索引,j表示输入位置的索引,x表示输入特征,y表示和x同样大小的输出特征,f函数表示计算位置i和位置j之间的联系,计算结果使用一个常数表示。G函数表示计算输入特征在位置j处的特征表示。C(x)表示归一化参数。
Non-local和全连接层fc也是有区别的,第一,fc依靠学习的权重计算两个位置的关系,non-local计算两个位置的关系却不依赖输入的数据本身。第二,non-local支持任意大小的特征输入,fc却必须得是固定大小的特征输入。
Non-local实例化:
Non-local公式中的f,g两个函数支持多种多样的变种,为了简化问题,g函数一直使用一个线性的embedding表示。
F函数有Gaussian,Embedded Gaussian,Dot product,Concatenation,共4种变形。
Gaussian
XiTXj表示点积运算,使用欧式距离也是可以的,但是点积对深度学习的实现更加友善。
C(x)表示归一化因子。
Embedded Gaussian
θ,Φ表示embedding操作,
Dot product
N表示X中的位置数量
Concatenation
[·, ·]表示特征拼接操作,wf表示权重向量,用于把拼接后特征投影为一个常量。
Non-local Block:
+x表示残差连接,
其中,T = 4, H = W = 14 or 7
实验结果:
总结:
Non-local Neural Networks提出了一种新的神经网络,它通过非局部操作捕获长期依赖关系可以与任何现有的架构相结合。模型展示了Non-local 对于视频分类、目标检测和分割以及姿态估计等任务的重要性。在所有任务中,简单地添加非本地块可以提供对原有模型的可靠改进。