Non-local Neural Networks

Non-local Neural Networks

2020-03-05 20:24:39

PaperCVPR_2018 

Codehttps://github.com/facebookresearch/video-nonlocal-net (Caffe2 version) 

https://github.com/AlexHex7/Non-local_pytorch (PyTorch version) 

博文推荐:CV中的Attention机制 | Non-Local Network的理解与实现 

 

 

1. Background and Motivation

为了捕获长期的依赖关系,常规操作是进行卷积操作的堆叠。卷积或者循环操作只能是对空间或者时间上进行 local 的操作,但是这种 local 操作有如下的局限性:1). 计算并不算高效;2). 需要仔细处理优化问题;3). 这使得 multi-hop dependency modeling difficult。所以,本文提出了一种 non-local 的操作作为一种有效的,简单的,并且 generic 的成分来捕获神经网络中长期依赖的问题。直观的来说,non-local operation 通过如下的方式计算一个位置的响应:as a weighted sum of the features at all positions in the input feature maps,如图 1 所示。位置的集合可以是 space,time 或者 spacetime,表明 non-local operation 适应于 image,sequence,以及 video problems。利用 non-local operations 可以有如下的几点优势:

1). 相比较于常规 CNN/RNN 的渐进式的行为,non-local operation 直接通过计算任意两个位置之间的交互就可以捕获长期的依赖,而不用管他们的位置距离。

2). 如实验中所证明的,non-local operation 执行效率是较高的,即使只用几层,也可以得到最好的效果;

3). non-local operation 保持了可变大小的输入,并且可以很简单的和其他操作进行结合,例如本文用到的卷积操作。

本文在视频分类任务上验证了 non-local operation 的有效性。此外,还在 object detection/segmentation 和  pose estimation  任务上验证了本文方法的 generality。

 

2. Non-local Neural Networks

我们首先给出了 non-local operation 的定义,然后提供了几种特定的实现版本。

2.1. Formulation

服从前人的工作,本文定义了如下的神经网络中的 generic non-local operation 如下:

此处,i 是要计算响应的位置索引,j 是枚举所有可能的位置索引。x 是输入信号,可以是 image,sequence,video,或者 是他们的 feature;y 是 和 x 同样大小的输出信号。 f 是用于计算 i 和 j 之间的关系。一元函数 g 计算了输入信号在位置 j 的表示。该影响通过一个常数进行归一化 C(x)。

 

在公式 1 中的 non-local behavior 是因为所有位置都在这个操作中考虑到了。作为对比,常规的卷积操作仅仅对 local neighborhood 进行加权求和,循环操作在时刻 t 仅仅考虑到当前时刻和前一个时刻。

 

non-local operation 跟常规的 fc layer 还是不一样的。公式 1 在不同的位置计算响应,而 fc 利用了学习到的权重。换句话说,xj 和 xi 之间的关系,并非是输入数据输入到 fc 中。此外,公式 1 也支持 variable sizes,并且保持了对应的大小的输出。而 fc 要求是固定大小的输入和输出,并且丢失了位置之间的对应关系。

 

2.2. Instantiations

接下来,文章介绍了几种 f 和 g 的版本,作者的实验表明,non-local 模型对这些东西并不敏感,表明 generic non-local behavior 是得到提升的主要原因。为了简单起见,本文仅考虑 g 是线性变换:$g(x_j) = W_g X_j$,其中,$W_g$ 是可学习的权重矩阵。然后主要讨论了 pairwise function f 的几种选择:

2.3. Non-Local Block

作者定义 non-local block 如下:

其中,yi 是公式 1 中所示,“+xi” 表示残差连接。该残差连接允许我们加入一个新的 non-local block 到任何预训练的模型,而不改变其原始的行为。如图 2 所示,作者给出了一种示例。

 

3. Experiment

 

  

原文地址:https://www.cnblogs.com/wangxiaocvpr/p/12422490.html