ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks

论文地址:https://arxiv.org/abs/1910.03151

Abstract

\qquad 最近,通道注意力机制被证明在改善深度卷积神经网络(CNNs)的性能方面具有巨大的潜力。然而,现有的方法大多致力于开发更复杂的注意力模块,以实现更好的性能,这不可避免地增加了模型的复杂性。为了克服性能和复杂性之间的矛盾,本文提出了一种有效的通道注意力(ECA)模块,该模块只增加了少量的参数,却能获得明显的性能增益。通过对SENet中通道注意模块的分析,作者的经验表明避免降维对于学习通道注意力非常重要,适当的跨信道交互可以在显著降低模型复杂度的同时保持性能。因此,作者提出了一种不降维的局部跨信道交互策略,该策略可以通过一维卷积有效实现。此外,作者又提出了一种自适应选择一维卷积核大小的方法,确定局部跨信道交互的覆盖率。 实验证明,本文提出的ECA模块是高效的。本文模块相对于ResNet50的主干的参数和计算分别是80比24.37M和4.7e-4 GFLOPs比3.86 GFLOPs,并且性能在Top-1精度方面提升超过2%。我们以ResNets和MobileNetV2为骨干,利用提出的ECA模块在图像分类、目标检测和实例分割方面进行了广泛的评估。实验结果表明,该模块在性能上优于其他模块,且具有较高的效率。

1.Introduction

\qquad 深度卷积神经网络(CNNs)在人工智能中得到了广泛的应用,并在图像分类、目标检测和语义分割等广泛领域取得了很大的进展。从开创性的AlexNet 开始,许多研究被不断研究,以进一步提高深度CNNs的性能。近年来,将注意机制引入卷积块引起了人们的广泛关注,显示出了极大的性能改进潜力。在这些方法中,有代表性的作品之一是squeeze 和 excitation网络(SENet) ,它对每个卷积块进行通道注意学习,在各种深度CNN架构上获得了明显的性能增益。
\qquad 跟随在SENet中squeeze 和 excitation的设定,一些研究通过捕获更复杂的通道依赖来改进SE块或者结合额外的空间注意力。这些方法虽然取得了较高的精度,但往往带来较高的模型复杂度和较大的计算量。与上述以更高的模型复杂度为代价来获得更好的性能的方法不同,本文关注的是一个问题:能否以更有效的方式学习有效的通道注意力?
\qquad 为了回答这个问题,我们首先回顾SENet中的通道注意模块。具体来说,给定输入特征,SE块首先对每个通道独立使用全局平均池,然后使用两个非线性的全连接(FC)层和一个sigmoid函数生成每个通道的权值。这两个FC层的设计是为了捕获非线性跨通道交互,其中包括降维以避免过高的模型复杂度。虽然该策略被广泛应用于后续的通道注意模块,我们的实证分析表明降维会对通道注意力预测产生副作用,而且对所有通道的相关性进行捕获是低效且不必要的。
\qquad 因此,本文提出了一种用于深度CNN的高效通道注意力(ECA)模块,该模块避免了降维,并以一种高效的方式捕捉了跨通道交互的信息。如图2所示,在不降维的情况下进行通道全局平均池化之后,我们的ECA通过考虑每个通道和它的k领域来捕获局部跨通道交互信息。实践证明,该方法保证了模型效率和计算效果。需要注意的是,ECA可以通过大小为k的快速一维卷积来有效实现,其中卷积核大小k代表了局部跨通道交互的覆盖率,即有多少领域参与了一个通道的注意预测。为了避免通过交叉验证对k进行手动调整,本文提出了一种自适应确定k的方法,其中跨通道交互的覆盖率(即卷积核大小 k)与通道维数成正比。如图1和表3所示,与主干模型相反,带有ECA模块的深度CNNs(ECA- net)引入了很少的额外参数和几乎可以忽略的计算量,同时带来了显著的性能提升。例如,对于具有24.37M参数和3.86 GFLOPs的ResNet-50来说, ECA-Net50的附加参数和计算量分别为80和4.7e-4 GFLOPs;与此同时,ECA-Net50在Top 1 准确率方面比ResNet-50高出2.28%。
在这里插入图片描述

图1. 各种注意力模块(即SENet[14]、CBAM[33]、 A 2 A^2 A2-Nets[4]和ECA-Net)的比较,以ResNets为骨干模型,在准确率、网络参数、FLOPs方面。圆的大小表示模型计算(FLOPs)。显然,我们的ECA-Net在模型复杂度较低的同时,获得了较高的精度。

在这里插入图片描述

