Non-local Neural Networks

目录

背景介绍

现有的相关工作

非局部均值

自注意力机制

Non-local Neural Networks

Non-local实现

相似函数解析

Gaussian

Embedded Gaussian

Dot product

Concatenation   

Non-local Block

实验结果

目标检测、实例分割及关键点检测

视频分类任务

结论


        上一篇关于注意力机制介绍到2021CVPR上发表的关于嵌入位置信息的注意力机制Coordinate Attention for Efficient Mobile Network Design,有兴趣的同学可以阅读一下。之前注意力机制的博客介绍的SENETSTNCBAM包括Coordinate Attention for Efficient Mobile Network Design,都是空间和通道维度上的注意力机制,空间和维度上的注意力暂时先分享到这。今天写一篇关于增加感受野的注意力机制的文章,这就是发表在CVPR2018上面的Non-local Neural Networks

        CNN和RNN都是每次处理一个局部邻域的构建块。在本文中,我们提出了非局部操作作为一个通用族的构建块捕获长期依赖。受计算机视觉中经典的非局部均值方法的启发,我们的非局部操作以所有位置上特征的加权和计算位置上的响应。这个构建块可以插入到许cv算法结构中。在视频分类任务上,即使没有任何附加功能,Non-loca模块也可以在Kinetics和Charades数据集上竞争或超过当前的竞争对手。在图片识别中,Non-loca模块改进了COCO任务套件上的目标检测/分割和姿态估计。代码:原文复现源码

背景介绍

        在深度学习网络中,因为卷积和循环操作无论在时间还是空间上,都是在本地局部操作的,所以它们想要完成长距离的依赖关系,就需要大量的重复这些操作。序列化数据例如音频、文字等,RNN依靠循环操作可以实现长距离的网络依赖关系。在CNN中,这种依赖关系是依靠更深的网络卷积操作完成的(卷积越深,感受野越大)。由于我们只讨论CV中的注意力机制,之后的局部操作都由卷积运算代表。局部操作有如下不足:

        1、网络越深,卷积块的堆叠,计算量越大。

        2、网络越深,参数越难训练。

        3、网络越深,正向和反向传播越难,尤其依赖多的复杂网络。

        这篇文章提出的non-local模块是一种高效、简单、通用的组件,就是为了深度神经网络的这种长距离依赖关系。non-local操作的提出是基于计算机视觉中的非局部均值方法。非局部操作将输入特征所有位置的信息进行加权求和(如下图所示)。这些位置可以使基于空间域,也可以是基于时间域,甚至可以使频域。所以,Non-local可以使用与图像、序列化和视频的处理。

        这是利用non-local操作的视频运动分类问题。图中,X_{i}代表X_{j}特征图所有位置的加权和计算而来(当然,上图中仅仅展示了拥有最高权重的几个点)。这个由non-local模块的例子中,请注意它是如何将第一帧中的球与最后两帧中的球联系起来的。下面还有几个例子: 

        上图中是原文的几个例子。这些例子都来自于验证视频。箭头的起点代表X_{i},终点代表X_{j}。每个X_{i}的最高权重的20个箭头被可视化。例子中的图像是来自32帧的输入显示了8帧的步幅。这些可视化显示了模型如何找到相关信息来支持其预测。

        Non-loca模块的优势如下:

        1、与类似于卷积这种局部的操作相比,Non-local可以无视距离,无论是时间还是空间,它                 直接映射了两个点的关系。

        2、实验证明,Non-local只利用几层简单的网络就可以高校的完成传统模型最好的效果。

        3、Non-local不改变输入变量的形状,并且可以很容易地与其他操作结合。

        在视频中,长时相关性是依赖两个长距离的像素之间的关系。每个non-local是我们模型的一个基本单元,它可以利用前馈方式直接捕获这些超时空的相关性。拥有多个non-locoal模块的网络我们称之为Non-local Neural Networks,它在视频分类中比起普通的2D、3D卷积有着更好的效果。原文中说,non-locoal比3D卷积有着更好的效率。

        为了non-local模块的通用性,论文进一步在COCO数据集上进行了目标检测/分割和姿态估计实验。以强大的Mask R-CNN作为基线,non-local可以利用较小的额外计算成本提高所有三个任务的准确性。这些图像实验和视频上的证据表明,non-local是有用的,可以成为设计深度神经网络的基本构件。

现有的相关工作

        在详细解释non-local模块之前先介一下现有的技术,也是non-local的基础工作。

非局部均值

        非局部均值(Non-Local-Means),简称NL-Means。该算法使用自然图像中普遍存在的冗余信息来去噪。与常用的双线性滤波、中值滤波等利用图像局部信息滤波不同的是,它利用了整幅图像进行去噪,以图像块在图像中寻找相似区域,再对这些区域求均值,能够比较好的去掉图像中存在的高斯噪声。NL-Means滤波过程可以表示为如下公式:

