【论文翻译】GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond

GCNet: GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond

摘要

Non-Local Network (NLNet) 通过将特定于查询的全局上下文聚合到每个查询位置,提供了一种用于捕获远程依赖关系的开创性方法。然而,通过严格的实证分析,我们发现 non-local network建模的全局上下文对于图像中的不同查询位置几乎相同。在本文中,我们利用这一发现创建了一个基于查询无关公式的简化网络,该网络保持了 NLNet 的准确性,但计算量明显减少。我们进一步观察到,这种简化的设计与 Squeeze-Excitation Network (SENet) 具有相似的结构。因此,我们将它们统一为全局上下文建模的三步通用框架。在通用框架内,我们设计了一个更好的实例化,称为全局上下文(GC)块,它是轻量级的,可以有效地对全局上下文进行建模。轻量级特性允许我们将其应用于骨干网络中的多个层以构建全局上下文网络 (GCNet),在各种识别任务的主要基准测试中,它通常优于简化的 NLNet 和 SENet。代码和配置发布在 https://github.com/xvjiarui/GCNet。

1. 引言

捕获远程依赖,旨在提取视觉场景的全局理解,被证明有利于广泛的识别任务,例如图像/视频分类、对象检测和分割 [31、12、38、14]。在卷积神经网络中,由于卷积层在局部邻域中建立像素关系,远程依赖关系主要通过深度堆叠卷积层来建模。然而,直接重复卷积层的计算效率低且难以优化 [31]。这将导致远程依赖的无效建模,部分原因是在远距离位置之间传递信息的困难。

为了解决这个问题,提出了non-local network[31]通过自注意机制[28]使用one layer对远程依赖关系进行建模。对于每个查询位置,non-local network首先计算查询位置与所有位置之间的成对关系,形成注意力图,然后通过加权和与注意力图定义的权重聚合所有位置的特征。最后将聚合后的特征添加到每个查询位置的特征中,形成输出。

non-local network中特定于查询的注意力权重通常暗示了相应位置对查询位置的重要性。虽然可视化查询特定重要性权重有助于深入理解,但原始论文中很大程度上缺少这种分析。我们弥补了这一遗憾,如图 1 所示,但令人惊讶的是,不同查询位置的注意力图几乎相同,这表明只学习了与查询无关的依赖关系。通过表 1 中的统计分析进一步验证了这一观察结果,即不同查询位置的注意力图之间的距离非常小。
在这里插入图片描述
基于这一观察,我们通过对所有查询位置显式使用与查询无关的注意力图来简化non-local block。然后我们使用这个注意力图将相同的聚合特征添加到所有查询位置的特征中,以形成输出。这个简化的block的计算成本比原始的non-local block要小得多,但在几个重要的视觉识别任务上几乎没有降低准确性。此外,我们发现这个简化的block与流行的 Squeeze-Excitation (SE) 网络 [14] 具有相似的结构。它们都通过从所有位置聚合的相同特征来增强原始特征,但通过聚合策略、转换和强化功能的选择来区分彼此。通过抽象这些功能,我们达到了一个三步通用框架,统一了简化的 NL block和 SE block:(a)上下文建模模块,将所有位置的特征聚合在一起形成全局上下文特征; (b) 一个特征转换模块,用于捕获通道间的相互依赖关系; © 融合模块,将全局上下文特征合并到所有位置的特征中。

简化的 NL block和 SE block是这个通用框架的两个实例,但三个步骤的实现不同。通过对每个步骤的比较研究,我们发现简化的non-local block和 SE block都是次优的,每个块都有一部分步骤超过另一个。通过结合每一步的最佳实现,我们达到了通用框架的新实例,称为global context(GC)block。新块在上下文建模(使用全局注意力池)和融合(使用加法)步骤上与简化的 NL block共享相同的实现,而与 SE block共享相同的变换步骤(using two-layer bottleneck)。 GC 块在多个视觉识别任务上的表现优于简化的non-local block和 SE block。