图2. 高效通道注意力(ECA)模块的图示。考虑到通过全局平均池化(GAP)得到的聚合特征,ECA通过执行大小为k的快速一维卷积来生成通道权重,其中k是通过通道维度C的映射自适应确定的。
在这里插入图片描述
表1. 现有的注意力模块在是否没有通道降维(No DR)、跨通道交互和比SE少的参数(用lightweight表示)方面的比较

\qquad 表1 总结了现有的注意模块,是否降低通道维度(DR)、跨通道交互和轻量级模型。从表中可以看出,ECA模块通过避免降低通道维度来学习高效的通道注意力,同时以极其轻量级的方式捕获跨通道交互信息。为了评估我们的方法,我们在ImageNet-1K[6]和MS COCO[23]上使用不同的深度CNN架构进行了各种任务的实验。

\qquad 本文的贡献总结如下。(1)通过对SE块的分析,我们分别证明了避免降维和适当的跨通道交互对高性能和高效的通道注意的学习是重要的。(2)在上述分析的基础上,我们尝试开发一个用于深度CNN的轻量级通道注意模块,提出了一种高效通道注意力(ECA)模块,该模块增加的模型复杂度很小,但带来明显的改进。(3)在ImageNet-1K和MS COCO上的实验结果表明,该方法具有较低的模型复杂度,同时具有较好的性能。

2.Related Work

\qquad 事实证明,注意力机制是增强深度CNN的一个潜在手段。SE-Net[14]首次提出了一种有效的学习通道注意力的机制,取得了良好的效果。随后,注意模块的发展大致可以分为两个方向:(1)增强特征聚合;(2)通道与空间注意力相结合。具体来说,CBAM[33]使用平均池化和最大池化来聚合特性。GSoP[9]引入了一个二阶池化来实现更有效的特性聚合。GE[13]利用深度卷积[5]来聚合特征,探索空间扩展。CBAM [33] 和 scSE [27] 利用核大小为k×k的二维卷积计算空间注意力,然后将其与通道注意结合起来。GCNet [2]与非局部(NL)神经网络[32] 有着相似的理念,GCNet[2]开发了一个简化的NL网络,并与SE块集成,形成了一个轻量级的模块来模拟长距离的依赖关系。双重注意网络(A2-Nets)[4]为NL块引入了一个新颖的关系函数,用于图像或视频识别。Dual Attention Network(DAN)[7]同时考虑基于NL的通道和空间注意力,用于语义分割。然而,上述大多数基于NL的注意力模块由于其较高的模型复杂性,只能用于单个或几个卷积块。显然,上述所有的方法都侧重于开发复杂的注意力模块以获得更好的性能。与他们不同的是,我们ECA的目标是学习有效的通道注意力,同时降低模型的复杂度。
\qquad 我们的工作还涉及到高效卷积,它是为轻量级CNN架构设计的。最常用的两种高效卷积是分组卷积[37, 34, 16]和深度可分离卷积[5, 28, 38, 24]。如表2所示,虽然这些有效的卷积所涉及的参数较少,但在注意力模块上的有效性并不明显。ECA模块的目标是捕获局部的跨通道交互,它与通道局部卷积 [36]和channel-wise卷积[8]有一些相似之处;与之不同的是,我们的方法研究了一个具有自适应核大小的一维卷积来代替通道注意力模块中的FC层。与分组和深度可分离卷积相比,我们的方法以较低的模型复杂度实现了更好的性能。
在这里插入图片描述

表2. 在ImageNet上使用ResNet-50作为骨干模型的各种通道注意力模块的比较。#.Param.表示通道注意力模块的参数数; ⊙ \odot 表示点乘;GC和C1D分别表示分组卷积和一维卷积;k是C1D的核大小。

3.Proposed Method(相关方法)

\qquad 在本节中,我们首先回顾SENet[14]中的通道注意力模块(即SE块)。然后,通过分析降维和跨通道交互,对SE块进行经验诊断。这促使我们提出了ECA模块。此外,我们还开发了一种自适应确定ECA参数的方法,最后展示了如何将其应用于深度CNN.

3.1.Revisiting Channel Attention in SE Block(回顾SE块中的通道注意力)

\qquad 设一个卷积块的输出为 X ∈ R W × H × C \mathcal{X}\in R^{W\times H\times C} XRW×H×C,其中W、H、C分别为宽度、高度和通道个数(即filter个数)。据此,SE块通道权重计算公式如下:
ω = σ ( f { W 1 , w 2 } ( g ( X ) ) ) ( 1 ) \boldsymbol{\omega}=\sigma\left(f_{\left\{\mathbf{W}_{\mathbf{1}}, \mathbf{w}_{\mathbf{2}}\right\}}(g(\mathcal{X}))\right)\qquad(1) ω=σ(f{W1,w2}(g(X)))(1)

