non-local神经网络:通过非局部操作解决深度神经网络核心问题

  • 2019 年 10 月 31 日
  • 筆記

译者 | 李杰

回想一下我们熟悉的CNN、RNN。如下图所示,这些神经网络模型都是基于局部区域进行操作,属于local operations。为了获得长距离依赖,也就是图像中非相邻像素点之间的关系,本文另辟蹊径,提出利用non-local operations构建non-local神经网络。

经典RNN,CNN网络结构

受计算机视觉中经典的非局部均值方法启发,作者的非局部操作是将所有位置对一个位置的特征加权和作为该位置的响应值。这种非局部操作可以应用于多种计算机视觉框架中,在视频分类、目标分类、识别、分割等等任务上,都有很好的表现。

简介

捕捉长距离依赖关系是深度神经网络的核心问题。以图像数据为例,要想捕捉长距离依赖,通常的做法是堆积卷积层,随着层数的加深,感受野越来越大,就能把原先非相邻的像素点纳入到一个整体考虑,获取的信息分布广度也越来越高。这种靠堆叠卷积层得到的感受野提升,需要不断重复卷积过程,而这种重复会带来几个弊端:首先,计算效率很低,层的加深意味着更多的参数,更复杂的关系;其次,优化困难,需要谨慎设计优化过程;最后,建模困难,尤其是对于那些多级依赖项,需要在不同距离位置传递信息。

在这篇论文中,作者将非局部操作作为一种简洁高效且通用的组件,用于捕获深度神经网络的中的长距离依赖关系。具体的non-local operation是受到计算机视觉中经典的非局部平均操作(non-localmean operation)启发,如下图所示,non-local operations在计算某个位置Xi Xi 的响应时,是考虑所有位置features的加权——所有位置可以是空间的,时间的,时空的,这意味着non-localoperations适用于图像、序列和视频问题。

那么利用non-local operations有什么优点呢?

(a)与递归操作和卷积操作的渐进行为不同,non-localoperations通过计算任意两个位置之间的交互直接捕捉远程依赖,而不用局限于相邻点,摒弃了距离的概念。

(b)作者通过实验表明,在层数很少的情况下,non-localoperations都能取得非常好的性能表现。

(c)non-local可以作为一个组件,和其它网络结构结合。

在视频分类中,non-local operations可以发挥很好的效果。在视频中,长距离的相互作用发生在空间和时间中有距离的像素之间,一个单独的non-local块,可以用前向传播的方式直接捕获这些时空依赖关系。

背景知识

Non-local image processing

前文说过,non-local operations受到了计算机视觉中经典的非局部均值方法的启发,所以有必要说一下非局部均值方法。

非局部均值(non-local means)是经典滤波算法,通过计算图像中所有像素的加权平均值实现过滤。它的目的是使用与当前点纹理类似的区域,对当前点加权。也即加权因子,是基于被加权点与当前点的邻域的相似性产生,该算法首先选取两个window,分别为相似窗和搜索窗,相似窗被选取用于比较两个像素的相似性,搜索窗被选择用于确定计算相似像素的范围即:

如下图所示,I是一个较大范围的搜索/加权框,w(x,y)是依赖邻域(黑灰色部分)算出的权重

*如果想了解更多关于non-local means的知识,可参考下列文章:

https://blog.csdn.net/qianhen123/article/details/81043217blog.csdn.net

Non-local Neural Networks

1.通用表示

受到non-local means的启发,本文提出了关于non-localoperations的通用表示,公式如下所示:

其中, x 是输入信号(图片,队列,视频,通常是特征),i 是输出位置(在空间、时间或时空中)的索引,它的响应值是通过j枚举所有可能位置来计算的。函数 f 计算 i 和所有 j 之间的相似关系,一元函数 g 计算输入信号在位置 j 的表示。最终的响应值通过响应因子 C(x) 进行标准化处理得到。

在上式中,图像中的每一个位置 j 都被考虑到。与之相对应的,我们可以考虑一下卷积的过程,一个3×3的卷积核,能覆盖到的位置只是位置 j 的相邻点,只能在相邻局部进行操作;我们再对比一下全连接过程,有以下几点不同:

(1)在non-localoperation的公式中,响应值是通过计算不同区域之间的关系得到的,而在全连接层中,是通过赋给每个神经元一个学到的权重。换而言之,在全连接层中,Xi 和 Xj 的关系不能通过一个函数 f 得到。

(2)non-local公式支持可变大小的输入,并在输出中保持相应的大小,在全连接层中,要求固定大小的输入和输出,并且由于被拉伸成一列,丢失了原有的位置信息。

(3)在与CNN结合位置来看,non-local operation非常灵活,可以添加到深度神经网络中的前半部分,而全连接层通常被用在最后,这既是一个不同,也给了我们一个启发:能够构建一个更丰富的层次结构,将非本地信息和本地信息结合起来。

