Abstract
最近,通道注意机制已被证明在改善深度卷积神经网络(CNN)的性能方面具有巨大潜力。然而,大多数现有方法致力于开发更复杂的注意模块以实现更好的性能,这不可避免地会增加模型的复杂性。 为了克服性能和复杂性折衷之间的矛盾,本文提出了一种有效的信道注意(ECA)模块,该模块仅包含少量参数,同时带来明显的性能提升。 通过剖析SENet中的通道注意模块,我们从经验上表明避免降维对于学习通道注意很重要,并且适当的跨通道交互可以在保持性能的同时显着降低模型的复杂性。因此,我们提出了一种无需降维的局部跨通道交互策略,该策略可以通过一维卷积有效地实现。 此外,我们提出了一种方法来自适应选择一维卷积的内核大小,确定局部跨通道交互的覆盖范围。提出的ECA模块既有效又有效,例如,针对ResNet50主干的模块参数和计算分别为80 vs. 24.37M和4.7e-4 GFLOP与3.86 GFLOP,Top-1准确性而言提升超过2% 。 我们使用ResNets和MobileNetV2的骨干广泛评估了ECA模块的图像分类,对象检测和实例分割。 实验结果表明,我们的模块效率更高,同时性能优于同类模块。
1. Introduction
深卷积神经网络(CNN)已在计算机视觉社区中得到广泛使用,并且在图像分类,对象检测和语义分割等广泛的任务中取得了长足的进步。从开创性的AlexNet [17]开始,许多研究 不断研究以进一步改善深层CNN的性能。 近来,将通道注意力并入卷积块中引起了很多兴趣,显示出在性能改进方面的巨大潜力。 代表性的方法之一是挤压和激励网络(SENet)[14],它可以学习每个卷积块的通道注意,从而为各种深层CNN架构带来明显的性能提升。
在SENet [14]中设置了压缩(即特征聚合)和激励(即特征重新校准)之后,一些研究通过捕获更复杂的通道相关性或结合额外的空间关注来改善SE块。 尽管这些方法已经实现了更高的精度,但是它们通常带来更高的模型复杂度并承受更大的计算负担。 与前面提到的以更高的模型复杂度为代价实现更好的性能的方法不同,本文重点关注的问题是:是否可以以一种更有效的方式来学习有效的通道注意力机制?
为了回答这个问题,我们首先回顾一下SENet中的通道注意力模块。 具体而言,给定输入特征,SE块首先为每个通道独立采用全局平均池化,然后使用两个全连接(FC)层以及非线性Sigmoid函数来生成通道权重。 两个FC层旨在捕获非线性跨通道交互,其中涉及降低维度以控制模型的复杂性。 尽管此策略在后续的通道注意力模块中被广泛使用[33、13、9],但我们的经验研究表明,降维会给通道注意力预测带来副作用,并且捕获所有通道之间的依存关系效率不高且不必要。
因此,本文提出了一种用于深层CNN的有效通道注意(ECA)模块,该模块避免了维度缩减,并有效捕获了跨通道交互。如图2所示,在不降低维度的情况下进行逐通道全局平均池化之后,我们的ECA通过考虑每个通道及其k个近邻来捕获本地跨通道交互 。实践证明,这种方法可以保证效率和有效性。请注意,我们的ECA可以通过大小为k的快速一维卷积有效实现,其中内核大小k代表本地跨通道交互的覆盖范围,即有多少个相近邻参与一个通道的注意力预测。我们提出了一种自适应确定k的方法,其中交互作用的覆盖范围(即内核大小k)与通道维成比例。如图1和表3所示,与骨干模型[11]相比,带有我们的ECA模块(称为ECA-Net)的深层CNN引入了很少的附加参数和可忽略的计算,同时带来了显着的性能提升。例如,对于具有24.37M参数和3.86 GFLOP的ResNet-50,ECA-Net50的附加参数和计算分别为80和4.7e-4 GFLOP;同时,在Top-1准确性方面,ECA-Net50优于ResNet-50 2.28%。
表1总结了现有的注意力模块,包括通道降维(DR),通道交互和轻量级模型方面,我们可以看到,我们的ECA模块通过避免通道降维,同时以极轻量的方式捕获了不同通道间的交互。 为了评估我们的方法,我们在ImageNet-1K [6]和MS COCO [23]上使用不同的深度CNN架构在各种任务中进行了实验。
本文的主要工作概括如下:(1)解析SE块,并通过经验证明避免降维对于学习有效,适当的不同通道交互对于通道注意力非常重要。 (2)基于以上分析,我们尝试通过提出一种有效的通道注意(ECA)来用于深度CNN的极其轻量级的通道注意模块,该模块在增加明显改进的同时,增加了很少的模型复杂性。 (3)在ImageNet-1K和MS COCO上的实验结果表明,该方法具有比最新技术更低的模型复杂度,同时具有非常好的竞争性能。
2. Related Work
事实证明,注意力机制是增强深层CNN的潜在手段。 SE-Net [14]首次提出了一种有效的机制来学习通道关注度并实现并有不错的效果。随后,注意力模块的发展可以大致分为两个方向:(1)增强特征聚合; (2)通道和空间注意的结合。具体来说,CBAM [33]使用平均池和最大池来聚合特征。 GSoP [9]引入了二阶池,以实现更有效的特征聚合。 GE [13]探索了使用深度卷积[5]聚合特征的空间扩展。 CBAM [33]和scSE [27]使用内核大小为k x k的2D卷积计算空间注意力,然后将其与通道注意力结合起来。与非本地(NL)神经网络[32]共享相似的哲学,GCNet [2]开发了一个简化的NL网络并与SE块集成在一起,从而形成了一个用于建模远程依赖性的轻量级模块。 Double Attention Networks(A2-Nets)[4]为图像或视频识别的NL块引入了一种新颖的关联函数。双重注意网络(DAN)[7]同时考虑了基于NL的信道和空间注意,以进行语义分割。但是,由于它们的高模型复杂性,大多数以上基于NL的注意力模块只能在单个或几个卷积块中使用。显然,所有上述方法都集中于提出复杂的注意力模块以提高性能。与它们不同的是,我们的ECA旨在以较低的模型复杂性来学习有效的通道注意力。
我们的工作还涉及为轻量级CNN设计的高效卷积。 两种广泛使用的有效卷积是组卷积和深度方向可分离卷积。 如表2所示,尽管这些有效的卷积涉及较少的参数,但它们在注意力模块中的作用不大。我们的ECA模块旨在捕获局部跨通道交互,这与通道局部卷积[36]和通道级卷积具有相似之处 [8]; 与它们不同的是,我们的方法研究了具有自适应内核大小的一维卷积来替换通道注意力模块中的FC层。 与分组和深度可分离卷积相比,我们的方法以较低的模型复杂度实现了更好的性能。
3. Proposed Method
在本节中,我们首先回顾了SENet [14]中的通道注意力模块(即SE块)。 然后,通过分析降维和跨通道交互的影响,对SE块进行经验判断。 这激励我们提出ECA模块。 此外,我们提出了一种自适应确定ECA参数的方法,并最终展示了如何将其用于深度CNN。
3.1. Revisiting Channel Attention in SE Block
3.2. Efficient Channel Attention (ECA) Module
重新审视SE模块后,我们进行了实证比较,以分析通道降维和跨通道交互对通道注意力学习的影响。 根据这些分析,我们提出了有效的通道注意(ECA)模块。
3.2.1 Avoiding Dimensionality Reduction
为了验证其效果,我们将原始SE块与它的三个变体(即SE-Var1,SE-Var2和SEVar3)进行了比较,它们均不执行降维。如表2所示,SE-Var1不带参数仍然优于原始网络,这表明通道的注意力确实能够提高深层CNN的性能。同时,SE-Var2独立学习每个通道的权重,这比SE块略胜一筹,但涉及的参数较少。这可能表明通道及其权重需要直接关联,而避免降维比考虑非线性通道相关性更为重要。此外,采用单个FC层的SEVar3的性能要优于两个FC层,并且SE块的尺寸减小。以上所有结果清楚地表明,避免降维有助于学习有效的通道注意力。因此,我们提出的ECA模块不降低通道尺寸。
3.2.2 Local Cross-Channel Interaction
3.2.3 Coverage of Local Cross-Channel Interaction
4. Experiments
在本节中,我们使用所提出的方法在ImageNet [6]和MS COCO [23]数据集上的大规模图像分类,目标检测和实例分割任务进行评估。 具体来说,我们首先评估内核大小对ECA模块的影响,然后与ImageNet上的最新技术进行比较。 然后,我们使用Faster R-CNN [26],Mask R-CNN [10]和RetinaNet [22]验证了ECA-Net在MS COCO上的有效性。
4.1. Implementation Details
为了评估我们在ImageNet分类上的ECA-Net,我们使用了四个广泛使用的CNN作为骨干模型,包括ResNet-50 [11],ResNet-101 [11],ResNet-512 [11]和MobileNetV2 [28]。为了用我们的ECA训练ResNet,我们在[11,14]中采用了完全相同的数据扩充和超参数设置。具体地,通过随机水平翻转将输入图像随机裁剪到224 224。网络的参数是通过随机梯度下降(SGD)进行优化的,权重衰减为1e-4,动量为0.9,最小批量大小为256。通过将初始学习率设置为0.1,可以在100个epoch内训练所有模型。每30个时代减少10倍。为了用ECA训练MobileNetV2,我们遵循[28]中的设置,其中使用SGD在400个纪元内训练网络,权重衰减为4e-5,动量为0.9,最小批量为96。设定了初始学习率到0.045,并以0.98的线性衰减率减小。为了在验证集上进行测试,首先将输入图像的短边调整为256大小,并使用224 x 224的中心裁剪进行评估。
我们使用Faster R-CNN [26],Mask R-CNN [10]和RetinaNet [22]进一步评估我们在MS COCO上的方法,其中ResNet-50和ResNet-101以及FPN [21]被用作主干模型。 我们使用MMDetection工具包[3]实现所有检测器,并使用默认设置。具体来说,将输入图像的短边调整为800,然后使用权重衰减为1e-4,动量为0.9和最小的SGD优化所有模型 -批大小为8(4个GPU,每个GPU 2个图像)。 学习率被初始化为0.01,并分别在8和11个epoch后降低了10倍。
5. Conclusion
在本文中,我们专注于为模型复杂度较低的深层CNN学习有效的渠道关注度。 为此,我们提出了一种有效的通道注意力(ECA)模块,该模块通过快速的1D卷积生成通道注意力,其内核大小可以通过通道尺寸的非线性映射来自适应确定。 实验结果表明,我们的ECA是一种极其轻巧的即插即用模块,可提高各种深度CNN架构的性能,包括广泛使用的ResNets和轻巧的MobileNetV2。 此外,我们的ECA-Net在对象检测和实例分割任务中表现出良好的概括能力。 将来,我们会将ECA模块应用于更多的CNN架构(例如ResNeXt和Inception [31]),并进一步研究将ECA与空间关注模块的结合。
from numpy import pad
import torch
import torch.nn as nn
import math
"""
ECA注意力机制,和SE注意力主要的区别是避免降维,减少了参数数量的增加。
提出了一种自适应卷积核的1D卷积。在通道之间进行信息交互,获取信息。
步骤:全局平均池化-》1D卷积-》Sigmoid激活-》输出
输入特征图,首先经过全局平均池化,将h和w维度都变成1,只保留channel维度,那么特征图就被拉成长条状,
经过1D卷积,使得每层的channel于相邻层的channel进行信息交互,共享权重。
使用Sigmoid进行处理。
将输入特征图与处理好的特征图权重进行相乘,那么权重就会加在特征图上了。
"""
class ECA(nn.Module):
def __init__(self, channel, gamma=2, b=1):
super(ECA, self).__init__()
# 计算卷积核大小
kernel_size = int(abs((math.log(channel, 2) + b) / gamma))
kernel_size = kernel_size if kernel_size % 2 else kernel_size + 1
# 计算padding
padding = kernel_size // 2
self.avg = nn.AdaptiveAvgPool2d(1)
self.conv = nn.Conv1d(
1, 1, kernel_size=kernel_size, padding=padding, bias=False
)
self.sig = nn.Sigmoid()
def forward(self, x):
b, c, h, w = x.size()
y = self.avg(x).view([b, 1, c])
y = self.conv(y)
y = self.sig(y).view([b, c, 1, 1])
out = x * y
return out
model = ECA(8) #8是输入通道
model = model.cuda()
input = torch.randn(1, 8, 12, 12).cuda()
output = model(input)
print(output.shape) # (1, 8, 12, 12)