文章地址: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=∑mexp(<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=∑mexp(<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=NpWqxi;
(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=NpReLU(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αjxj表示上下文建模模块,该模块通过加权平均将所有位置的特征组合在一起,以获得全局上下文特征(简化NL(SNL)块中的全局注意);
(b)
δ
(
⋅
)
δ(·)
δ(⋅)表示用于捕获通道相关性的特征变换(SNL块中的1x1 conv);
(c)
F
(
⋅
,
⋅
)
F(·,·)
F(⋅,⋅)表示将全局上下文特征聚合到每个位置的特征的融合函数(在SNL块中按广播元素添加)。
SE也是文中提出的框架的一个实例。如上所示,它包括:
(a)全局上下文建模的平均池(在等式4中为
α
j
=
1
N
P
α_j=\frac{1}{N_P}
αj=NP1),称为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=1NpeWkXmeWkXj是全局注意的权重,
δ
(
⋅
)
=
W
v
2
R
e
L
U
(
L
N
(
W
v
1
(
⋅
)
)
δ(·)=W_{v2}ReLU(LN(W_{v1}(·))
δ(⋅)=Wv2ReLU(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,其结果如上。