与 SE block一样,所提出的 GC block也是轻量级的,这使得它可以应用于 ResNet 架构中的所有残差块,而原始的non-local block由于计算量大而通常在一层或几层之后应用. GC block增强网络被命名为全局上下文网络(GCNet)。在 COCO 对象检测/分割上,GCNet 在 APbox 上的性能分别比 NLNet 和 SENet 高 1.9% 和 1.7%,在 APmask 上分别高出 1.5% 和 1.5%,而 FLOPs 相对增加了 0.07%。此外,GCNet 在三个通用视觉识别任务上产生了显着的性能提升:COCO 上的对象检测/分割(APbbox 上的 2.7%↑,APmask 上的 2.4%↑,在 FPN 和 ResNet-50 作为主干的 Mask R-CNN 上)[9] )、ImageNet 上的图像分类(在 ResNet-50 [10] 上的 top-1 准确度为 0.8%↑)和 Kinetics 上的动作识别(在 ResNet-50 Slow-only 基线 [6] 上的 top-1 准确度上为 1.1%↑ ),计算成本增加不到 0.26%。

2. 相关工作

Deep architectures。随着卷积网络最近在大规模视觉识别任务中取得了巨大的成功,已经进行了许多尝试来改进原始架构以实现更好的准确性 [18,26,27,10,37, 15、34、14、43、13、40、11、4、42、19、2、24、31、35、6]。网络设计的一个重要方向是改进基础组件的功能公式,以提升深度网络的能力。 ResNeXt [34] 和 Xception [3] 采用组卷积来增加基数。 Deformable ConvNets [4, 42] 设计可变形卷积以增强几何建模能力。 SqueezeExcitation Networks [14] 采用通道方式重新缩放来显式建模通道依赖关系。

我们的全局上下文网络是一种新的主​​干架构,具有新颖的 GC 模块以实现更有效的全局上下文建模,在对象检测、实例分割、图像分类和动作识别等广泛的视觉任务上提供卓越的性能。

Long-range dependency modeling。最近用于远程依赖建模的方法可以分为两类。首先是采用自我注意机制来建模成对关系。第二个是对独立于查询的全局上下文进行建模。

自注意力机制最近已成功应用于各种任务,例如机器翻译 [7、8、28]、图嵌入 [29]、生成建模 [39] 和视觉识别 [30、12、31、36]。 [28] 是首次尝试应用自我注意机制来模拟机器翻译中的远程依赖关系。 [12] 扩展了自注意力机制来模拟对象检测中对象之间的关系。 NLNet [31] 采用自注意力机制来模拟像素级的成对关系。 CCNet [16] 通过堆叠两个纵横交错的块来加速 NLNet,并应用于语义分割。然而,NLNet 实际上为每个查询位置学习与查询无关的注意力图,这是对像素级成对关系建模的计算成本的浪费。

为了对全局上下文特征进行建模,SENet [14]、GENet [13] 和 PSANet [41] 对不同的通道进行重新缩放,以重新校准与全局上下文的通道依赖性。 CBAM [32] 通过重新缩放重新校准不同空间位置和通道的重要性。然而,所有这些方法都采用重新缩放来进行特征融合,这对于全局上下文建模不够有效。

所提出的 GCNet 可以通过加法融合有效地对全局上下文建模为 NLNet [31](重量级且难以集成到多个层),轻量级属性为 SENet [14](采用缩放,对于全局上下文建模)。因此,通过更有效的全局上下文建模,GCNet 在各种识别任务的主要基准上可以实现比 NLNet 和 SENet 更好的性能。

3. Non-local Networks分析

在本节中,我们首先回顾non-local block[31]的设计。为了给出直观的理解,我们可视化了由广泛使用的非局部块实例化生成的不同查询位置的注意力图。为了统计分析其行为,我们平均了所有查询位置的注意力图之间的距离(余弦距离和 Jensen-Shannon 散度)。

3.1 重温Non-local Block

基本non-local block[31]旨在通过聚集来自其他位置的信息来加强查询位置的特征。我们将 x = { x i } i = 1 N p x=\{x_i\}^{Np}_{i=1} x={xi}i=1Np表示为一个输入实例(例如,图像或视频)的feature map,其中 N p Np Np是feature map中的位置数(例如,对于图像, N p = H ⋅ W N_p=H·W Np=HW,对于视频, N p = H ⋅ W ⋅ T Np=H·W·T Np=HWT)。 X X X z z z分别表示具有相同维度的non-local block的输入和输出。然后,non-local block可以表示为:

z i = x i + W z ∑ j = 1 N p f ( x i , x j ) C ( x ) ( W v ⋅ x j ) , ( 1 ) z_i = x_i + W_z\sum^{Np}_{j=1}\frac{f (xi, xj)}{C (x)} (W_v · x_j), (1) zi=xi+Wzj=1NpC(x)f(xi,xj)(Wvxj),1

