论文 https://arxiv.org/abs/1711.07971
代码https://github.com/facebookresearch/video-nonlocal-net
非局部神经网络
motivation:受计算机视觉中经典的非局部均值方法[4]的启发,非局部操作将位置的响应计算为所有位置的特征的加权和。
非局部均值方法 NLM(Non-local Means)滤波器是一种经典的图像去噪算法,基于图像中重复的局部结构,通过使用相似像素的加权平均来移除高斯噪声和其它噪声。
NLM滤波器的基本思想是,在图像中寻找与当前像素周围区域的像素值相似的像素块,计算这些像素块与当前像素块之间的相似度。通过这些相似度计算权重,以这些块内的像素值作为两个像素点的相似性度量,对像素点进行加权平均,从而去除噪声。
核心思想:
f 函数 计算xi 和和xi 有关的xj 的关系 (可以是相关性 ,自相关度)yi 输出信号
优越性与作用:捕获长距离依赖关系 如在图片中建立像素点与像素点 的关系 在视频中建立 帧与帧之间的联系,可以在计算机视觉领域其他任务的模型中插入非局部网络,而不需要其他复杂操作 达到比较好的效果,输入输出大小一致,即插即用
意义:CV 自注意力机制的核心文章,后面学者提出的注意力机制的模型 可以认为是本文特殊化的例子
摘要:
卷积和循环操作都是一次处理一个局部邻域的构建块。在本文中,我们将非局部操作作为通用构建块家族,用于捕获长距离依赖关系。受计算机视觉中经典的非局部均值方法[4]的启发,我们的非局部操作将位置响应的计算为所有位置的特征的加权和。这个构建块可以插入到许多计算机视觉架构中。在视频分类任务中,即使没有任何花里胡哨(without any bells and whistles),我们的非本地模型也可以在 Kinetics 和 Charades 数据集上竞争或优于当前的竞赛获胜者。在静态图像识别中,我们的非局部模型改进了COCO任务套件的目标检测/分割和姿态估计。
位置响应是什么?当卷积核在图像上滑动并执行卷积操作时,它会与输入图像的不同区域进行加权求和,生成一个特征映射(Feature Map)。这个特征映射上的每个值都代表了卷积核对输入图像上相应位置的响应。在卷积神经网络中,位置响应是指卷积核对输入图像上不同位置的响应程度,它反映了输入图像中特定特征的存在和分布情况。
1. 介绍
捕获远程依赖是深度神经网络的核心重要性。对于顺序数据(例如,在语音、语言中),循环操作 [38, 23] 是远程依赖建模的主要解决方案。对于图像数据,长距离依赖由卷积操作的深度堆栈形成的大感受野建模[14,30]。卷积和循环操作都处理局部邻域,无论是在空间还是时间;因此,只有当这些操作重复应用时,才能捕获长期依赖关系,从而通过数据逐步传播信号。重复本地操作有几个限制。首先,它的计算效率很低。其次,它会导致需要仔细解决的优化困难[23,21]。最后,这些挑战使得多跳依赖建模,例如,当需要在遥远的位置之间来回传递消息时困难。在本文中,我们提出了非局部操作作为一种有效的、简单和通用的组件,用于使用深度神经网络捕获远程依赖关系。我们提出的非局部操作是在计算机视觉中经典非局部均值运算[4]的推广。直观地说,非本地操作计算位置的响应为输入特征图中所有位置的特征的加权和(图 1)。位置集可以在空间、时间或时空中,这意味着我们的操作适用于图像、序列和视频问题。
使用非局部操作有几个优点:(a)与循环和卷积操作的渐进行为相比,非局部操作通过计算任意两个位置之间的交互直接捕获长期依赖关系,而不管它们的位置距离如何; (b) 正如我们在实验中所展示的,非本地操作是有效的,即使只有几个层(例如 5); (c) 最后,我们的非本地操作支持可变输入大小,并且可以很容易地与其他操作(例如,我们将使用的卷积)结合使用。
我们展示了非局部操作在视频分类应用中的有效性。在视频中,远程交互发生在空间中的远距离像素和时间之间。单个非局部块作为我们的基本单元,可以直接以前馈方式捕获这些时空依赖关系。在一些非局部块的情况下,我们称为非局部神经网络的架构比 2D 和 3D 卷积网络 [48](包括膨胀的变体 [7])更准确地用于视频分类。此外,非局部神经网络比 3D 卷积神经网络在计算上更经济。在Kinetics[27]和Charades[44]数据集上进行了全面的消融研究。仅使用 RGB 且没有任何花里胡哨(例如光流、多尺度测试),我们的方法在两个数据集上都取得了与最新比赛获胜者相当或更好的结果。
为了证明非局部操作的普遍性,我们进一步在COCO数据集上进行了目标检测/分割和姿态估计实验[33]。在强Mask R-CNN基线的基础上[19],我们的非局部块可以以很小的额外计算成本提高所有三个任务的准确性。结合视频上的证据,这些图像实验表明非局部操作通常是有用的,可以成为设计深度神经网络的基本组成部分。
2. Related Work略
3. Non-local Neural Networks
3.1. 公式化
遵循非局部均值运算[4],我们在深度神经网络中定义一个通用的非局部运算为:
这里 i 是要计算响应的输出位置(在空间、时间或时空中)的索引,。x 是输入信号(图像、序列、视频;通常它们的特征),yi 是与 x 相同大小的输出信号。成对函数 f 计算 i 和所有 j 之间的标量(表示关系,例如亲和力)。一元函数 g 计算位置 j 处输入信号的表示。响应由因子 C(x) 归一化。等式(1)中的非局部行为是由于操作中考虑了所有位置(∀j)。作为比较,卷积操作将局部邻域中的加权输入(例如,内核大小为 3 的 1D 情况下 i-1 ≤ j ≤ i + 1)和时间的一次循环操作相加,通常基于当前和最新的时间步长
非本地操作也与全连接 (fc) 层不同。等式(1)基于不同位置的关系计算响应,而 fc 使用学习的权重。换句话说,与非局部层不同,xj 和 xi 之间的关系不是 fc 中输入数据的函数。此外,我们在等式(1)中的公式支持可变大小的输入,并在输出中保持相应的大小。相反,fc 层需要固定大小的输入/输出并丢失位置对应关系(例如,从 xi 到 yi 在位置 i)。非本地操作是一个灵活的构建块,可以很容易地与卷积/循环层一起使用。它可以添加到深度神经网络的早期部分,不像最终经常使用的 fc 层。这使我们能够构建一个更丰富的层次结构,它结合了非本地和本地信息。
3.2.实例化
接下来我们描述 f 和 g 的几个版本。有趣的是,我们将通过实验(表 2a)证明我们的非本地模型对这些选择不敏感(对f和g 函数不敏感),这表明通用非本地行为是观察到的改进的主要原因。为简单起见,我们只考虑线性嵌入形式的 g:g(xj ) = Wg xj ,其中 Wg 是要学习的权重矩阵。这被实现为,例如空间中的 1×1 卷积或时空中的 1×1×1 卷积。接下来我们讨论成对函数 f 的选择。1.高斯。遵循非局部均值[4]和双边滤波器[47],f的自然选择是高斯函数。在本文中,我们考虑:
这里 xT i xj 是点积相似度。[4,47]中使用的欧几里得距离也适用,但点积在现代深度学习平台中更易于实现。归一化因子设置为 C(x) = ∑∀j f (xi, xj )
2.嵌入式高斯。高斯函数的一个简单扩展是计算嵌入空间中的相似度。在本文中,我们考虑:f (xi, xj) = eθ(xi)T φ(xj)。(3) 这里 θ(xi) = Wθ xi 和 φ(xj ) = Wφxj 是两个嵌入。如上所述,我们设置 C(x) = ∑∀j f (xi, xj)。我们注意到,最近提出的用于机器翻译的自注意力模块 [49] 是嵌入式高斯版本中非局部操作的一个特例。这可以从这样一个事实看出,对于给定的 i,成为沿维度 j 的 softmax 计算。(这就是为什么现在很多计算通道注意力或者空间注意力用softmax 操作 原来不是计算得分,而是代表的f 函数)所以我们有
图一
这是[49] attention is all you need 中的自我注意形式。因此,我们的工作通过将最近的自我注意模型与非局部均值[4]的经典计算机视觉方法相结合来提供洞察力,并将[49]中的顺序自我注意网络扩展到计算机视觉中用于图像/视频识别的通用空间/时空非局部网络。尽管与 [49] 有关,但我们表明注意力行为(由于 softmax)在我们研究的应用程序中并不重要(也就是说f 函数是什么不重要,重要的是非局部这个操作)。为了证明这一点,我们接下来描述了非本地操作的两个替代版本。——点积和Concatenation 实验结果相差不大
3.3. Non-local Block
我们将式(1)中的非本地操作包装成一个非本地块,可以合并到许多现有的体系结构中。我们将非局部块定义为:zi = Wz yi + xi,(6),其中yi在Eq.(1)中给出,“+xi”表示残差连接[21]。残差连接允许我们在任何预训练模型中插入一个新的非局部块,而不会破坏其初始行为(例如,如果 Wz 初始化为零)。图2显示了一个示例非本地块。式(2)、(3)或(4)中的两两计算可以简单地通过矩阵乘法来完成,如图2所示;(5)中的拼接版本很简单。当非局部块用于高级子采样特征图时,其成对计算是轻量级的。例如,图 2 中的典型值是 T = 4、H = W = 14 或 7。矩阵乘法所做的成对计算与标准网络中的典型卷积层相当。我们进一步采用了以下实现,使其更高效。
非本地块的实现。我们将 Wg 、 Wθ 和 Wφ 表示的通道数设置为 x 中通道数的一半。这遵循 [21] 的瓶颈设计,并将块的计算减少了大约一半。式(6)中的权重矩阵Wz计算yi上的位置嵌入,将通道数与x的通道数匹配。参见图2。子采样技巧可用于进一步减少计算。我们将等式(1)修改为:yi =1C(^x)∑∀j f (xi, ^xj )g(^xj ),其中 ^x 是 x 的子采样版本(例如,通过池化)。我们在空间域中执行此操作,可以将成对计算量减少 1/4。这个技巧不会改变非局部行为,但只会使计算更稀疏。这可以通过在图 2 中的 φ 和 g 之后添加一个最大池化层来完成。我们对本文研究的所有非本地块使用这些有效的修改。
4. 视频分类模型
为了理解非本地网络的行为,我们对视频分类任务进行了全面的消融实验。首先,我们描述了该任务的基线网络架构,然后将它们扩展到 3D ConvNets [48, 7] 和我们提出的非本地网络。
2D ConvNet 基线 (C2D)。为了隔离我们的非本地网络与3D ConvNets的时间效应,我们构建了一个简单的 2D 基线架构,其中时间维度被简单地解决(即,仅通过池化)。表 1 显示了我们在 ResNet-50 主干下的 C2D 基线。输入视频剪辑有 32 帧,每个帧有 224×224 像素。表 1 中的所有卷积本质上都是 2D 内核,它逐帧处理输入帧(实现为 1×k×k 内核)。该模型可以直接从 ImageNet 上预训练的 ResNet 权重初始化。ResNet-101 对应物以相同的方式构建。涉及时间域的唯一操作是池化层。换句话说,该基线简单地聚合时间信息。
膨胀的3D ConvNet (I3D)。如 [13, 7] 中所做的那样,可以通过“膨胀”内核将表 1 中的 C2D 模型转换为 3D 卷积对应物。例如,2Dk×k 内核可以膨胀为跨越帧的三维 t×k×k 内核。这个内核可以从 2D 模型初始化(在 ImageNet 上预训练):t×k×kkernel 中的每个 t 个平面都由预训练的 k×k 权重初始化,重新缩放 1/t。如果视频由随时间重复的单个静态帧组成,则此初始化产生的结果与在静态帧上运行的 2D 预训练模型相同。我们研究了两种情况膨胀:我们可以将残差块中的 3×3 内核膨胀为 3×3×3(类似于 [7]),或者残差块中的第一个 1×1 内核膨胀为 3×1×1(类似于 [13])。我们将这些表示为 I3D3×3×3 和 I3D3×1×1。由于 3D 卷积的计算量很大,我们只为每个 2 个残差块膨胀一个内核;膨胀更多的层显示出递减的回报。我们将conv1膨胀为5×7×7。[7]的作者表明,I3D模型比CNN+LSTM模型更准确。
Non-local network。我们将非本地块插入到 C2D 或 I3D 中,将它们转换为非局部网络。
图 3. res3 中非局部块的行为示例,由在 Kinetics 上训练的 5 块非局部模型计算。这些示例来自保留的验证视频。箭头的起点代表一个xi,终点代表xj。可视化每个xi的20个最高加权箭头。4帧来自 32 帧输入,步长为 8 帧。这些可视化显示了模型如何找到相关线索来支持其预测。