即插即用高效通道注意力机制ECA,涨点起飞起飞了!

文摘   2024-12-23 17:20   上海  

论文介绍

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

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

QQ深度学习交流群:719278780

扫描下方二维码,加入深度学习论文指南星球!

加入即可获得,模块缝合、制作、写作技巧,学会“结构”创新、“创新点”创新,从三区到顶会,小论文大论文,毕业一站式服务

创新点

  • 避免通道降维
    本文通过对SENet的通道注意力模块进行剖析,发现通道降维会影响通道注意力的预测效果。因此,提出的ECA模块摒弃了通道降维,同时引入了一种局部的跨通道交互策略,从而减少了复杂度,提升了效率和效果。

  • 局部跨通道交互
    ECA模块通过基于1D卷积的方式实现跨通道交互。通过自适应地选择卷积核的大小(kernel size),该方法在保证高效性的同时,捕捉到了足够的通道间依赖性。

  • 自适应核大小选择
    提出了根据通道数量自适应地确定1D卷积核大小的非线性映射方法,避免了手动调整参数,提高了模型的鲁棒性和适应性。

  • 轻量化和高效性
    与现有的注意力模块(如SENet、CBAM等)相比,ECA模块在引入极少参数和计算量的基础上,仍然显著提升了模型的性能。例如,在ResNet-50的基础上,ECA模块只增加了80个参数和4.7e-4 GFLOPs,但提升了超过2%的Top-1准确率。

  • 通用性和广泛适用性
    ECA模块可作为轻量化的插件,适用于多种CNN架构(包括ResNet和MobileNetV2等),并在图像分类、目标检测和实例分割任务中取得了优异表现。

方法

整体架构

      ECA-Net通过在传统卷积神经网络(CNN)中集成高效的ECA模块(Efficient Channel Attention Module)来增强通道注意力机制。ECA模块使用全局平均池化提取每个通道的全局特征,采用1D卷积进行局部跨通道交互,并通过自适应选择卷积核大小来平衡性能和复杂度。生成的通道权重通过Sigmoid激活对特征进行加权校准,使模型在分类、检测和分割任务中取得了显著的性能提升,同时保持极低的计算开销和参数增加。

ECA模块的核心设计体现在以下几点:

  1. 全局平均池化 (Global Average Pooling)

  • 将每个通道的空间信息聚合为一个全局特征值,表示该通道的全局信息。

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

    • 使用1D卷积操作来进行局部通道之间的交互。1D卷积的核大小 kk 是自适应的,根据通道数 CC 通过一个非线性函数确定:k=nearest odd(log2(C)/γ+b),k = \text{nearest odd}(\log_2(C)/\gamma + b),其中,γ\gamma 和 bb 是可调超参数,文中设定为2和1。

  • Sigmoid激活函数

    • 将经过1D卷积生成的注意力权重通过Sigmoid函数归一化,以生成通道权重。

  • 通道加权 (Channel Recalibration)

    • 使用生成的通道权重对原始特征进行加权,重新校准每个通道的权重以增强模型的特征表达能力。

    即插即用模块作用

    ECA 作为一个即插即用模块

    (1)提升通道注意力建模能力

    ECA模块通过局部跨通道交互(1D卷积)捕获通道之间的依赖关系,而不增加模型复杂度,使模型能够更有效地选择重要特征。

    (2)增强特征表达能力

    通过校准每个通道的重要性权重,ECA模块能够:

    • 强调重要特征通道;

    • 抑制无关或冗余特征,从而提升特征的表达能力。

    (3)提高任务性能

    实验表明,ECA模块能够在多种任务中显著提升性能:

    • 图像分类任务中,ECA模块可使Top-1准确率提升超过2%(以ResNet-50为例)。

    • 目标检测任务中,ECA模块尤其对小目标检测效果提升显著(如MS COCO数据集中的APS指标)。

    • 实例分割任务中,ECA模块提升了对细粒度目标的分割精度。

    (4)保持高效性

    ECA模块通过避免通道降维和引入自适应卷积核大小,减少了不必要的计算,保证了在提升性能的同时不会增加显著的计算开销。

    消融实验结果

    • 内容:表2展示了不同设计选择(是否降维、是否包含跨通道交互等)对模型性能(Top-1和Top-5准确率)的影响。

    • 说明

      • 避免降维更有效:不进行通道降维的变体(如SE-Var2和SE-Var3)性能优于采用降维的SENet。

      • 跨通道交互的重要性:包含跨通道交互(如SE-Var3)比不包含交互的模型(如SE-Var2)性能更好。

      • ECA模块的优势:ECA模块以最低的模型复杂度实现了接近甚至超过SE-Var3的性能。


    • 内容:表3对比了不同注意力机制(如SENet、CBAM、A2-Nets、GCNet、ECA)在分类任务中的性能、参数量、计算量(FLOPs)以及训练和推理速度。

    • 说明

      • 性能与效率的平衡:ECA-Net在引入极少额外参数的情况下,显著提升了Top-1和Top-5准确率,且训练和推理速度接近原始ResNet。

      • 优于其他方法:ECA模块比SENet、CBAM等模块更轻量化,同时在性能上表现优异。

    即插即用模块

    import numpy as np
    import torch
    from torch import nn
    from torch.nn import init
    from collections import OrderedDict

    # 论文地址:https://arxiv.org/pdf/1910.03151
    # 论文:ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
    class ECAAttention(nn.Module):

        def __init__(self, kernel_size=3):
            super().__init__()
            self.gap=nn.AdaptiveAvgPool2d(1)
            self.conv=nn.Conv1d(1,1,kernel_size=kernel_size,padding=(kernel_size-1)//2)
            self.sigmoid=nn.Sigmoid()

        def init_weights(self):
            for m in self.modules():
                if isinstance(m, nn.Conv2d):
                    init.kaiming_normal_(m.weight, mode='fan_out')
                    if m.bias is not None:
                        init.constant_(m.bias, 0)
                elif isinstance(m, nn.BatchNorm2d):
                    init.constant_(m.weight, 1)
                    init.constant_(m.bias, 0)
                elif isinstance(m, nn.Linear):
                    init.normal_(m.weight, std=0.001)
                    if m.bias is not None:
                        init.constant_(m.bias, 0)

        def forward(self, x):
            y=self.gap(x) #bs,c,1,1
            y=y.squeeze(-1).permute(0,2,1) #bs,1,c
            y=self.conv(y) #bs,1,c
            y=self.sigmoid(y) #bs,1,c
            y=y.permute(0,2,1).unsqueeze(-1) #bs,c,1,1
            return x*y.expand_as(x)
           
    if __name__ == '__main__':
        input=torch.randn(50,512,7,7)
        block = ECAAttention(kernel_size=3)
        output=block(input)    print(output.shape)

    便捷下载方式

    浏览打开网址:https://github.com/ai-dawang/PlugNPlay-Modules

    更多分析可见原文


    ai缝合大王
    聚焦AI前沿,分享相关技术、论文,研究生自救指南
     最新文章