Non-local:用于捕获长距离依赖关系

论文地址:https://arxiv.org/pdf/1711.07971v1

目录

0、摘要

1、引言

2、相关工作

3、Non-local网络

3.1、基本公式

3.2、一个non-local的实例

4、结论

5、扩展


0、摘要

卷积运算和循环运算都是每次只能处理一个局部邻域的构造块。本文提出了一类非局部(non-local)的通用运算构造块,用来捕获长距离依赖关系。收到non-local means的启发,Non-local运算针对每个位置均计算出其他所有位置特征的加权和作为该位置的响应。该构造块可以作为其他视觉架构的插件来使用。在视频分类任务上,即使没有任何花哨的技巧,Non-local模型也能在 Kinetics和Charades数据集上达到最好的效果。在静态图像识别任务中,也能够改进coco系列任务的目标检测、分割、姿态估计的性能。

1、引言

捕获长距离依赖关系对于深度神经网络至关重要。对于像语音、自然语言之类的序列数据,RNN是建模其长距离依赖关系的最佳选择。但是对于图像,长距离依赖是通过堆叠卷积运算来获取大感受野的方式来捕获的。而不管是空域还是时域,卷积运算和循环运算只能捕获局部邻域信息;因此,其只能通过反复使用这些操作通过数据传导信号来获取长距离依赖。重复进行局部运算,有几个缺点:首先是计算效率低下,其次是优化困难,最后,这些挑战使得多跳依赖建模变得困难,例如,当消息需要在遥远的位置之间来回传递时。

本文提出了一种非局部运算(Non-local),作为一种有效、简单且通用的组件来捕获深度神经网络中的长距离依赖。所提出的Non-local运算是non-local mean的泛化。直观来看,Non-local操作将某一位置的响应计算为所有位置特征的加权和,如图1。

Non-local:用于捕获长距离依赖关系_第1张图片

位置可以是空间、时间、时空,因此Non-local运算可以用于解决图像、序列、视频领域的问题。

non-local有以下几个优点:

  • 与循环运算和卷积运算的堆叠行为相反,非局部运算通过计算任意两个位置之间的相互作用直接捕获长期依赖关系,而与它们的位置距离(欧氏距离)无关;
  • non-local是高效的,即使只有几个层也能获得最佳结果;
  • non-local前后,输入大小保持不变,且输入大小可以任意,因此可以轻松地与其他操作组合;

non-local在视频分类方面,是比3D卷积更高效的,且只用RGB图像,不适用光流多尺度测试等操作;作者还在coco上验证了non-local方法的有效性。

2、相关工作

Non-local图像处理:Non-local means是一个在一张图像上计算所有像素加权平均的滤波算法,它基于path外观相似,允许远距离的像素对某个位置滤波后的相应作出贡献。这种Non-local思想后来发展为BM3D(block-matching 3D)算法,其在一组相似但不在一个局部邻域的path中执行滤波操作。即使与深度神经网络相比,BM3D也是一种可靠的图像去噪算法。Non-local匹配也是一种在纹理合成、超分辨率、图像修复领域成功应用的场景。

图模型:长距离依赖可以被建模为图模型,如条件随机场CRF在DeepLab中被用于语义分割的后处理。与之相反,我们的方法是一个计算非局部滤波的简单前馈块,不只是分割,该通用组件也可用于分类和检测。这些方法有一个通用的名称——GNN。

用于序列的前馈建模:还有一些使用前馈网络建模语音、语言类的序列数据的方法,这些方法通过很深的1-D卷积得到的大感受野来捕获长距离依赖。这些前馈模型可以并行实现,并且比广泛使用的循环模型更有效。

Self-attention:本文的工作就是基于Self-attention的,Self-attention最初用于机器翻译,可以通过关注所有位置并在嵌入空间中对其加权平均来计算序列中某个位置(如句子)的响应。Self-attention可以看出非局部平均的一个特例,我们的工作就是把self-attention从机器翻译泛化到更为通用的Non-local滤波操作,使其可以用于计算机视觉领域。