其中 g ( X ) = 1 W H ∑ i = 1 , j = 1 W , H X i j g(\mathcal{X})=\frac{1}{W H} \sum_{i=1, j=1}^{W, H} \mathcal{X}_{i j} g(X)=WH1i=1,j=1W,HXij是通道全局平均池化(GAP), σ \sigma σ是Sigmoid函数。令 y = g ( X ) \mathbf{y}=g(\mathcal{X}) y=g(X),则
f { w 1 , w 2 } f_{\left\{\mathbf{w}_{\mathbf{1}}, \mathbf{w}_{\mathbf{2}}\right\}} f{w1,w2} 的形式是:

f { w 1 , w 2 } ( y ) = W 2 ReLU ⁡ ( W 1 y ) ( 2 ) f_{\left\{\mathbf{w}_{1}, \mathbf{w}_{2}\right\}}(\mathbf{y})=\mathbf{W}_{2} \operatorname{ReLU}\left(\mathbf{W}_{1} \mathbf{y}\right)\qquad(2) f{w1,w2}(y)=W2ReLU(W1y)(2)

其中ReLU是线性整流函数,又称修正线性单元( Rectified Linear Unit)。为了避免较高的模型复杂度, W 1 W_1 W1 W 2 W_2 W2分别设置为 C × ( C r ) C\times \left ( \frac{C}{r} \right ) C×(rC) ( C r ) × C \left ( \frac{C}{r} \right )\times C (rC)×C。我们可以观察到 f { w 1 , w 2 } f_{\left\{\mathbf{w}_{\mathbf{1}}, \mathbf{w}_{\mathbf{2}}\right\}} f{w1,w2}包含通道注意力块的所有参数,虽然Eq.(2)中的降维可以降低模型的复杂性,但它破坏了通道与其权重之间的直接对应关系。但Eq.(2)首先将通道特征映射到低维空间中,然后将其映射回来,使得通道与其权重之间的对应是间接的。

3.2. Efficient Channel Attention (ECA) Module(高效通道注意力(ECA)模块)

\qquad 在回顾了SE块后,我们进行了实证比较,分析了通道降维和跨通道交互对通道注意力学习的影响。通过这些分析,我们提出了高效通道注意力(ECA)模块。

3.2.1 Avoiding Dimensionality Reduction(避免降维)

\qquad 如上所述,Eq.(2)中的降维使得通道与其权重之间的对应关系是间接的。为了验证其效果,我们将原始SE块与其三个变体( SE-Var1, SE-Var2 and SE-Var3)进行比较,所有这些都不进行降维操作。如表2所示,不含参数的SE-Var1仍优于原网络,表明通道注意力具有提高深度CNN性能的能力。同时,SE- Var2独立学习每个通道的权值,在涉及较少参数的情况下略优于SE块。这说明通道与其权值需要直接对应,同时避免降维比考虑非线性通道之间的相关性更为重要。此外,SEVar3采用一个单一的FC层比两个FC层在SE块中的降维表现更好。以上结果清楚地表明,避免降维有助于学习有效的通道注意力。因此,作者提出了不降低通道维数的ECA模块。

3.2.2 Local Cross-Channel Interaction(局部跨通道交互)

