ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
论文链接:https://arxiv.org/abs/1910.03151
代码地址:https://github.com/BangguWu/ECANet
摘要
近年来,通道注意机制被证明在改善深卷积神经网络(CNN)的性能方面有着巨大的潜力,但现有的方法大多致力于开发更复杂的注意模块以获得更好的性能,必然会增加模型复杂性。到为了克服性能和复杂性的矛盾,本文提出了一种高效的信道注意(ECA)模块,该模块只涉及少量的参数,同时带来了明显的性能增益。通过对SENet中的通道注意模块的剖析,我们从经验上证明了避免降维对学习通道注意的重要性,适当的跨通道交互可以在保持性能的同时显著降低模型的复杂度。因此,我们提出了一种无需降维的局部跨信道交互策略,该策略可以通过1D卷积有效地实现。此外,我们还提出了一种自适应地选择维卷积核大小的方法,以确定本地跨信道交互的覆盖率。所提出的ECA模块是高效而有效的,例如,我们的模块对ResNet50主干网的参数和计算分别为80 vs 24.37M和4.7e-4gflops和3.86gflops,在Top-1精度方面性能提升超过2%。我们以ResNets和mobilenet2为骨干,对我们的ECA模块在图像分类、目标检测和实例分割等方面进行了广泛的评估,实验结果表明,我们的ECA模块在性能上优于同类模块。
1. Introduction
深卷积神经网络(CNNs)在计算机视觉领域得到了广泛的应用,在图像分类,目标检测和语义分割等广泛的任务中取得了很大的进步。 从开创性的AlexNet始,不断进行许多研究以进一步改善深层CNN的性能。最近,将通道注意力整合到卷积块中吸引了人们的注意。 兴趣浓厚,表现出巨大的性能提升潜力。代表性的方法之一是挤压激励(squeeze-and-excitation)网络(SENet),它学会了每个卷积块的通道注意,为各种深度的CNN架构带来明显的性能提升。
图一 不同注意模块的比较(即SENet、CBAM、A2网络和ECA网络)作为主干模型,根据分类准确度、网络参数和FLOP,用圆形半径表示。请注意,我们的ECA网络获得了更高的准确性,同时具有较少的模型复杂性。
继在SENet 中设置了压缩(即特征聚合)和激励(即特征重新校准)之后,一些研究通过捕获更复杂的通道相关性来改善SE块或结合其他空间注意力。这些方法虽然取得了较高的精度,但往往带来更高的模型复杂度和更大的计算负担。与上述方法不同的是,以较高的模型复杂度为代价获得更好的性能,本文将重点放在问题:一个可以吗以更有效的方式学习有效的通道注意力?
为了回答这个问题,我们首先重新访问SENet中的通道上的注意力模块。具体地说,给定输入特性,SE块首先独立地对每个通道使用全局平均池,然后使用两个具有非线性的全连接(FC)层,然后使用Sigmoid函数生成信道权重。两个FC层的设计是为了捕捉非线性的跨信道交互,其中包括降维以控制模型复杂度。虽然这种策略被广泛应用于非连续的信道注意模块,但我们的实证研究表明,维数降维对信道注意预测带来了副作用,而且没有效率,而且没有必要捕捉所有的依赖关系渠道。
因此, 本文提出了一种适用于深度cnn的有效信道保持(ECA)模块,它避免了维数的降低,有效地捕获了跨信道的交互作用。如图2所示,在没有降维的信道全局平均池之后,我们的ECA通过考虑每个信道及其k个邻居来捕获本地跨信道交互。这种方法被证明既能保证效率又能保证有效性。注意我们的ECA可以通过k大小的快速1D卷积有效地实现,其中内核大小k代表本地跨通道交互的覆盖率,即多少人参与一个人的注意力预测频道。避免通过交叉验证手动调整k,我们开发了一种自适应确定方法,其中交互覆盖率(即内核大小)与通道维数成正比。如图1和表3所示,与主干模型相反,带有ECA模块(称为ECA网)的深层CNN引入的额外参数很少,计算量也可以忽略不计,同时不会带来表性能增益。例如,对于参数为24.37M、GFLOPs为3.86的ResNet-50,ECA-Net50的附加参数和计算量分别为80和4.7e-4gflops;同时,ECA-Net50输出器的最高精度为2.28%。
表1总结了现有的注意力模块,包括通道维数减少(DR),跨通道互动和轻量模型,从中我们可以看到,我们的ECA模块通过避免渠道维数降低同时捕获跨渠道互动而极大地学习了有效的渠道注意力。 轻便的方式。 为了评估我们的方法,我们在ImageNet-1K和MS COCO 上使用不同的深度CNN架构在各种任务中进行了实验。本文的贡献概括如下。 (1)我们剖析SE块,并从经验上证明避免降维和适当的跨渠道互动对于分别学习有效和高效的渠道注意力非常重要。 (2)在以上分析的基础上,我们尝试通过提出一种有效的信道注意(ECA)来开发用于深度CNN的极轻量级的信道注意模块,该模块在增加明显改进的同时,增加了很少的模型复杂性。 (3)在ImageNet-1K和MS COCO上的实验结果表明,该方法的模型复杂度低于最新技术,同时具有非常好的竞争性能。
2. Related Work
事实证明,注意力机制是增强深层CNN的潜在手段。 SE-Net首次提出了一种有效的机制来学习频道注意力并获得有希望的表现。 随后,注意力模块的发展可以大致分为两个方向:(1)增强特征聚合; (2)通道与空间注意的结合。具体来说,CBAM同时使用平均池和最大池来聚合特性。GSoP引入了二阶池以实现更有效的特性聚合。GE使用深度卷积对aggregate特征进行空间扩展。CBAM和scSE利用核大小为k×k的一个2d内积计算空间注意力,然后将其与通道注意力相结合。GC-Net与非局部(NL)神经网络具有相似的道理,它开发了一个简化的NL网络并与SE块集成,从而形成了一个轻量级的模块来建模远程依赖。双注意网络(A2-Nets)为图像或视频识别中的nlblock引入了一种新的关系函数。双注意网络(DAN)同时考虑基于NL的通道和空间注意进行语义分割。然而,以上基于NL的注意模块由于模型复杂度高,只能在单个或几个卷积块中使用。显然,以上所有的方法都集中在开发复杂的注意力模块以获得更好的表现。与之不同的是,我们的ECA旨在以较低的模型复杂度学习有效的通道注意力。
我们的工作还涉及高效卷积,它是为轻量化cnn设计的。两种广泛使用的有效卷积是grop卷积和深度方向可分离卷积。如表2所示,尽管这些有效卷积涉及的参数较少,但它们在注意力模块中的有效性很低。我们的ECA模块旨在捕获局部交叉信道交互,这与信道本地卷积[36]和信道方向卷积[8]有一些相似之处;与之不同,我们的方法研究了一个自适应核大小的数据卷来代替信道注意模块中的FC层。与群卷积和深度可分卷积相比,该方法以较低的模型复杂度获得了更好的性能。
3. Proposed Method
在本节中,我们首先回顾SENet中的通道注意模块(即SE block)。然后,通过分析降维和跨通道相互作用的影响,对SE传导阻滞进行了经验诊断。这促使我们提出ECA模块。此外,本文还提出了一种自适应确定我们ECA参数的方法,并给出了在DCNN中如何采用该方法.
3.1重新审视SE中的通道注意力
设一个卷积块的输出为X ,分别代表宽、高、通道维度(卷积核的数量)。因此,SE块中信道的权重可以计算为
其中是channel-wise全局平局池化(GAP) ,σ是Sigmoid函数。令y=g(x),f{W1,W2}写作形式:
其中ReLU表示校正后的线性单元,为了避免高模型复杂度,将W1和W2的大小分别重置为,我们可以看到f{W1,W2}包含了信道注意块的所有参数。式(2)中的降维可以降低模型的复杂度,但它破坏了信道及其权重之间的直接对应关系。例如,一个FClayer使用所有信道的线性组合来预测每个信道的权重。但公式(2)首先将通道特征投影到一个低维空间,然后将其映射回去,使得通道和其权重之间的对应关系是间接的。
3.2. Efficient Channel Attention (ECA) 模块
在回顾SE区块之后,我们进行了实证比较,分析了通道维度还原和跨通道互动对通道注意力学习的影响。根据这些分析,我们提出了我们的 Efficient Channel Attention(ECA)模块
3.2.1避免降维
如上所述,式(2)中的降维使得信道和其权重之间的对应是直接的。为了验证其效果,我们将原始SEblock与它的三个变体(即SE-Var1、SE-Var2和SE-Var3)进行比较,这三个变体都没有进行维度缩减。如表2所示,没有参数的SE-Var1仍然优于原始网络,说明信道注意有能力提高DCNNs的性能。同时,SE-Var2独立地学习每个通道的权值,略优于SE块,而SE块参数较少。这可能表明,信道及其权重需要直接对应,而避免降维比考虑非线性通道相关性更为重要。 此外,采用SE层的SE-Var3在SE块中具有比二维FC层更好的降维效果。以上所有结果清楚地表明,避免降低维数有助于学习有效的注意力。 因此,我们开发了不降低通道尺寸的ECA模块。
3.2.2局部跨通道相互作用
给定聚合特征y在没有降维的情况下,可以学习通道注意力
其中W是CxC参数矩阵。特别是对于SE-Var2和SE-Var3,我们有
其中,SE-Var2的wvar2是一个包含c参数的对角矩阵;对于SE-Var3,wvar3是一个包含c×c参数的完整矩阵。如等式(4)所示,关键区别在于SE-Var3考虑了跨通道交互,而SE-Var2没有,因此SE-Var3实现了更好的性能。这一结果表明,跨渠道互动有利于学习通道注意力。然而,SE-Var3需要大量的参数,这导致模型复杂度很高,特别是对于较大通道数的情况。
SE-Var2和SE-VAR3之间的一个可能的折衷方案是将Var2扩展到块对角矩阵,即
式中,式(5)将频道分为G组,每个组都包含C/G通道,并独立地学习每个组中的通道注意,以局部方式捕捉跨通道交互。因此,它涉及到C2/G参数。从卷积的角度来看,SE-Var2、SE-Var3和式(5)可以分别看作深度方向的可分离卷积、FC层卷积和群卷积。这里,带有群卷积的SE块(SE-GC)用(σGCG(y))=σ(WGy))表示。
然而,如[24]所示,过多的群卷积会增加内存访问成本,从而降低计算效率。如表2所示与SE-Var2相比,具有不同基团的SE-GC没有带来任何增益,这表明它不是一种有效的捕获局部交叉信道相互作用的方案。这可能是因为SE-GC完全抛弃了不同物种之间的依赖关系组。在本文探讨了另一种捕获本地跨信道交互的方法,旨在保证有效性和有效性。具体来说,我们使用波段矩阵Wk来学习频道注意力,而Wk有
(6)
显然,式(6)中Wk涉及k×c参数,通常小于式(5),此外,式(6)避免了等式(5)中不同群体之间的完全独立性。如表2所示,式(6)中的方法(即ECA-NS)优于式(5)中的SE-GC。对于式(6),只考虑yi与其k邻域的相互作用来计算yi的权重,即
其中表示yi的相邻通道的集合。
更有效的方法是使所有通道共享相同的学习参数,即
注意,这种策略可以很容易地通过核大小为k的快速1D卷积来实现,即
其中C1D表示1D卷积。这里,式(9)中的方法被有效信道注意(ECA)模块调用,该模块只涉及k个参数。如表2所示,我们的ECA模块(k=3)与SE-var3实现了类似的结果,同时具有更低的模型复杂度,这通过适当捕捉局部跨信道交互来保证效率和有效性
3.2.3本地跨通道互动覆盖率
由于我们的ECA模块(9)旨在恰当地捕获本地跨信道交互,因此需要确定交互的覆盖范围(即1D卷积的核大小k)。在不同的CNN结构中,对于不同信道数的卷积块,可以手动调整交互覆盖的优化范围。然而,通过交叉验证进行手动调优将耗费大量的计算资源。组卷积已成功地用于改善CNN架构[37、34、16],在给定固定组数的情况下,高维(低维)通道涉及长距离(短距离)卷积。 共享相似的原理,交互作用的覆盖范围(即一维卷积的内核大小k)与通道维C成正比是合理的。换句话说,k和C之间可能存在映射φ:
最简单的映射是一个线性函数,即φ(k)=γ*k−b。但是,以线性函数为特征的关系过于有限。另一方面,众所周知,信道维数C(即滤波器的数目)通常被设置为2的幂次。因此,我们通过将线性函数φ(k)=γ*k−b扩展到一个非线性函数来引入一个可能的解,即:
然后,在给定通道维度C的情况下,内核大小k可以自适应地确定为
其中| t | odd表示最近的t奇数。在本文中,我们在所有实验中分别将γ和b设为2和1。显然,通过映射ψ,高维信道具有更长的距离相互作用,而低维信道通过非线性映射进行短程相互作用。
3.3深度CNN的ECA模块
图2展示了ECA模块的概述。在使用GAP进行卷积特征聚合后,ECA模块首先自适应地确定核大小为k,然后根据Sigmoid函数进行卷积,学习信道注意。为了将我们的ECA应用到深层CNN中,我们按照[14]中相同的配置用ECA模块替换SE块,由此产生的网络以ECA网络命名。图3给出了ECA的Pythorch代码。
class eca_layer(nn.Module):
"""Constructs a ECA module.
Args:
channel: Number of channels of the input feature map
k_size: Adaptive selection of kernel size
"""
def __init__(self, channel, k_size=3):
super(eca_layer, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
# x: input features with shape [b, c, h, w]
b, c, h, w = x.size()#[1, 3, 224, 224]
# feature descriptor on the global spatial information
y = self.avg_pool(x)#[1, 3, 1, 1] 1 3 1 1 1 3 1 1 3 1 3 1 1 3 1 1
# Two different branches of ECA module
y = self.conv(y.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
# Multi-scale information fusion
y = self.sigmoid(y)
return x * y.expand_as(x)
4.实验
在本节中,我们分别使用ImageNet 和MSCOCO 对所提出的大规模图像分类,目标检测和实例分割方法进行评估。 具体来说,我们首先评估内核大小对ECA模块的影响,然后与ImageNet上的最新技术进行比较。 然后,我们使用Fast R-CNN ,Mask R-CNN 和RetinaNet验证了ECA-Net在MS COCO上的有效性。
图像分类实验
目标检测
实例分割
5 总结
本文主要研究低复杂度DCNNs的有效信道注意学习问题。为此,我们提出了一种高效的通道注意(ECA)模块,该模块通过快速1D卷积产生信道注意,其核大小可由通道的非线性映射自适应地确定尺寸。实验性的结果表明,我们的ECA是一个非常轻的即插即用模块,可以改善各种深层CNN架构的性能,包括广泛使用的resnet和轻量级MobileNetV2。此外,我们的ECA网络在目标检测和实例分割方面表现出良好的泛化能力。未来,我们将把ECA模块应用到更多的CNN架构中(例如ResNeXt和Inception),并进一步研究ECA与空间注意模块的结合.