其中 i i i是查询位置的索引, j j j枚举所有可能的位置。 F ( x i , x j ) F(x_i,x_j) F(xixj)表示位置 i i i j j j之间的关系,并且具有归一化因子 C ( X ) C(X) C(X) W z W_z Wz W v W_v Wv表示线性变换矩阵(例如,1x1卷积)。为了简化,我们将 ω i j = f ( x i , x j ) C ( X ) ω_{ij}=\frac{f(x_i,x_j)}{C(X)} ωij=C(X)f(xixj)表示为位置 i i i j j j之间的归一化成对关系。

为了满足实际应用中的不同需要,设计了四种不同 ω i j ω_{ij} ωij的非局部块实例,即高斯、嵌入高斯、点积和Concat:(A)高斯表示 ω i j ω_{ij} ωij中的 f f 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(<xixm>)exp(<xixj>;(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_mexp(<W_qx_i,W_kx_m>)} ωij=mexp(<WqxiWkxm>)exp(<WqxiWkxj>);©对于点积, ω i j ω_{ij} ωij中的 f f f定义为点积相似性,公式为 ω i j = < W q x i , W k x j > N p ω_{ij}=\frac{<W_qx_i,W_kx_j>}{N_p} ωij=Np<WqxiWkxj>;(D)Conat按字面定义,定义为 ω i j = R E L U ( W q [ x i , x j ] ) N p ω_{ij}=\frac{RELU(W_q[xi,xj])}{N_p} ωij=NpRELU(Wq[xixj])。最广泛使用的实例化是嵌入的高斯,如图3(A)所示。

在这里插入图片描述
non-local block可以被视为全局上下文建模块,它将特定于查询的全局上下文特征(通过特定于查询的注意力图从所有位置加权平均)聚合到每个查询位置。由于为每个查询位置计算注意力图,non-local block的时间和空间复杂度都是位置数 N p N_p Np 的平方。

3.2 分析

Visualization 为了直观地理解non-local block的行为,我们首先可视化不同查询位置的注意力图。由于不同的实例实现了相当的性能[31],这里我们只可视化最广泛使用的版本,嵌入式高斯,它与[28]中提出的块具有相同的公式。由于视频中的注意力图很难可视化和理解,我们只展示对象检测/分割任务的可视化,该任务将图像作为输入。按照用于目标检测的非局部网络的标准设置[31],我们在带有 FPN 和 Res50 的 Mask R-CNN 上进行了实验,并且只在 res4 的最后一个残差块之前添加了一个non-local block。

在图 2 中,我们从 COCO 数据集中随机选择六张图像,并为每张图像可视化三个不同的查询位置(红点)及其特定于查询的注意力图(热图)。我们惊奇地发现,对于不同的查询位置,它们的注意力图几乎是相同的。为了从统计上验证这一观察结果,我们分析了不同查询位置的全局上下文之间的距离。
在这里插入图片描述

统计分析 v i v_i vi 表示为位置 i i i 的特征向量。平均距离度量定义为 a v g _ d i s t = 1 N p 2 ∑ i = 1 N p ∑ j = 1 N p d i s t ( v i , v j ) avg\_dist = \frac{1}{N^2_p}\sum^{N_p} _{i=1} \sum^{Np}_{j=1}dist (v_i, v_j) avg_dist=Np21i=1Npj=1Npdist(vi,vj),其中 d i s t ( ⋅ , ⋅ ) dist(·,·) dist(,) 是两个向量之间的距离函数。

余弦距离是一种广泛使用的距离度量,定义为 d i s t ( v i , v j ) = ( 1 − c o s ( v i , v j ) ) / 2 dist(v_i, v_j)=(1 − cos(v_i, v_j))/2 dist(vi,vj)=(1cos(vi,vj))/2。这里我们计算三种向量之间的余弦距离,non-local block输入( v i = x i v_i=x_i vi=xi,表 1 中的“输入”),non-local block输出融合前( v i = z i − x i vi=z_i-x_i vi=zixi, 表 1 中的“输出”),以及查询位置的注意力图( v i = ω i v_i=ω_i vi=ωi,表 1 中的’att’)。采用 Jensen-Shannon 散度 (JSD) 来衡量两个概率分布之间的统计距离,如 d i s t ( v i , v j ) = 1 2 ∑ k = 1 N p ( v i k l o g 2 v i k v i k + v j k + v j k l o g 2 v j k v i k + v j k ) dist (v_i, v_j)= \frac{1}{2}\sum^{Np}_{k=1}(v_{ik} log \frac{2v_{ik}}{v_{ik}+v_{jk}} + v_{jk} log \frac{2v_{jk}} {v_{ik}+v_{jk}} ) dist(vi,vj)=21k=1Np(viklogvik+vjk2vik+vjklogvik+vjk2vjk).由于每个注意力图 ω i ω_i ωi 的总和为 1(高斯和E-Gaussian ),我们可以将每个 ω i ω_i ωi 视为离散概率分布。因此,我们计算高斯和 E-Gaussian 的注意图 ( v i = ω i v_i=ω_i vi=ωi) 之间的 JSD。

在这里插入图片描述

两个标准任务的两个距离测量结果如表 1 所示。首先,“input”列中余弦距离的大值表明non-local block的输入特征可以在不同位置进行区分。但是“input”中的余弦距离值非常小,表明由non-local block建模的全局上下文特征对于不同的查询位置几乎相同。对于所有实例,注意力图 (‘att’) 上的两个距离测量值也都非常小,这再次验证了可视化的观察结果。换句话说,虽然non-local block打算计算特定于每个查询位置的全局上下文,但训练后的全局上下文实际上与查询位置无关。因此,无需为每个查询位置计算查询特定的全局上下文,从而使我们能够简化non-local block。

4. 方法

4.1 简化非本地块

由于不同的实例在 COCO 和 Kinetics 上实现了相当的性能,如表 1 所示,这里我们采用最广泛使用的版本 Embedded Gaussian 作为基本的non-local block。基于观察到不同查询位置的注意力图几乎相同,我们通过计算全局(与查询无关)注意力图并为所有查询位置共享该全局注意力图来简化non-local block。根据 [12] 中的结果,有和没有 W z W_z Wz的变体可以达到相当的性能,我们在简化版本中省略了 W z W_z Wz。我们简化的non-local block定义为
z i = x i + ∑ j = 1 N p e x p ( W K x j ) ∑ m = 1 N p e x p ( W k x m ) ( W v ⋅ x j ) , ( 2 ) z_i = x_i + \sum^{Np}_{j=1}\frac{exp(W_Kx_j)}{\sum^{N_p}_{m=1}exp(W_kx_m)} (W_v · x_j), (2) zi=xi+j=1Npm=1Npexp(Wkxm)exp(WKxj)(Wvxj),2

其中 W k W_k Wk W v W_v Wv 表示线性变换矩阵。这个简化的non-local block如图 3(b) 所示。

为了进一步降低这个简化块的计算成本,我们应用分配定律将 W v W_v Wv 移到注意力池之外,如

z i = x i + W v ∑ j = 1 N p e x p ( W K x j ) ∑ m = 1 N p e x p ( W k x m ) x j , ( 3 ) z_i = x_i + W_v\sum^{Np}_{j=1}\frac{exp(W_Kx_j)}{\sum^{N_p}_{m=1}exp(W_kx_m)} x_j, (3) zi=xi+Wvj=1Npm=1Npexp(Wkxm)exp(WKxj)xj,3
此版本的简化non-local block如图 4(b) 所示。 1x1 conv W v W_v Wv 的 FLOPs 从 O ( H W C 2 ) \mathcal O(HWC^2) O(HWC2)减少到 O ( C 2 ) \mathcal O(C^2) O(C2)
在这里插入图片描述
与传统的 non-local block不同,Eqn 3 中的 secondterm 独立于查询位置 i i i,这意味着该术语在所有查询位置 i i i 之间共享。 因此直接将全局上下文建模为所有位置特征的加权平均值,并将全局上下文特征聚合(添加)到每个查询位置的特征。在实验中,我们直接用我们简化的non-local block(SNL)替换non-local block(NL),并评估三个任务的准确性和计算成本,COCO上的对象检测,ImageNet分类和动作识别,如表所示如图 2(a)、4(a) 和 5 所示。正如我们预期的那样,SNL block实现了与 NL block相当的性能,但 FLOP 显着降低。

4.2.Global Context 建模框架

如图 4(b) 所示,简化的 non-local block 可以抽象为三个过程: (a) global attention pooling,采用 1x1 卷积 W k W_k Wk s o f t m a x softmax softmax 函数获得注意力权重,然后进行注意力池化获取全局上下文特征; (b) 通过 1x1 卷积 W v W_v Wv 进行特征变换; ( c ) 特征聚合,它采用加法将全局上下文特征聚合到每个位置的特征。

我们将此抽象视为一个全局上下文建模框架,如图 4(a) 所示,并定义为
z i = F ( x i , δ ( ∑ j = 1 N p α j x j ) ) ( 4 ) z_i = F (x_i, δ(\sum^{Np}_{j=1}α_jx_j)) (4) zi=F(xi,δ(j=1Npαjxj))4
其中 (a) ∑ j α j x j \sum_j α_jx_j jαjxj 表示上下文建模模块,该模块通过权重 α j α_j αj 的加权平均将所有位置的特征组合在一起以获得全局上下文特征(简化 NL (SNL)block 中的全局注意力池); (b) δ ( ⋅ ) δ(·) δ() 表示捕获通道依赖关系的特征变换(SNL 块中的 1x1 卷积); (c) F ( ⋅ , ⋅ ) F (·,·) F(,)表示将全局上下文特征聚合到每个位置的特征的融合函数(SNL block中的广播元素加法)。

有趣的是,[14] 中提出的squeeze-excitation (SE)block也是我们提出的框架的一个实例。如图4(c)所示,它包括:(a)全局上下文建模的全局平均池(设置 α j = 1 N p α_j = \frac{1}{N_p} αj=Np1 in Eqn. 4),命名为SE块中的squeeze操作; (b) 一个瓶颈变换模块(让方程 4 中的 δ ( ⋅ ) δ(·) δ() 依次为一个 1x1 卷积、一个 ReLU、一个 1x1 卷积和一个 sigmoid 函数),用于计算每个通道的重要性,命名为 SE 中的excitation操作; © 用于融合的rescaling函数(令方程 4 中的 F ( ⋅ , ⋅ ) F (·,·) F(,) 为元素乘法),以重新校准通道特征。与non-local block不同,这个 SE block非常轻量级,可以应用于所有层,而计算成本仅略有增加。

4.3 Global Context Block

在这里,我们提出了全局上下文建模框架的新实例,命名为全局上下文(GC)块,它具有简化的non-locl(SNL)block和对远程依赖的有效建模的优点,以及具有轻量级计算的squeeze-excitation( SE) block。

在简化的non-local block,如图 4(b) 所示,变换模块具有最大数量的参数,包括一个具有 C ⋅ C C·C CC 参数的 1x1 卷积。当我们将此 SNL block添加到更高层时,例如res5,这个1x1卷积的参数个数, C ⋅ C = 2048 ⋅ 2048 C·C=2048·2048 CC=20482048,主导这个块的参数个数。为了获得 SE block的轻量级特性,这个 1x1 卷积被一个bottleneck transform 模块代替,这将参数数量从 C ⋅ C C·C CC 显着减少到 2 ⋅ C ⋅ C / r 2·C·C/r 2CC/r,其中 r r r 是bottleneck ratio, C / r C/ r C/r 表示瓶颈的隐藏表示维度。将默认缩减率设置为 r = 16 r=16 r=16,变换模块的参数数量可以减少到原始 SNL block的 1/8。表 2(e) 显示了不同瓶颈比率 r r r 值的更多结果。

由于两层瓶颈变换增加了优化的难度,我们在瓶颈变换内部(在 ReLU 之前)添加了层归一化以简化优化,并充当一个有利于泛化的正则化器。如表 2(d) 所示,层归一化可以显着增强 COCO 上的对象检测和实例分割。

全局上下文 (GC) 块的详细架构如图 4(d) 所示,公式为

z i = x i + W v 2 R e L U ( L N ( W v 1 ∑ j = 1 N p e W k x j ∑ j = 1 N p e W k x m x j ) ) ( 5 ) z_i=x_i+W_{v2}ReLU(LN(W_{v1}\sum^{N_p}_{j=1}\frac{e^{W_kx_j}}{\sum^{N_p}_{j=1}e^{W_kx_m}}x_j)) (5) zi=xi+Wv2ReLU(LN(Wv1j=1Npj=1NpeWkxmeWkxjxj))5

其中 α j = e W k x j ∑ m e W k x m αj = \frac{e^{W_kx_j}}{\sum_{m}e^{W_kx_m}} αj=meWkxmeWkxj 是全局注意力池的权重, δ ( ⋅ ) = W v 2 R e L U ( L N ( W v 1 ( ⋅ ) ) δ(·) = W_{v2}ReLU(LN(W_{v1}(·)) δ()=Wv2ReLU(LN(Wv1()) 表示瓶颈变换。具体来说,我们的 GC 块包括: (a) 用于上下文建模的全局注意力池; (b) 瓶颈转换以捕获通道相关性; © 用于特征融合的广播元素加法。

由于 GC 块是轻量级的,因此可以在多个层中应用以更好地捕获远程依赖关系,而计算成本仅略有增加。以 ResNet-50 用于 ImageNet 分类为例,GC-ResNet-50 表示将 GC 块添加到 ResNet-50 中的所有层(c3+c4+c5),瓶颈比为 16。GCResNet-50 增加了 ResNet-50 计算量从 ∼3.86 GFLOPs 到 ∼3.87 GFLOPs,对应于 0.26% 的相对增加。此外,GC-ResNet-50 在 ResNet-50 所需的 ∼25.56M 参数之外引入了 ∼2.52M 额外参数,相当于增加了 ∼9.86%。

全局上下文可以使广泛的视觉识别任务受益,而 GC 块的灵活性使其可以插入用于各种计算机视觉问题的网络架构中。在本文中,我们将我们的 GC 块应用于三个通用视觉任务——图像识别、对象检测/分割和动作识别——并观察到这三个任务的显着改进。

与non-local block的关系. 由于non-local block实际上学习了与查询无关的全局上下文,因此我们的全局上下文块的全局注意力池模拟了与 NL block相同的全局上下文,但计算成本显着降低。由于 GC 块采用瓶颈变换来减少全局上下文特征中的冗余,因此参数和 FLOP 的数量进一步减少。 GC 模块的 FLOPs 和参数数量明显低于 NL 模块,使得我们的 GC 模块可以应用于多个层,计算量仅略有增加,同时更好地捕捉远程依赖关系并帮助网络训练。

与squeeze-excitation block的关系. SE block和我们的 GC block之间的主要区别在于融合模块,它反映了两个block的不同目标。 SE 模块采用重新缩放来重新校准通道的重要性,但不能充分模拟远程依赖性。我们的 GC 块遵循 NL block,利用加法将全局上下文聚合到所有位置以捕获远程依赖。第二个区别是瓶颈变换中的层归一化。由于我们的 GC 块采用加法进行融合,层归一化可以简化瓶颈变换的两层架构的优化,从而获得更好的性能。第三,SE block中的全局平均池化是GC块中全局注意力池的一种特殊情况。表 2(f) 和 4(b) 中的结果显示了我们的 GCNet 与 SENet 相比的优越性。

5. 实验

为了评估所提出的方法,我们对三个基本任务进行了实验,即 COCO [21] 上的对象检测/分割、ImageNet [5] 上的图像分类和 Kinetics [17] 上的动作识别。实验结果表明,所提出的 GCNet 通常优于non-local net(具有较低的 FLOP)和squeeze-excitation net(具有可比较的 FLOP)。

5.1 COCO 上的对象检测/分割

我们在 COCO 2017 [21] 上研究了我们的对象检测和实例分割模型,其训练集由 118k 图像、5k 图像验证集和 20k 图像测试开发集组成。我们遵循[9]的标准设置,分别通过在不同boxes 和mask iou上的标准平均精度分数来评估对象检测和实例分割。

设置。我们的实验是用PyTorch[23]实现的。除非另有说明,我们的GC块r=16适用于ResNet/ResNeXt的c3、c4、c5阶段。

训练。我们使用标准配置的Mask R-CNN[9],以FPN和ResNet/ResNeXt作为骨干架构。输入图像调整大小,使其短边为800像素[20]。我们在8个GPU上训练,每个GPU 2张图像(有效的mini batch 大小为16)。所有模型的主干在ImageNet分类[5]上进行预训练,然后除c1和c2外的所有层与检测头和分割头联合微调。与[9]中针对RPN的阶段式训练不同,我们的实现采用了像[25]那样的端到端训练,产生了更好的结果。与传统的微调设置[9]不同,我们使用Synchronized BatchNorm来代替冻结的BatchNorm。所有模型使用Synchronized SGD进行12个epoch的训练,权值衰减为0.0001,动量为0.9,大致对应于Mask R-CNN基准[22]中的1x schedule 。学习速率初始化为0.02,并在第9和第11个epoch衰减10倍。超参数的选择也遵循Mask R-CNN基准[22]的最新发布。

5.1.1 消融实验

在这里插入图片描述

消融研究在COCO 2017验证装置上进行。报告了bounding boxes和分割掩码的标准COCO指标,包括 A P AP AP A P 50 AP_{50} AP50 A P 75 AP_{75} AP75

Block设计。在[31]之后,在c4的最后一个剩余块之前插入1个non-local块(NL)、1个简化non-local块(SNL)或1个全局上下文块(GC)。表2(a)显示,SNL和GC在参数更少、计算更少的情况下都可以达到与NL相当的性能,这表明原来的non-local设计在计算和参数方面存在冗余。此外,在所有剩余块中添加GC块可以获得更高的性能( A P b b o x AP^{bbox} APbbox上增加1.1%, A P m a s k AP^{mask} APmask上增加0.9%),同时略微增加FLOPs和#params。

Positions.。NL block被插入到residualblock (afterAdd)之后,而SE block被集成到残差块(after1x1)的最后一个1x1卷积之后。在表2(b)中,我们研究了使用GC块的两种情况,它们产生了类似的结果。因此我们采用after1x1作为默认值。

Stages。表2©显示了在不同阶段集成GC块的结果。所有阶段都受益于GC块中的全局上下文建模( A P b b o x AP^{bbox} APbbox A P m a s k AP^{mask} APmask的0.7 -1.7%)。插入c4和c5都比c3获得了更好的性能,这表明更好的语义特征可以从全局上下文建模中获益更多。通过略微增加FLOPs,将GC块插入到所有层(c3+c4+c5)比只插入到单个层产生更高的性能

Bottleneck design。瓶颈转换中每个组件的效果显示在表2(d)中。w/o比值表示使用一个1x1 conv作为变换的简化NL Net,它比基线有更多的参数。尽管r16和r16+ReLU的参数比w/o比变体少得多,但发现两层比一层更难优化,导致性能更差。因此,LayerNorm (LN)被用来简化优化,导致性能类似于w/o比,但##params少得多。

Bottleneck ratio。瓶颈设计旨在减少参数的冗余,并在性能和#params之间进行权衡。在表2(e)中,我们改变了瓶颈的比率r。随着参数和FLOPs数量的增加,r从32降低到4,性能持续提高( A P b b o x AP^{bbox} APbbox的0.8%和 A P m a s k AP^{mask} APmask的0.5%↑),这表明我们的瓶颈在性能和参数之间取得了良好的平衡。值得注意的是,即使在r=32的比率下,网络的性能仍然比基线高出很多。

Pooling and fusion。表2(f)列出了池化和融合的不同选择。首先,它表明在融合阶段加法比缩放更有效。令人惊讶的是,集中注意力只比普通集中效果好一点点。这表明如何聚合全局上下文来查询位置(融合模块的选择)比如何将来自所有位置的特征组合在一起(上下文建模模块中的选择)更重要。值得注意的是,我们的GCNet (att+add)的性能明显优于SENet,这是因为在上下文建模中使用注意池对长期依赖进行了有效的建模,并添加了特性聚合。

5.1.2 骨干增强实验

我们在更强的骨干上评估我们的GCNet,方法是用ResNet-101和ResNeXt-101[34]替换ResNet-50,向多个层(c3+c4+c5)添加形变卷积[4,42],并采用级联策略[1]。本文报道了将GC块集成到所有层(c3+c4+c5)、瓶颈比分别为4和16的GCNet的结果。表3(a)给出了验证集的详细结果。值得注意的是,即使采用了更强的骨干,与基线相比,GCNet的收益仍然很大,这表明我们的GC块与全局上下文建模是对当前模型能力的补充。对于最强的骨干,通过ResNeXt101中的可变形卷积和cascade RCNN,我们的GC块仍然可以在 A P b b o x AP^{bbox} APbbox上提高0.8%,在 A P m a s k AP^{mask} APmask上提高0.5%。为了进一步评估我们提出的方法,测试开发集中的结果也会被报告,如表3(b)所示。在测试开发中,通过添加GC块,强大的基线也得到了很大的提升,这与验证集的结果是一致的。这些结果证明了本文方法的鲁棒性。
在这里插入图片描述

5.2 ImageNet图像分类

ImageNet[5]是一个用于图像分类的基准数据集,包含来自1000个类的1.28M训练图像和50K验证图像。我们按照[10]中的标准设置在训练集中训练深度网络,并报告验证集中的单株top-1和top-5错误。我们的预处理和增强策略遵循[33]和[14]中提出的基线。为了加快实验速度,所有报告的结果都经过两个阶段的训练。我们首先在8个GPU上训练标准ResNet-50 120个epoch,每个GPU 64个图像(有效批大小为512),其中5个epoch为线性预热。其次,我们将新设计的模块插入到第一阶段训练的模型中,并以0.02的初始学习率对其他40个epoch进行微调。基线也遵循这个两阶段的训练,但在第二阶段没有添加新的块。余弦学习速率衰减用于训练和微调。

Block Design。与COCO上的块设计一样,表4(a)报告了不同块的结果。GC块的性能略优于NL块和SNL块,参数少,计算量少,表明了我们设计的通用性和泛化能力。通过在所有剩余块(c3+c4+c5)中插入GC块,性能进一步提高(与基线相比,top-1精度提高了0.82%),但计算开销相对增加了0.26%。
在这里插入图片描述
Pooling and fusion。研究了不同的池化和融合方法在图像分类中的作用。对比表4(b)和表2(f)可以看出,注意池化在图像分类中的作用更大,它可能是[14]中缺失的成分之一。此外,在几乎相同的#params和FLOPs的情况下,附加注意力池(GCNet)比普通规模池(SENet)的准确率高0.44%

5.3. 动力学上的动作识别

对于人体动作识别,我们采用了广泛使用的kinetics[17]数据集,该数据集有400个人体动作类别中约240k个训练视频和20k个验证视频。所有模型在训练集上进行训练,在验证集上进行测试。在[31]之后,我们报告了top-1和top-5的识别精度。我们在[6]中采用仅慢的基线,这是迄今为止可以利用ImageNet预训练模型中权重膨胀的[2]的最佳单一模型。与从零开始训练相比,这个膨胀的3Dstrategy[31]大大加快了收敛速度。所有实验设置显式遵循[6];以8帧(8 × 8)为输入训练仅慢基线,采用多(30)片段验证。消融研究结果见表5。对于动力学实验,GC块的比例设置为4。首先,当用简化的NL块和GC块替换NL块时,可以认为性能相当(top-1精度为0.19%↓和0.11%↓,top-5精度为0.15%↑和0.14%↑)。在COCO和ImageNet中,添加更多GC块可以进一步改善结果,并以更少的计算量胜过NL块。
在这里插入图片描述

6 结论

long-range依赖建模的先驱工作, non-local networks,打算建模特定于查询的全局上下文,但只建模与查询无关的上下文。在此基础上,我们对 non-local networks进行了简化,并将简化后的模型抽象为全局上下文建模框架。然后我们提出了一个新的实例化框架,GC块,它是轻量级的,可以有效地建模远程依赖。我们的GCNet是通过将GC块应用到多个层来构建的,它通常在各种识别任务的主要基准上优于简化的NLNet和SENet。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 TensorFlow 实现的 GCNet 代码示例: ```python import tensorflow as tf def spatial_attention(x, ratio=8): # 获取输入张量的尺寸 W, H, C = x.get_shape().as_list()[1:] # 计算压缩尺寸 squeeze = tf.reduce_mean(x, axis=[1, 2], keepdims=True) # 计算空间注意力张量 excitation = tf.layers.dense(inputs=squeeze, units=C // ratio) excitation = tf.nn.relu(excitation) excitation = tf.layers.dense(inputs=excitation, units=C) excitation = tf.nn.sigmoid(excitation) # 将空间注意力张量广播到原始张量的尺寸 excitation = tf.reshape(excitation, [-1, 1, 1, C]) excitation = tf.tile(excitation, [1, W, H, 1]) # 计算加权后的特征图 return tf.multiply(x, excitation) def channel_attention(x, ratio=8): # 计算平均值和最大值特征图 avg_pool = tf.reduce_mean(x, axis=[1, 2], keepdims=True) max_pool = tf.reduce_max(x, axis=[1, 2], keepdims=True) # 计算通道注意力张量 mlp = tf.layers.dense(inputs=tf.concat([avg_pool, max_pool], axis=-1), units=C // ratio) mlp = tf.nn.relu(mlp) mlp = tf.layers.dense(inputs=mlp, units=C) mlp = tf.nn.sigmoid(mlp) # 计算加权后的特征图 return tf.multiply(x, mlp) def gc_block(x): # 计算空间注意力 x_sa = spatial_attention(x) # 计算通道注意力 x_ca = channel_attention(x) # 将两个注意力加权后相加 x = tf.add(x_sa, x_ca) # 使用 1x1 卷积进行特征压缩 x = tf.layers.conv2d(inputs=x, filters=C, kernel_size=1, strides=1, padding='same') # 应用 BN 和 ReLU 激活函数 x = tf.layers.batch_normalization(inputs=x) x = tf.nn.relu(x) # 返回输出特征图 return x ``` 以上代码实现了 GCNet 中的两种注意力机制(空间注意力和通道注意力),并使用 1x1 卷积进行特征压缩。完整的 GCNet 模型可以使用多个 GC Block 进行堆叠来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值