交互网络:该网络用于物理系统建模,有顶点注意力( Vertex Attention IN)、关系网络等。本文提出的Non-local与这些方法类似,但是其非局部性可能是其成功的关键,而恰恰是这种非局部特征长期以来在计算机视觉领域一直被忽略。

视频分类架构:在视频分类领域,一个自然的做法是结合CNN和RNN,分别利用了CNN在图像上的优势和RNN对序列处理的优势;另一个相反的做法是,通过3DCNN在时空域建模。此外,光流、轨迹等相关方法也有应用。

3、Non-local网络

3.1、基本公式

一个通用的non-local公式如下:

\mathbf{y}_{i}=\frac{1}{\mathcal{C}(\mathbf{x})} \sum_{\forall j} f\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right) g\left(\mathbf{x}_{j}\right)

其中,i是用于计算响应的位置,它可以是空域、时域、时空域之一的输出位置,j是任意其他的位置;x为输入信号,y为与输入尺寸相同的输出信号;有两个参数的函数f用于计算ij两个位置上元素的相关性;一元函数g是位置j的表示;计算得到的响应(可以理解为权重)使用\mathcal{C}(\mathbf{x})进行了归一化。

non-local利用了所有位置的信息,而CNN只是利用了一个局部邻域的信息,RNN只是利用了当前时间步和最新的时间步。这也是non-local能够捕获全局上下文关系的原因。

与全连接(FC)不同的是:

  • FC需要学习权重,而non-local不需要学习直接通过公式计算即可;
  • FC中不同位置的元素不是函数关系,而non-local中任意两个位置都具有函数关系;
  • FC需要固定大小的输入,而non-local支持任意大小;

3.2、一个non-local的实例

作者介绍了多种non-local的实现方式,并提出了一种适用于DeepLearning的残差实现:

\mathbf{z}_{i}=W_{z} \mathbf{y}_{i}+\mathbf{x}_{i}

其中,y_i是non-local的输出,+\mathbf{x}_{i}代表使用了残差块,W_z是一个可学习的参数。具体如图2所示:

Non-local:用于捕获长距离依赖关系_第2张图片

上图的过程也比较明了聊,简单解析一下:

  • 对于输入X,首先使用1*1卷积进行下采样,得到三个变体:\theta, \phi, g
  • \theta\phi分别进行通道合并(这里指的是合并T、H、W)及转置操作之后,进行矩阵相乘;
  • \theta\phi计算的结果经过softmax和转置之后,再和经过通道合并后的g进行矩阵相乘;
  • 得到的结果先恢复原来的尺寸([T, H, W, C]),再经1*1卷积恢复通道(这里的通道指的是C)数;
  • 最后和原来的输入X相加,即可构成完整的残差non-local模块。

4、结论

主要贡献是提出了一种新的神经网络操作方法,通过non-local的方式捕获长距离依赖关系,从而能够建模上下文信息;所提出的non-local块可以和神经网络进行自由组合,插入到任何位置,可以当做插件使用。

5、扩展

由于non-local中需要进行不同位置元素之间的两两运算,所以计算密度很大,因此将其用在下采样倍数较大、比较高级的特征中是合适的。因为随着CNN的叠加,通过带有步长的卷积或者池化,通常获得的feature maps都具有较小的尺寸,然后对通道做一个下采样,就可以得到通道、宽、高都比较小的tensor,这样再进行non-local就可以避免海量的计算负担。不过,尽管有上述方式来避免大量的计算,non-local依然是不高效的,所有也就有了后来各种改进,其中有一种十字交叉的注意力方法(CCNet),就是基于non-local,将全图计算改为某位置横纵两个方向上元素的计算,大大降低了计算量,可以参考这篇博客

 

 

你可能感兴趣的:(论文笔记,DeepLearning,non-local,非局部,注意力,self-attention,cv)