\LARGE \mu \tilde{}(x) = \sum_{y\epsilon \Omega _{x}}^{} \omega (x,y)\upsilon (y)

        式中,\large \omega (x,y)是一个权重值,表示在原始图像\large \nu中,像素x和像素y的相识度。权重大于0,且权重和为1,条件公式如下表示:

\large \omega (x,y) and \sum_{y\epsilon \Omega _{x}}^{}\omega (x,y) = 1 , x\epsilon \Omega ,y\epsilon \Omega _{x}

        式中\large \Omega _{x}是像素x的邻域。这个公式可以这样理解:对于图像中的每个像素x,去噪之后的结果等于它邻域中像素y的加权和,加权的权重就是x和y的相似度。邻域称为搜索域,搜索域越大,找到相似像素的机会就越大,但是计算量也是指数上升。算法提出初始时,搜索域指的是整幅图像,这时候的计算量是相当大的,一个512×512的图像计算时间需要几分钟。

自注意力机制

        Non-local Neural Network与自注意机器翻译方法有一些关联。自注意模块通过关注所有位置并在嵌入空间中取其加权平均值来计算序列中某个位置(如句子)的响应。self-attention可以被视为一种非本地的意思,从这个意义上说,Non-local Neural Network将机器翻译的自注意机制连接到更一般的非局部过滤操作,这些操作适用于计算机视觉中的图像和视频问题。

Non-local Neural Networks

        根据非局部均值算法的思想,non-local模块的的操作流程可以用下面的公式表示:

\large y_{i}=\frac{1}{C(x)}\sum_{j}^{}f(x_{i},y_{j})g(x_{j})\, \, \, \, \,\, \, \, \, \,\, \, \, \, \, (1)

        式中,i是输出位置的索引,可以是空域、时域或者超时空域,j是所有可能i出现的索引位置。x是输入数据,包括:图片、序列化数据、视频和他们的特征图。y是输出数据,它的size和输入数据x是一致的。函数f是计算\large x_{i}与所有\large y_{j}之间的相似度。一元函数g是计算输入数据在位置j的映射。最后,再利用\large C(x)进行序列化。

        公式(1)中,Non-local操作将输入特征的所有位置都进行了遍历。作为比较,卷积运算在一个局部邻域内将加权输入求和(例如:3×3的卷积核操作,就是典型的局部操作)。在CNN中,全连接也是全局操作,但是non-local也不同于全连接层。比如在公式(1)中,我们是计算两个不同位置之间的映射关系,而全连接是更新学习全连接层的权重系数。换句话说,与non-local不同,在全连接层中,xj和xi之间的关系不是输入特征数据。此外,non-local可以支持可变大小的输入,并在输出中保持相应的大小。全连接层正好与non-local相反,它需要固定大小的输入/输出,并且丢失了位置对应关系。

        非局部操作是一种灵活的构建块,可以很容易地嵌入到其它卷积层的操作中。它可以被加入到CNN的前端,不像全连接层那样通常在CNN最后面使用。根据non-local的这个性质,我们可以创建更加丰富的网络结构从而将远程信息和本地信息联合起来进行特征提取。

Non-local实现

        首先,看一下如下表格:

        a表中分别利用Gaussian、Embedded Gaussian、dot-product、concatenation作为相似函数,可以看出来non-local对相似函数的选择并不是最重要的,可以看出来是整体的non-local模块齐了提升作用。

        原文中说为了简单起见,将函数g只考虑为一个线性函数,下面公式:

\large g(x_{j})=W_{g}x_{j}

\large W_{g}是需要训练的权重矩阵参数,比如利用1×1卷积进行映射。

相似函数解析

        这个章节解释一下相似函数的种类和功能。

Gaussian

        根据非局部均值和双边滤波,比较自然的就是使用高斯函数:

\large f(x_{i},x_{j})=e^{x_{i}^{T}x_{j}}\, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, (2)

        \large x^{T}x_{j}是点积相似度,虽然欧几里得也是最容易联想到的相似度计算方法,但是在深度网络中,明显点积更友好。公式(1)中的归一化因子设置为:\large C(x)=\sum f(x_{i},x_{j})

