文章地址:https://arxiv.org/pdf/1904.11492.pdf
非本地网络(NLNet)通过将特定于query的全局上下文聚合到每个query位置,为捕获长期依赖关系提供了一种开创性的方法。对于图像中不同的query位置,由非局部网络建模的全局上下文几乎相同。作者利用这一发现创建了一个基于query相关公式的简化网络,它保持了NLNet的准确性,但计算量显著减少。这种简化设计与SENet具有相似的结构。因此,作者将它们统一为一个三步通用框架,用于全局上下文建模。在通用框架内,足总和设计了一个更好的实例化,称为全局上下文(GC)块,它是轻量级的,可以有效地建模全局上下文。轻量级特性允许我们将其应用于主干网络中的多个层,以构建一个全局上下文网络(GCNet),它通常在各种识别任务的主要基准上优于简化NLNet和SENet。
如上所示,不同查询位置的注意图几乎相同,这表明NLNet只学习了独立于查询的依赖关系。基于这一现象,作者通过对所有query positions展示使用与query-independent无关的注意图来简化query-independent。此简化块的计算量比原始非结构化块小得多,但在几个重要的视觉识别任务中,观察到的准确性几乎没有降低。此外,作者发现这个简化块与流行的挤压激励(SE)网络具有相似的结构。它们都通过从所有位置聚合的相同特征来强化原始特征,但通过聚合策略、转换和强化功能的选择来区分彼此。通过对这些功能的抽象,得到了一个统一简化NL块和SE块的三步通用框架:
(a)上下文建模模块,将所有位置的特征聚合在一起,形成一个全局上下文特征;
(b) 特征转换模块,用于捕获通道相关;
(c)融合模块,用于将全局上下文特征合并为所有位置的特征
简化NL block和SE block是这个通用框架的两个实例,但三个步骤的实现不同。但简化的 non-local block和SE block都是次优的,每个块都有一部分步骤比另一块推进。通过每一步的最佳实现组合,得到了通用框架的一个新实例,称为全局上下文(GC)块。新块在上下文建模(使用全局注意池)和融合(使用加法)步骤上与简化的NL块有相同的实现,而与SE块共享相同的转换步骤(使用两层瓶颈)。在多个视觉识别任务中,GC块的性能优于简化的non-local block和SE block。
一、实现细节
(一)、Revisiting the Non-local Block
Non-local Block旨在通过聚合来自其他位置的信息来增强查询位置的特征。我们将 x = x i i N p = 1 x={xi}^{N_p}_i=1 x=xiiNp??=1表示为一个输入实例(例如,图像或视频)的特征映射,其中 N p N_p Np?是特征映射中的位置数(例如,对于图像,Np=H·W,对于视频,Np=H·W·T)。x和z分别表示有相同的大小的Non-local Block的输入和输出:
其中i是查询位置的索引,j枚举所有可能的位置。 f ( x i , x j ) f(x_i,x_j) f(xi?,xj?)表示位置i和j之间的关系,C(x)为具有归一化因子。 W z W_z Wz?和 W v W_v Wv?表示线性变换矩阵(例如1x1卷积)。为了简化,将 ω i j = f ( x i , x j ) / C ( x ) ω_{ij}=f(x_i,x_j)/C(x) ωij?=f(xi?,xj?)/C(x)表示为位置i和j之间的归一化成对关系。
为了满足实际应用中的各种需求,设计了四种具有不同 ω i j ω_{ij} ωij?的Non-local Block的实例,即高斯、嵌入高斯、点积和Concat:
(a)高斯表示 ω i j ω_{ij} ωij?中的f是高斯函数,定义为 ω i j = e x p ( < x i , x j > ) ∑ m e x p ( < x i , x m > ) ω_{ij}=\frac{exp(<x_i,x_j>)}{\sum_{m} exp(<x_i,x_m>)} ωij?=∑m?exp(<xi?,xm?>)exp(<xi?,xj?>)?;
(b) 嵌入高斯是高斯的一个简单扩展,它计算嵌入空间中的相似性,定义为 ω i j = e x p ( < W q x i , W k x j > ) ∑ m e x p ( < W q x i , W k x m > ) ω_{ij}=\frac{exp(<W_{qx_i},W_{kx_j}>)}{\sum_{m} exp(<W_{qx_i},W_{kx_m}>)} ωij?=∑m?exp(<Wqxi??,Wkxm??>)exp(<Wqxi??,Wkxj??>)?;
(c) 对于点积, ω i j ω_{ij} ωij?中的f定义为点积相似性,公式为 ω i j = W q x i N p ω_{ij}=\frac{W_{qx_i}}{N_p} ωij?=Np?Wqxi???;
(d) Concat的字面定义是 ω i j = R e L U ( W q [ x i , x j ] ) N p ωij=\frac{ReLU(Wq[x_i,x_j])}{N_p} ωij=Np?ReLU(Wq[xi?,xj?])?。图三所示为嵌入式高斯。
Non-local Block可以被视为全局上下文模块,它将特定于查询的全局上下文特征(通过特定于查询的注意图从所有位置加权平均)聚合到每个查询位置。当为每个查询位置计算注意图时,非局部块的时间和空间复杂度都是位置数 N p N_p Np?的二次方。
(二)、Simplifying the Non-local Block
基于不同查询位置的注意图几乎相同的观察结果,作者通过计算一个全局(独立于查询)注意图并为所有查询位置共享该全局注意图来简化非局部块。有 W z W_z Wz?和没有 W z W_z Wz?的变体都可以获得类似的性能,作者在简化版本中省略了 W z W_z Wz?。定义为:
其中 W k W_k Wk?和 W v W_v Wv?表示线性变换矩阵。这种简化的结构如下所示:
为了进一步降低这个结构的计算成本,应用分布定律将 W v W_v Wv?移出注意,如下所示:
下图显示了该结构。1x1 conv W v W_v Wv?的触发器从 O ( H W C 2 ) O(HWC^2) O(HWC2)减少到 O ( C 2 ) O(C^2) O(C2)。
与传统的Non-local Block不同,等式3中的第二项独立于查询位置i,这意味着该项在所有查询位置i中共享。因此,直接将全局上下文建模为所有位置的特征,并将全局上下文特征聚合(添加)到每个查询位置的特征。
(三)、Global Context Modeling Framework
如上图所示,简化的Non-local Block可以抽象为三个过程:
(a)全局注意,它采用1x1卷积 W k W_k Wk?和softmax函数来获得注意权重,然后执行注意以获得全局上下文特征;
(b) 通过1x1卷积 W v W_v Wv?进行特征变换;
(c) 特征聚合,使用加法将全局上下文特征聚合到每个位置的特征。
将此抽象视为一个全局上下文建模框架,如上所示,定义如下:
(a) ∑ j α j x j \sum_{j}\alpha_jx_j ∑j?αj?xj?表示上下文建模模块,该模块通过加权平均将所有位置的特征组合在一起,以获得全局上下文特征(简化NL(SNL)块中的全局注意);
(b) δ ( ? ) δ(·) δ(?)表示用于捕获通道相关性的特征变换(SNL块中的1x1 conv);
(c) F ( ? , ? ) F(·,·) F(?,?)表示将全局上下文特征聚合到每个位置的特征的融合函数(在SNL块中按广播元素添加)。
SE也是文中提出的框架的一个实例。如上所示,它包括:
(a)全局上下文建模的平均池(在等式4中为 α j = 1 N P α_j=\frac{1}{N_P} αj?=NP?1?),称为SE块中的挤压操作;
(b) 瓶颈变换模(let δ ( ? ) δ(·) δ(?)块是一个1x1卷积、一个ReLU、一个1x1卷积和一个sigmoid函数),用于计算每个通道的重要性,称为SE块中的激励操作;
(c)用于融合的重缩放函数(为$F(·,·)元素级乘法),以重新校准通道级特征。与Non-local Block不同,该SE块非常轻量级,允许它应用于所有层,只需稍微增加计算成本。
(四)、Global Context Block
作者提出了一个新的全局上下文建模框架实例,名为全局上下文(GC)块,它既有简化的Non-local Block(SNL),可以有效地对远程依赖进行建模,也有压缩激励(SE)块,可以进行轻量计算。
在简化的Non-local Block中,如下所示,transform module具有最多的参数,包括一个带有C·C参数的1x1卷积。当将该SNL块添加到更高的层(例如res5)时,该1x1卷积的参数数量C·C=2048·2048将主导该块的参数数量。为了获得SE块的轻量级特性,用瓶颈转换模块替换该1x1卷积,这将参数数量从C·C显著减少到2·C·C/r,其中r是瓶颈比率,C/r表示瓶颈的隐藏维度。默认缩减率设置为r=16时,变换模块的参数数量可以减少到原始SNL块的1/8。
由于两层瓶颈变换增加了优化的难度,在瓶颈变换(ReLU之前)中添加了层规范化,以简化优化,并作为一个正则化器,有利于泛化。
其中 α j = e W k X j ∑ m = 1 N p e W k X m α_j=\frac{e^{W_kX_j}}{\sum_{m=1}^{N_p}e^{W_kX_m}} αj?=∑m=1Np??eWk?Xm?eWk?Xj??是全局注意的权重, δ ( ? ) = W v 2 R e L U ( L N ( W v 1 ( ? ) ) δ(·)=W_{v2}ReLU(LN(W_{v1}(·)) δ(?)=Wv2?ReLU(LN(Wv1?(?))表示瓶颈转换。
GC模块包括:(a)用于上下文建模的全局注意;(b) 瓶颈转换以捕获通道依赖性;(c)用于特征融合的元素添加。
二、消融实验
在c4的最后一个残差块之前插入1个NL、1个SNL或1个GC。以上显示,SNL和GC在更少的参数和更少的计算量下实现了与NL相当的性能,表明原始非局部设计中的计算和参数冗余。此外,在所有残差块中添加GC块可以产生更高的性能(1.1%)↑ 在APbbox和0.9%↑ 在APmask上)时,FLOPs 和 #params略有增加。
NL块插入在残差块(afterAdd)之后,而SE块在残差块(after1x1)内的最后一个1x1 conv之后集成。以上显示相应的实验结果。
所有阶段都受益于GC块中的全局上下文建模(0.7%-1.7%↑ 在APbbox和APmask上)。插入c4和c5都比插入c3获得更好的性能,这表明更好的语义特征可以从全局上下文建模中受益更多。在FLOPs略有增加的情况下,将GC块插入所有层(c3+c4+c5)比只插入一层产生更高的性能。
w/o比率表示使用一个1x1 conv作为变换的简化NLNet,与baseline相比,它有更多的参数。尽管r16和r16+ReLU的参数比w/o比率变量少得多,但发现两层比单层更难优化,导致性能更差。因此,LayerNorma(LN)被用来简化优化,导致性能类似于w/o比率,但参数要少得多。
瓶颈设计旨在减少参数冗余,并在性能和参数之间进行权衡。如上,改变瓶颈的比率r。随着参数和FLOPs的增加,比率r降低(从32降低到4),性能持续提高(0.8%↑ 在APbbox和0.5%↑ 在APmask上),这表明瓶颈在性能和参数之间取得了很好的平衡。值得注意的是,即使比率为r=32,该网络的表现仍远远优于baseline.
关于poolingand fusion的不同选择见上。在融合阶段,add比scaling更有效。attention pooling的效果只比普通的average pooling略好。这表明,如何将全局上下文聚合到查询位置(选择融合模块)比如何将所有位置的特征组合在一起(选择上下文建模模块)更重要。GCNet(att+add)显著优于SENet,这是因为它有效地建模了长期依赖关系,average pooling用于上下文建模,并添加了功能聚合。
用ResNet-101和ResNeXt-101替换ResNet-50,向多层(c3+c4+c5)添加可变形卷积,并采用级联策略,在更强的主干上评估GCNet。GCNet在所有层(c3+c4+c5)中集成了GC块,瓶颈比率为4和16,其结果如上。