神经网络中的全连接层

2. ff 和 g 的实例化

本小节将会介绍一个non-local operation公式中的函数f 和 g 的具体形式表示。

为了简洁表示,可以把 g 看做是一个线性转化,其中:

其中, Wg 是需要学习的权重矩阵,可以通过空间上的1×1卷积实现(本文只考虑CNN,不过多探讨RNN)

接下来讨论成对函数 f 的形式:

  • Gaussian

f函数的功能主要是相似度计算和度量,一个通常的想法是利用点积衡量相似度(dot-product similarity),为什么点积可以衡量相似度呢,这可以通过余弦相似度公式简化而来,余弦相似度计算下式所示,

如果我们只用点积,相当于减少了计算量和计算复杂度,而且还能达到类似的效果。

那么, f 函数可以用高斯函数表示如下:

那么此时归一化因子 C(x)可以设置为:

  • Embedded Gaussian

基于高斯函数的一个简单扩展,是计算嵌入空间中的相似度,即:

其中,θ和φ是两个嵌入,embedding会构建一个映射,将一个空间里的实体抛射到一个线性向量空间里去,这样一来可以在向量空间里计算度量它们的距离,可以表示为:

相应的,归一化因子 C(x)可以表示为:

*Embedded Gaussian操作与self-attention很类似,实际上,self-attention是其一个特例。但是作者认为,这种注意力不是不可或缺的,f 函数的表现形式还可以有下列两种:

  • Dot product

通过点乘进行相似度计算:

归一化因子可以直接设置为N,也就是X的所有位置数。

  • Concatenation

其中,[·, ·] 表示维度拼接操作, Wf 实现从向量到标量的转化。

3. Non-localBlock

non-local operation的公式表示已经得到,为了将其与现有的框架结合起来,我们需要将其封装到非本地块(non-localblock)中,一个non-local block可以用下式表示:

其中, yi 就是non-localoperation的输出,当看到“+XiXi ”的时候是不是有点熟悉?没错,这里也用了一个残差连接。之所以要用残差,是因为这种结构能够在不破坏原始网络结构的基础上,很方便的将non-local block嵌入模型中去。如下图所示,以一个f为Embedded Gaussian为例,featuremap的输入为TxHxWx1024,两个映射θφ都是1x1x1卷积形式,⊗表示矩阵乘操作,⊕表示元素加操作。

一个时空non-localblock

基于该结构, f 函数的形式无论是上文中的Gaussian,Embedded Gaussian,Dot product等,都能通过矩阵乘轻松实现。

非局部块的成对计算在高层次的特征映射中是轻量级的。在上图的block中,一般T=4,H=W=14或者7,矩阵乘法的两两运算复杂度与传统卷积计算不相上下。为了进一步提升模型效率,还进行了如下调整:

(1)将 θ,φ,g的通道数设置为输入feature maps的一半,这样会大大减少计算量

(2)采用抽样的方式,进一步减轻计算量,将non-local改进为如下公式:

其中,x^是x经过池化后得到,在空间域中执行这个操作,可以将成对计算的数量减少1/4。这个技巧不会改变非局部的行为,只会使计算变得更稀疏,实现起来也很简单,只需要在上图中θ,g中将一个最大池化层即可。

实验

原文作者做了大量详实的实验,本文只截取几个结果,说明non-local 的有效性。

在视频任务中的表现

(1)不同 f函数的效果

如下表,以ResNet-50为backbone,本文提出的四张成对函数相比baseline都有很好的提升

(2)添加non-localblock的stage

如下表,还是以ResNet-50为backbone,将non-local块插入到哪一个阶段,一个non-local块在res2、res3或res4的提升效果是相似的,而对res5的提升稍微小一些。

(3)与SOTA视频分类网络对比

如下表,本文的方法远远超过了所有现有的基于RGB或RGB +流的方法,且与2017年分类比赛冠军模型结果不相上下。

在图像任务中的表现

(1)目标检测和实例分割

如下表,一个单独的non-local block超越了了所有的R50/101和X152baseline,包括检测和分割的所有指标。APbox在所有情况下增加约一个点。

(2)关键点检测

在Mask R-CNN中,测试non-local对于关键点检测的提升,如下表,在R101的baseline上,在头部添加4个non-local block会导致让 AP增加一个约一个点。

结论

本文提出了一种新的神经网络Non-Local Neural Networks,它通过非局部操作来捕捉远程依赖关系。non-local block可以与任何现有的网络结构相结合。证明了非局部建模在视频分类、目标检测和分割、姿态估计等任务中的重要性。在所有的任务上,一个简单的non-local块可以很好的提升baseline,non-local block的提出,为传统卷积的提升提供了更多的启发和可能性。

论文链接:

Non-localNeural Networksarxiv.org

GitHub链接:

https://github.com/facebookresearch/video-nonlocal-netgithub.com