Embedded Gaussian

        Embedded Gaussian是Gaussian的一个扩展,公式如下:

 \large f(x_{i},x_{j})=e^{\theta(x_{i})^{T}\phi (x_{j})}\, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, (3)

        公式(3)中,\large \theta (x_{i})=W_{\theta }x_{i},\large \phi (x_{j})=W_{\phi }x_{j},将公式(2)中的\large x_{i}\large x_{j}通过线性映射可训练函数上。

       对于给定的i, \frac{1}{C(x)}=f(x_{i},x_{j})将变为为沿着搜索区域j进行softmax计算,则有y=softmax(x^{T}W_{T}^{\theta }W_{\phi }x)g(x)就变成自注意力公式。 用于机器翻译的自注意模块仅仅是Embedded Gaussian非局部操作的一种特殊情况。因此,我们的工作通过将这种最近的自我注意模型与非局部均值的经典计算机视觉方法联系起来。尽管与自注意力机制有关系,但作者发现注意行为(由于softmax)在我们研究的应用中并不是必不可少的。为了说明这一点,接下来描述non-local操作的两个替代版本。

Dot product

        点积相似度\large \vec{a}\cdot \vec{b}=\left | a \right |\left | b \right |\cdot cos(\theta )在深度神经网络中处理起来更友好,公式如下如所示:

\large f(x_{i},x_{j})=\theta (x_{i})^{T}\phi (x_{j})\, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, \, (4)

        这里我们采用Embedded 版本。在这种情况下,我们将归一化因子设为C(x) = N,其中N是x中的位置数,而不是f的和,因为它简化了梯度计算。点积和Embedded Gaussian的主要区别在于点击不存在softmax。

Concatenation   

       Concatenation的形式,如下公式:

\large f(x_{i},x_{j})=ReLU(\omega _{T}^{f}[\theta (x_{i}),\phi (x_{j})])\, \, \, \, \, \, \, \, \, \, \, \, \, \, \, (5)

        \large \omega _{f}^{T}是一个权重向量,将连接后的向量投影到一个标量,在经过ReLU激活函数映射输出结果,同样设置\large C(x)=N

        上面的几个变体展示了通用non-local操作的灵活性。所以替代版本是可能的,也可能会改善结果。

Non-local Block

        Non-local块结果如下图所示:

        输入X是一个H*W*2014的特征图,图中的“X”表示矩阵乘法,“+”表示元素相加,对每一行执行softmax操作。蓝色框表示1×1卷积。

        根据上图具体解释一下non-local的流程,原文中以T帧尾基准,这里采用CNN流程解释:

1、输入特征为[T,H,W,1024],经过\large \theta (x_{i})=W_{\theta }x_{i}(这里是1×1卷积),\large \phi (x_{j})=W_{\phi }x_{j}(这里是1×1卷积),分别将通道压缩为512。g函数也同样的操作。

2、将\large \theta\large \phi和g向矩阵化,将T×H×W转化为S=T×H×W,[T,H,W,1024]转化为[S,512],类似于全连接的Faltten操作。

3、将\large \theta\large \phi输出的[S,512]进行矩阵乘法得到相似度(注意力权重),再进行softmax归一化,点积这里是\frac{1}{C(x)}=f(x_{i},x_{j})进行归一化操作。

4、将得到的权重矩阵[S,S]与g输出的特征[S,512]进行点乘进行特征与权重融合操作,得到[S,512]的带注意力的矩阵特征图。

5、将[S,512]的矩阵特征转化为输出的[T,H,W,512]特征图,最后经过1×1卷积得到与输入大小一致的[T,H,W,1024]的输出特征图。

6、经过与RestNet残差块结构类似的操作,将原始输入的[T,H,W,1024]特征图与输出[T,H,W,1024的特征图进行元素相加操作得到最后non-local的输出带权重的特征图。

实验结果

        基于静态图像识别模型,与Mask R-CNN基线进行实验,用于COCO数据集进行目标检测/分割和人体姿态估计(关键点检测)。模型在COCO train2017上进行训练,并在val2017上进行测试。

目标检测、实例分割及关键点检测

        Mask R-CNN基础模型,添加了一个non-local块,所有模型都从ImageNet训练模型微调。以ResNet-50/101为标准基线,以ResNeXt-152 为高基线进行评估。与采用RPN阶段训练的Mask R-CNN原始论文不同,测试使用了类似的端到端联合训练的改进实现,这导致了比Mask R-CNN更好的效果。

         上表可以看出来添加了一个non-local块的Mask R-CNN在COCO数据集上,分割和检测效果都提升有明显的提升。

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

 

视频分类任务

        

        上表可以看出来,加入了non-local分别有了不同程度的提升,在这就不一一赘述了。

结论

        Non-local Neural Networks提出了一种新的神经网络,它通过非局部操作捕获长期依赖关系可以与任何现有的架构相结合。模型展示了Non-local 对于视频分类、目标检测和分割以及姿态估计等任务的重要性。在所有任务中,简单地添加非本地块可以提供对原有模型的可靠改进。

        这也是将RNN中自注意力机制引入到CV领域的一篇关键文章。本次关于CV注意力机制的系列先更新到这,后续有其他相关文章,我仍然会持续更新。欢迎大家关注和讨论。

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值