非局部attention之Non-local

论文: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)等优点。

  1. 相比于卷积和RNN,non-local可以无视两个位置的距离,直接计算任意两个位置的attention。
  2. 通过实验验证,non-local是高效的,仅仅简单几层就可以取得非常好的成绩。
  3. non-local支持任意维度的特征输入,可以很方便的和其他模块进行组合。

扫描二维码关注公众号,回复: 15603441 查看本文章

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 对于视频分类、目标检测和分割以及姿态估计等任务的重要性。在所有任务中,简单地添加非本地块可以提供对原有模型的可靠改进。

猜你喜欢

转载自blog.csdn.net/qq_14845119/article/details/131479048