GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond论文阅读翻译

GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond论文阅读翻译


论文下载地址: 点击此链接跳转.
这是博主自己在github整理的目标检测方向论文的合集,应该算比较全,目前2020ECCV持续更新中,即将更新:2020IJCAI合集,欢迎下载…

一、Abstract

       Non-local网络提出了一种将特定查询的全局上下文聚合到每个查询位置,捕捉远程依赖关系的开创性方法。但是通过实证分析,作者发现对于图像中不同的查询位置,non-local网络建模的全局上下文几乎都是相同的。作者根据这一发现构建了一个基于独立query的简单网络,保持了NLNet的精确性,并且计算量显著下降。作者的这种简化设计和SENet具有相似的结构,因此,作者将它们统一为一个用于全局上下文建模的三步通用框架。在通用框架中,作者设计了一个轻量级的全局上下文(GC)块,可以有效地建模全局上下文,并且能够将其应用于backbone网络的各个层,从而构建一个全局上下文网络(GCNet),性能通常优于简化的NLNet和SENet。

二、Introduction

       捕获长期依赖关系的目的是提取一个视觉场景的全局理解,这会有利于广泛的识别任务,如图像/视频分类,目标检测和分割。在CNN中,卷积层在局部邻域内建立像素关系,通过深度叠加的卷积层来建模远程依赖关系。不过直接叠加卷积层计算效率低下且很难优化,这会导致对远程依赖的无效建模,部分原因是在遥远位置之间传递信息的困难。
       为了解决这个问题,NLNet提出通过自注意力机制去建模远程依赖关系。对于每个查询位置,NLNet先计算查询位置与所有位置的成对关系,得到注意力图,然后将所有位置的特征与注意力图的权重进行加权聚合。最后将聚合后的特征添加到每个查询位置的特征中得到输出。
       NLNet中特定查询的注意力权重通常指相应位置对查询位置的重要性。而可视化特定查询的权重重要性有助于深入了解,但原论文中缺少这种分析,作者补上了,观察到不同查询位置的注意力图几乎相同,表明这样仅学习了与查询无关的依赖关系,即不同查询位置的注意力图之间的差距非常小。
在这里插入图片描述
       基于这一观察结果,作者显式地对所有查询位置使用一个独立于查询位置的注意力图来简化non-local块,然后根据此注意力图将相同的聚合特征添加到所有查询位置的特征上得到输出,这样会比原本的计算量小一些,在几个重要的视觉识别任务上的准确率也基本没有下降。这个简化版NL与常用的SENet具有相似的结构,它们都是通过从各个位置聚合得到的相同特征来增强原本的特征,但在聚合策略、转化和强化函数上的选择又有所区别。通过抽象化这些函数,作者得到了一个统一简化的通用框架: (a)上下文建模模块,它将所有位置的特征聚合在一起,形成全局上下文特征; (b)特征转换模块,捕获通道间的相互依赖; ©融合模块,将全局上下文特征与位置特征合并。
       简化的NL块和SE块是这个通用框架中的两部分,三个步骤的实现方式有所不同。通过对每个步骤的比较研究,我们发现简化的NL块和SE块均不是最优的。通过一系列组合比较,作者构建了一个全局上下文(GC)块。GC块在上下文建模(使用全局注意力池化)和融合(使用相加)步骤上与简化的NL块有相同的实现,而与SE块有相同的转换步骤(使用两层bottleneck)。在多个视觉识别任务上,GC块的性能会优于简化的非本地块和SE块。

三、Analysis on Non-local Networks

       首先作者对NL块生成的不同查询位置的注意力图做了可视化。为了统计分析,作者对所有查询位置的注意力图间的距离(余弦距离和Jensen-Shannon散度)求了平均。

3.1. Revisiting the Nonlocal Block

       NL块的目的是通过聚合其他位置的信息来增强查询位置的特征。记x={xi} (i=1-Np)表示一个输入实例的特征图,Np是特征图中的位置数量。x和z分别表示NL块通道数相同的输入和输出。NL块可以表示为:
在这里插入图片描述
       i是查询位置的索引,j则是列举所有位置。f(xi, xj)表示两个位置i, j之间的关联,C(x)是标准化因子,Wz和Wv表示线性变换矩阵(1*1卷积),并以wij = f(xi, xj) / C(x) 位置i和j之间的标准化成对关系。wij共有四种:
Gaussian:
在这里插入图片描述
       Embedded Gaussian:
在这里插入图片描述
       Dot product:
在这里插入图片描述
       Concat:
在这里插入图片描述
       通常用的是Embedded Gaussian,NL块可以看作一个全局上下文模块,它将特定查询的全局上下文特征(通过特定查询的注意力图从所有位置进行加权平均)聚合到每个查询位置。当对每个查询位置计算注意力图时,NL块的时间和空间复杂度都是Np2

3.2. Analysis

       为了直观地理解NL块的行为,作者可视化了不同查询位置的注意图。由于不同的实例化实现的性能是可比较的,这里作者只可视化最广泛使用的版本,嵌入式高斯法。并且由于视频中的注意力图很难可视化,作者仅做了图像的可视化。作者发现对于不同的查询位置,它们的注意力图几乎是相同的。为了从统计学上验证这一观察结果,作者还分析了不同查询位置的全局上下文之间的距离。
在这里插入图片描述

Statistical Analysis

       标记vi为位置i的特征向量,平均距离度量被定义为:
在这里插入图片描述
       Dist(.,.)是两个向量之间的距离。余弦距离是一种使用广泛的距离度量法:
在这里插入图片描述
       这里计算三种向量间的余弦距离,NL块的输入(vi = xi),NL块融合前的输出(vi = zi - xi),查询位置的注意力图(vi = wi)。Jensen-Shannon分流(JSD)被用来度量两个概率分布间的统计距离:
在这里插入图片描述
       由于在Gaussian和E-Gaussian中,每个注意图wi的总和为1,我们可以把每个wi看作一个离散的概率分布。因此计算Gaussian和E-Gaussian的注意力图(vi = wi)之间的JSD。
在这里插入图片描述
       表1中显示了对两个标准任务的两种距离度量的结果。首先,“input”中的余弦距离值较大,表明可以在不同位置区分NL块的输入特征。但是“output”中的余弦距离值很小,表明对于不同的查询位置,由NL块建模的全局上下文特征几乎相同。注意力图(‘att’)上的两种距离度量都很小,验证了观察结果。也就是尽管NL块是想要计算特定于每个查询位置的全局上下文,但实际上得到的全局上下文是独立于查询位置的。因此,我们不需要对每个查询位置都计算一次全局上下文,这样可以简化NL块。

四、Method

4.1. Simplifying the Nonlocal Block

       在观察到不同查询位置的注意图几乎相同的基础上,作者对NL块进行了简化,计算了一个(独立于查询)全局注意力图,共享了所有查询位置所用的全局注意力图。作者发现有没有Wz的效果差不多,于是在简化版本中省略了Wz,简化版NL块定义为:
在这里插入图片描述
       其中Wk和Wv表示线性变换矩阵。简化版本如下图所示:
在这里插入图片描述
       为了进一步降低简化版NL块的计算量,我们将Mv移至注意力池化外:
在这里插入图片描述
       这一简化版本如下图b所示:
在这里插入图片描述
       与传统的NL块不同,上式中的第二项独立于查询位置i,也就是该项在所有查询位置i之间共享。因此,作者直接将全局上下文建模为所有位置特征的加权平均,并将其聚合到每个查询位置的特征上。实验也可以看到其和原本的NL块性能相当并且FLOPs明显下降。

4.2. Global Context Modeling Framework

       如上图b所示,简化后的NL块可以分为三个步骤: (a)全局注意力pooling,采用1x1卷积Wk和softmax函数获得注意力权重,然后经注意力pooling得到全局上下文特征,(b)通过1x1卷积Wv进行特征变换; ©特征聚合,即将全局上下文特征加到每个位置的特征上。将以上视为一个全局上下文模型的框架,可定义为:
在这里插入图片描述
       其中,(a) ∑jajxj表示上下文建模模块,将所有位置的特征结合权重aj做一个加权平均得到全局上下文特征(简化NL块中的全局注意力池化),(b) δ(.)表示用来捕捉通道级依赖的特征变换(SNL中的1×1卷积),© F(.,.)表示用来聚合全局上下文特征到每一个位置的特征上的融合函数。
       作者认为SE块也可以看做是他们提出的框架的一个实例。如上图©所示,其包括了(a) 一个全局平均池化用于全局上下文建模(即上式中aj = 1/Np),为SE块中的压缩操作。(b) 一个瓶颈转换模块(δ(.)为一个1×1卷积,一个relu,一个1×1卷积再加上一个sigmoid函数),© 一个用于融合的缩放函数(F(.,.)为一个元素级的相乘),SE块是轻量级的,能够应用于所有层,只增加一点计算成本。

4.3. Global Context Block

       作者提出了一个全局上下文建模框架的新的实例化,叫全局上下文(GC)块,它具有SNL块的优点,能够有效建模远程依赖,同时还像SE块一样是轻量级的计算量。
       在SNL块中,转换模块的参数量最大,包括一个C×C参数大小的1x1卷积。当将SNL添加到更高层时,高层的通道数很大,会对模块的参数量起一个主导作用。为了能够像SE块一样轻量级,作者将1×1卷积替换为了一个bottleneck转换模块,将参数量从C×C降至2×C×C/r,r表示瓶颈比例,C/r 表示bottleneck的隐藏表示维度。r默认设为16,参数量可以降为原本的1/8左右。
       由于双层的bottleneck变换增加了优化难度,作者在bottleneck内部(在ReLU之前)添加了一层归一化,以缓解优化问题,同时还作为正则化器使泛化受益。并且加入层归一化可以显著增强COCO上的目标检测和实例分割的效果。详细结构如上图(d)所示
在这里插入图片描述
       其中,aj=eWkxj /∑meWkxm是全局注意力池化的权重,δ(.)=Wv2RELU(LN(Wv1(.)))表示bottleneck转换。作者提出的GC块包括: (a) 用于上下文建模的全局注意力池化; (b) 通过瓶颈转换来获取通道级的依赖; ©元素级相加的特征融合。

Relationship to non-local block.

       由于NL块实际上学习的是独立于查询位置的全局上下文,作者提出的全局上下文块的全局注意力池化与NL块建立了相同的全局上下文,但计算成本显著降低。并且采用了瓶颈变换来减少全局上下文特征中的冗余,进一步减少了参数和FLOPs数量。GC块的FLOPs和参数量明显低于NL块,使GC块可以应用到多层,同时能够更好地捕获远程依赖关系,帮助网络训练。

Relationship to squeeze-excitation block.

       SE块和GC块的主要区别在融合模块,这也反映了两个块不同的目标。SE块采用重标定来调整通道的重要性,但未能充分模拟远程依赖关系。GC块是学的NL块,将全局上下文聚合到所有位置来捕获远程依赖。第二个区别是bottleneck转换中的归一化层,GC块采用相加来进行融合,归一化层可以减缓bottleneck双层结构的优化问题,从而获得更好的性能。第三点是SE块中的全局平均池化是GC块中的全局注意力池化的一个特例。

五、个人总结

       这篇文章是也是对NL的一个改进,先是指出了NL算的每个位置的注意力图实际上是相差不大的,但是NL却还是对每个位置都有进行计算,这是没有多大意义的,所以作者直接只算了一个注意力图,用于所有位置,这样大幅度减少了计算量。并且为了减少参数量和FLOPs,作者将加权聚合后应该通过的1×1卷积换成了SENet中的bottleneck块,而为了能够更好地优化,在bottlenck中的relu前加入了LN。这样得到了一个轻量化的GC块,效果还是可以,基本比NL好一点点,但减少的计算量不少。