假设集合特征 y ∈ R C y\in R^{C} yRC没有降维,通道注意力可以通过以下方式学习:
ω = σ ( W y ) ( 3 ) \omega = \sigma ( Wy) \qquad(3) ω=σ(Wy)(3)
其中W为 C × C C × C C×C参数矩阵。特别是SE-Var2和SE-Var3,我们有:
W = { W v a r 2 = [ w 1 , 1 … 0 ⋮ ⋱ ⋮ 0 … w C , C ] W v a r 3 = [ w 1 , 1 ⋯ w 1 , C ⋮ ⋱ ⋮ w 1 , C … w C , C ]   ( 4 ) \mathbf{W}=\left\{\begin{array}{c}\mathbf{W}_{var2}=\left[\begin{array}{ccc}w^{1,1} & \ldots&0 \\\vdots & \ddots & \vdots\\0&\ldots&w^{C, C} \end{array}\right] \\\mathbf{W}_{v a r 3}=\left[\begin{array}{ccc}w^{1,1} & \cdots & w^{1, C} \\\vdots & \ddots & \vdots \\w^{1, C} & \ldots & w^{C, C} \end{array}\right]\end{array}\right.\:(4) W= Wvar2= w1,100wC,C Wvar3= w1,1w1,Cw1,CwC,C (4)
其中,SE-Var2的 W v a r 2 W_{var2} Wvar2是一个包含参数C的对角矩阵,SE-Var3的 W v a r 3 W_{var3} Wvar3是一个包含参数 C × C C\times C C×C的完整矩阵。如Eq.(4)所示,关键的区别在于SE-Var3考虑跨通道交互,而SE-Var2不考虑,因此SE-Var3的性能更好。这一结果表明,跨通道交互有利于学习通道注意力。然而,SE-Var3需要大量的参数,这导致很高的模型复杂度,特别是对于大的通道数。
\qquad SE-Var2和SE-Var3之间可能的折中方案是将 W v a r 2 W_{var2} Wvar2扩展为块对角矩阵,即: W G = [ W G 1 ⋯ 0 ⋮ ⋱ ⋮ 0 ⋯ W G G ]   ( 5 ) \mathbf{W}_{G}=\left[\begin{array}{ccc} \mathbf{W}_{G}^{1} & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & \mathbf{W}_{G}^{G} \end{array}\right]\:(5) WG= WG100WGG (5)
Eq.(5)将通道划分为G组,每个组包括 C / G C/G C/G个通道,并独立学习每个组中的通道注意力,以局部的方式捕捉跨通道交互。据此,它包含 C 2 / G C^2/G C2/G个参数。从卷积的角度来看,SE-Var2、SE-Var3和Eq.(5)可以分别视为深度可分离卷积、FC层卷积和分组卷积。具有分组卷积的SE块(SE-GC)用 σ ( G C ( y ) ) = σ ( W G y ) \sigma \left (GC\left ( y \right ) \right ) =\sigma \left ( W_Gy \right ) σ(GC(y))=σ(WGy)表示。然而,如[24]所示,过多的组卷积将增加内存访问成本,从而降低计算效率。此外,如Table 2所示,不同组的SE-GC对SE-Var2没有任何好处,表明它不是捕获局部跨通道交互的有效方案,原因可能是SE-GC完全抛弃了不同群体之间的依赖关系。
\qquad 在本文中,我们探索了另一种方法来捕获局部跨通道交互,旨在保证计算性能和模型复杂度,具体来说,我们使用了一个带状矩阵(band matrix) W k W_k Wk来学习通道注意力:
[ w 1 , 1 … w 1 , k 0 0 … … 0 0 w 2 , 2 … w 2 , k + 1 0 … … 0 ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ 0 … 0 0 … w C , C − k + 1 … w C , C ] ( 6 ) \left[\begin{array}{cccccccc}w^{1,1} & \ldots & w^{1, k} & 0 & 0 & \ldots & \ldots & 0 \\0 & w^{2,2} & \ldots & w^{2, k+1} & 0 & \ldots & \ldots & 0 \\\vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots \\0 & \ldots & 0 & 0 & \ldots & w^{C, C-k+1} & \ldots & w^{C, C}\end{array}\right]\qquad(6) w1,100w2,2w1,k00w2,k+1000wC,Ck+100wC,C (6)
Eq.(6)中的 W k W_k Wk包含 k × C k × C k×C个参数,通常小于Eq.(5),而且Eq.(6)避免了Eq.(5)中不同组之间的完全独立。由Table 2对比可知,Eq.(6)中的方法(即ECA-NS)优于Eq.(5)的SE-GC。对于Eq.(6),计算 y i y_i yi的权重时只考虑了 y i y_i yi与其k个领域之间的相互作用,即:
ω i = σ ( ∑ j = 1 k w i j y i j ) , y i j ∈ Ω i k ( 7 ) \omega_{i}=\sigma\left(\sum_{j=1}^{k} w_{i}^{j} y_{i}^{j}\right), y_{i}^{j} \in \Omega_{i}^{k}\qquad(7) ωi=σ(j=1kwijyij),yijΩik(7)
其中 Ω i k \Omega_{i}^{k} Ωik表示 y i y_i yi的k个相邻通道的集合。
\qquad 一种更高效的方法是让所有通道共享相同的学习参数,即: ω i = σ ( ∑ j = 1 k w j y i j ) , y i j ∈ Ω i k ( 8 ) \omega_{i}=\sigma\left(\sum_{j=1}^{k} w^{j} y_{i}^{j}\right), y_{i}^{j} \in \Omega_{i}^{k}\qquad(8) ωi=σ(j=1kwjyij),yijΩik(8)
注意,这种策略可以很容易地通过核大小为k的一维卷积实现,即: ω = σ ( C 1 D k ( y ) ) ( 9 ) \boldsymbol{\omega}=\sigma\left(\mathrm{C} 1 \mathrm{D}_{k}(\mathbf{y})\right)\qquad(9) ω=σ(C1Dk(y))(9)
其中C1D表示一维卷积。这里,Eq.(9)中的方法被称为ECA (efficient channel attention)模块,该模块只涉及k个参数。如表2所示,我们的ECA模块(k = 3)在获得与SE-Var3相似的结果的同时具有更低的模型复杂性,通过适当捕获局部跨通道交互,保证了模型效率和性能。

3.2.3 Coverage of Local Cross-Channel Interaction(局部跨通道交互的覆盖率)

\qquad 由于我们的ECA模块的目标是适当捕获局部跨通道交互,因此需要确定通道交互的覆盖范围(即一维卷积的卷积核大小k)。在不同的CNN架构中,对于不同通道的卷积块,可以手动调整交互的最优覆盖范围。然而,通过手动进行交叉验证调整将消耗大量计算资源。而且分组卷积已成功地用于改善CNN架构,在固定group数量的情况下,高维(低维)通道与长距离(短距离)卷积成正比。基于类似的理念,交互的覆盖范围(即一维卷积的核大小k)与通道维数C成正比是合理的,换句话说,在k和C之间可能存在映射φ:
C = ϕ ( k ) ( 10 ) C=\phi(k)\qquad(10) C=ϕ(k)(10)
\qquad 最简单的映射是一个线性映射,即 ϕ ( k ) = γ ∗ k − b \phi(k)=\gamma*k-b ϕ(k)=γkb。然而,线性函数所表征的关系过于有限,另一方面,通道维度C(即滤波器的数量)通常是2的指数倍,所以,我们将线性函数 ϕ ( k ) = γ ∗ k − b \phi(k)=\gamma*k-b ϕ(k)=γkb扩展为非线性函数,从而引入一个可能的解。这里采用以2为底的指数函数来表示非线性映射关系:
C = ϕ ( k ) = 2 ( γ ∗ k − b ) ( 11 ) C=\phi(k)=2^{(\gamma * k-b)}\qquad(11) C=ϕ(k)=2(γkb)(11)
然后,给定通道维数C,卷积核大小k可以自适应地确定为:
k = ψ ( C ) = ∣ log ⁡ 2 ( C ) γ + b γ ∣ o d d ( 12 ) k=\psi(C)=\left|\frac{\log _{2}(C)}{\gamma}+\frac{b}{\gamma}\right|_{o dd}\qquad(12) k=ψ(C)= γlog2(C)+γb odd(12)
其中 ∣ t ∣ o d d |t|_{odd} todd表示最接近t的奇数。在本文的所有实验中,我们分别设 γ \gamma γ和b为2和1。显然,通过映射ψ,高维通道具有较长的相互作用范围,而低维通道通过非线性映射具有较短的相互作用范围。

3.3. ECA Module for Deep CNNs

\qquad 图2说明了ECA模块的概述。ECA模块使用不降维的GAP对卷积特征进行聚合后,首先自适应地确定核大小k,再进行一维卷积,然后使用Sigmoid函数学习通道注意。为了将ECA模块应用于深度CNN,我们按照[14]中的相同配置,用我们的ECA模块取代SE块。由此产生的网络被命名为ECA-Net。图3给出了ECA的PyTorch代码。
在这里插入图片描述

4. Experiments

4.1. Implementation Details

\qquad 为了评估ECA-Net对ImageNet的分类,我们使用了四种广泛使用的cnn作为骨干模型,包括ResNet-50[11]、ResNet-101[11]、ResNet-512[11]和MobileNetV2[28]。对于使用ECA训练ResNets,我们在[11,14]中采用了完全相同的数据增强和超参数设置。具体来说,将输入随机裁剪为224×224随机水平翻转。采用随机梯度下降法(SGD)对网络参数进行优化,权重衰减为1e-4,动量为0.9,小批量256。所有模型都在100个epoch内通过设置初始学习率为0.1进行训练,每30个epoch降低10倍。对于使用ECA训练MobileNetV2,我们遵循[28]中的设置,其中网络在400个时代内使用SGD进行培训,其重量衰减为4e-5,动量为0.9,小批量大小为96。初始学习率设置为0.045,线性衰减率为0.98。在验证集上进行测试,首先将输入图像的短边调整为256,并使用224 × 224的中心作物进行评估。所有模型都是PyTorch工具包1实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值