论文笔记之Non-Local

non-local操作将某个位置的响应计算为所有位置的特征的加权总和,以捕获长距离信息,可以作为基础模块应加入到许多计算机视觉模型中。
CVPR2018收录
论文地址:https://arxiv.org/abs/1711.07971

1. 摘要

卷积运算和循环运算都是一次处理一个本地邻居的构造块,即局部操作。而本文的non-local操作是捕获远程依赖关系的。受计算机视觉中经典的非局部均值方法的启发,non-local运算将某个位置的响应计算为所有位置的特征的加权总和。 该构建块可以插入许多计算机视觉体系结构中。 在视频分类的任务、在静态图像识别中,non-local模型都获得了较大的提升。

2. 引言

在深度神经网络中,捕获远距离依赖至关重要。 对于序列化数据(例如,语音,语言),循环操作是远程依赖建模的主要解决方案。 对于图像数据,长距离依赖关系是由深层的卷积运算形成的较大的感受野建模的。卷积运算和循环运算都在空间或时间上处理局部邻域。 因此,只有重复执行这些操作,并逐渐在数据中传播信号,才能捕获远程依赖性。

重复本地操作有几个限制:

  • 首先,它在计算上效率低下。

  • 其次,它会导致优化困难,需要解决。

  • 最后,这些挑战使多跳依赖性建模变得困难,例如,当需要在长距离的位置之间来回传递消息时,就很难了。

non-local操作是一种高效,简单且通用的组件,用于通过深度神经网络捕获远程依赖关系。non-local 操作是计算机视觉中经典非局部均值操作的一种概括。 直观地,non-local操作会计算某个位置的响应作为输入特征图中所有位置的特征的加权总和,如下图所示:
在这里插入图片描述

位置 x i x_i xi的响应是通过所有位置特征 x j x_j xj的加权平均来计算的(此处仅显示最高加权的特征)。

位置集可以是空间,时间或时空,这意味着non-local操作适用于图像,序列和视频问题。

使用non-local运算有几个优点:

  • 与循环和卷积运算的渐进行为相反,non-local运算直接通过计算任意两个位置之间的相互作用来捕获远程依赖性,而不管它们的位置距离如何

  • 如实验中所示,即使只有几层(例如5层),non-local也是有效的,并能达到最佳效果

  • non-local运算保持可变的输入大小,并且可以轻松地与其他运算结合(例如,卷积等)

在视频中,空间和时间的远距离像素之间会发生远程交互。 单个non-local块是基本单元,可以以前馈方式直接捕获这些时空依赖性。 具有一些no-local块的体系结构比2D和3D卷积网络(包括膨胀的变体)对视频分类的准确性更高。 此外,non-local神经网络比3D卷积网络更经济(计算上)。

3. no local网络

3.1 公式化

遵循非局部均值运算,将深度神经网络中的通用no-local运算定义为:

在这里插入图片描述
这里 i 是要计算其响应的输出位置的索引(在空间,时间或时空中),j 是枚举所有可能位置的索引。x 是输入信号(图像,序列,视频;通常是它们的特征),y 是与x相同尺寸的输出信号。成对函数 f 计算所有i和j之间的标量(表示诸如亲和性的关系)。 一元函数 g 计算在位置j处的输入信号表示。 响应被系数C(x)归一化。

从上式中可以看出任意位置上的 j,可以是时间的、空间的、时空的任意位置,都可以影响到 i 的输出值。作为对比,卷积的操作是对一个局部邻域内的特征值进行加权求和, recurrent的操作则是 i 时刻的值仅基于当前时刻或前一时刻(j=i or i-1)。

non-local可以很容易地和conv、recurrent层一起使用,它可以被插入到dnn的浅层位置,不像fc通常要在网络的最后使用。这使得我们可以通过结合non-local以及local的信息构造出更丰富的结构。

3.2 实例化

f 函数是重点,本文研究了4种形式:

(1)Gaussian。 从非局部均值和双边滤波器来看,常见的f是高斯函数。在本文中考虑f为如下形式:

在这里插入图片描述

其中点是点乘相似度(dot-product similarity)。也可以用欧式距离,但是点乘在深度学习平台上更好实现。

(2)Embedded Gaussian。高斯函数的一个简单扩展是在嵌入空间中计算相似度。 在本文中:
在这里插入图片描述
在这里插入图片描述

作者发现self-attention模块其实就是non-local的embedded Gaussian版本的一种特殊情况。对于给定的i,就变成了计算所有 j 的softmax,即,self-attention的表达形式。这样就将self-attention模型和传统的非局部均值联系在了一起,并且将sequential self-attention network推广到了更具一般性的space/spacetime non-local network,可以在图像、视频识别任务中使用。

(3)Dot product。f 可以定义为点积相似度:

在这里插入图片描述
这里使用embedded version。在这里,归一化参数设为C(x)=N,其中N是x的位置的数目,而不是 f 的和,这样可以简化梯度的计算。这种形式的归一化是有必要的,因为输入的size是变化的,所以用x的size作为归一化参数有一定道理。

dot product和embeded gaussian的版本的主要区别在于是否做softmax,softmax在这里的作用相当于是一个激活函数。

(4)Concatenation。关系网络中的成对功能使用concat进行视觉推理。 我们还评估了concat形式
在这里插入图片描述
这里[.,.]表示的是concat,是能够将concat的向量转换成一个标量的权重向量。这里设置C(x)=N。

在这里插入图片描述
这一部分实现的就是f()操作,可以看出前面介绍的Embedded Gaussian就是图中的完整操作(因为softmax操作会有一个分母,也就是C(x),因此图中的softmax操作就完成了f()函数的幂计算和除以C(x)计算);Gaussian就是对应截图中去掉θ和φ的结果;Dot product对应截图中将softmax换成1/N。

3.3 non-local block

前面介绍的是f()函数的几种形式,接下来作者将前面介绍的non local包装成一个block,这个block就类似ResNet网络中的block,这样non local操作就可以很方便地插入到现有的网络结构中。

为此,定义一个non-local block为:
在这里插入图片描述
这里的yi就是前面3.1的公式中的yi,Wy对应下图2中右上角的11*1卷积;+xi就是residual connection,也就是下图2中最上面的element-wise sum操作。residual connection的结构使得我们可以在任意的pretrain模型中插入一个新的non-local block而不需要改变其原有的结构(如作为初始化则完全和原始结构一致)。

一个示例的non-local block如图2所示:
在这里插入图片描述
Figure2表示f()函数采取Embedded Gaussian且添加了residual connection的计算图。

输入x的维度是T×H×W×1024,然后分别用数量为512,尺寸为1×1×1的卷积核进行卷积得到3条支路的输出,维度都是T×H×W×512,然后经过flat和trans操作得到T×H×W×512、512×T×H×W和T×H×W×512的输出,前两条支路的两个输出进行矩阵乘法得到T×H×W×T×H×W的输出,经过softmax处理后再和第三条支路的输出做矩阵乘法得到T×H×W×512维度的输出,将该输出reshape成T×H×W×512维度的输出后经过卷积核数量为1024,尺寸为1×1×1的卷积层并和原来的T×H×W×1024做element-wise sum得到最后的输出结果,这个element-wise sum就是ResNet网络中的residual connection。

为了提高non local block的计算效率,作者还从两个角度做了优化:

  • θ、φ和g操作的卷积核数量设定为输入feature map通道数的一半(上图2中512对1024)。
  • 对φ和g输出采取pooling方式进行抽样,这样φ和g输出的feature map的size就减小为原来的一半。

从代码来看,non local并不是对网络的每个block都引入,原因可能是:non local机制的设计初衷就是为了获取全局信息,而原来的卷积操作是为了获取局部信息,二者相辅相成才能有好的效果。

4. 实验

在这里插入图片描述
f的表现形式的影响。表2a比较了不同的non-local block的形式插入到C2D得到的结果(插入位置在res4的最后一个residual block之前)。发现即使只加一个non-local block都能得到~1%的提高。
有意思的是不同的non-local block的形式效果差不多,说明是non-local block的结构在起作用,而对具体的表达方式不敏感。本文后面都采用embedded Gaussian进行实验,因为这个版本有softmax,可以直接给出[0,1]之间的scores。

在这里插入图片描述
哪个阶段加入non-local blocks? 比较了一个non-local block加在resnet的不同stage的效果,具体加在不同stage的最后一个residual block之前。发现在res2,res3,res4层上加non-local block效果类似,加在res5上效果稍差。这个的可能原因是res5的spatial size比较小,只有7*7,可能无法提供精确的spatial信息了。

在这里插入图片描述
加入更多的non-local blocks。在resnet-50上加1 block(在res4),加5 block(3个在res4,2个在res3,每隔1个residual block加1个non-local block),加10 block(在res3和res4每个residual block都加non-local block)。在resnet101的相同位置加block。发现更多non-local block通常有更好的结果。作者认为这是因为更多的non-local block能够捕获长距离多次转接的依赖。信息可以在时空域上距离较远的位置上进行来回传递,这是通过local models无法实现的。

另外需要提到的是增加non-local block得到的性能提升并不只是因为它给base model增加了深度。为了说明这一点,表2c中resnet50 5blocks能够达到73.8的acc,而resnet101 baseline是73.1,同时resnet50 5block只有resnet101的约70%的参数量和80%的FLOPs。说明non-local block得到的性能提升并不只是因为它增加了深度。

在这里插入图片描述
时空域上做non-local。 仅在空间维度上做就相当于non-local的依赖仅在单帧图像内部发生,也就是说在式(1)上仅对index i的相同帧的index j做累加。仅在时间维度上做也类似。上图显示只做时间维度或者只做空间维度的non-local,都比C2D baseline要好,但是没有同时做时空维度的效果好。
在这里插入图片描述
Non-local net vs. 3D ConvNet。 Non-local的操作和3D conv的操作可以看成是将C2D推广到时间维度的两种方式。non-local C2D模型比I3D更加精确(75.1 vs 74.4),并且有更小的FLOPs(1.2x vs 1.5x)。说明单独使用时non-local比3D conv更高效。

在这里插入图片描述
Non-local 3D ConvNet. non-local操作和3D conv各有各的优点:3D conv可以对局部依赖进行建模。上图表明NL I3D能够在I3D的基础上提升1.6个点的acc,说明了non-local和3D conv是可以相互补充的。
在这里插入图片描述
更长的输入序列。 上图给出了128帧的实验结果,和前面的的32帧的结果相比,所有模型都表现得更好,说明non-local模型在长序列上的效果也很好。

SOTA对比
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/haha0825/article/details/108057560