SE 注意力模块 原理分析与代码实现

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本文介绍SE注意力模块,它是在SENet中提出的,SENet是ImageNet 2017的冠军模型;SE模块常常被用于CV模型中,能较有效提取模型精度,所以给大家介绍一下它的原理,设计思路,代码实现,如何应用在模型中。

 一、SE 注意力模块

SE 注意力模块,它是一种通道注意力模块;常常被应用与视觉模型中。即插即用,是指通过它能对输入特征图进行通道特征加强,而且最终SE模块输出,不改变输入特征图的大小。

    • 首先解释一下SE的含义,S是指Squeeze,压缩的意思;把输入特征图中的空间信息进行压缩。
    • E是指Excitation,激励的意思;学习到的通道注意力信息,与输入特征图进行结合,最终得到具有通道注意力的特征图。

    下面分析一下,SE是如何实现通道注意力的;首先看一下,模块的结构:

    image.gif编辑

    它主要由两部分组成,压缩、激励;模型的流程思路如下:

      1. 首先输入特征图,它的维度是H*W*C;
      2. 对输入特征图进行空间特征压缩;实现:在空间维度,实现全局平均池化,得到1*1*C的特征图;
      3. 对压缩后的特征图,进行通道特征学习;实现:通过FC全连接层操作学习,得到具有通道注意力的特征图,它的维度还是1*1*C;
      4. 最后将通道注意力的特征图1*1*C、原始输入特征图H*W*C,进行逐通道乘以权重系数,最终输出具有通道注意力的特征图;

      其中,在FC全连接层学习通道注意力信息中,是对每个通道的重要性进行预测,得到不同channel的重要性大小后再作用。

      备注: SE模块的出处论文:https://arxiv.org/abs/1709.01507?utm_source=ld246.com

      注意力机制的实现思路:

        • 通常,对特征图进行通道注意力操作,首先对特征图的空间维度进行压缩,然后学习不同通道的重要性;
        • 对特征图进行空间注意力操作,首先对特征图的通道维度进行压缩,然后学习不同空间部位的重要性;


        二、代码实现

        实现SE模块的代码前,首先看一下,它是的流程结构,这里以resnet为基础实现的:

        image.gif

        基于pytorch版本的代码如下:

        class se_block(nn.Module):
            def __init__(self,channels,ratio=16):
                super(SE, self).__init__()
                # 空间信息进行压缩
                self.avgpool=nn.AdaptiveAvgPool2d(1)
                # 经过两次全连接层,学习不同通道的重要性
                self.fc=nn.Sequential(
                    nn.Linear(channels,channels//ratio,False),
                    nn.ReLU(),
                    nn.Linear(channels//ratio, channels, False),
                    nn.Sigmoid()
                )
            def forward(self,x):
                b,c,_,_ = x.size() #取出batch size和通道数
                # b,c,w,h->b,c,1,1->b,c 压缩与通道信息学习
                avg = self.avgpool(x).view(b,c)
                #b,c->b,c->b,c,1,1 激励操作
                y = self.fc(avg).view(b,c,1,1) 
                return x * y.expand_as(x)

        image.gif


        三、SE应用在模型中

        SE模块常常被用于CV模型中,能较有效提取模型精度;它是即插即用,是指通过它能对输入特征图进行通道特征加强,而且最终SE模块输出,不改变输入特征图的大小。

        应用示例1:

        在主干网络(Backbone)中,加入SE模块,加强通道特征,提高模型性能;

        应用示例2:

        在主干网络(Backbone)末尾,加入SE模型,加强整体的通道特征,提高模型性能;

        应用实例3:

        在多尺度特征分支中,加入SE模块,加强加强通道特征,提高模型性能。

        总体评价:通常,SE模块能提升模型的精度;但速度会下降一点,毕竟它有FC全连接层。

        本文只供大家参考与学习,谢谢~

        后面还会介绍其它注意力模型:SK-Nets、CBAM、DANet、ECA-Net、CA等注意力模块。

        相关实践学习
        【文生图】一键部署Stable Diffusion基于函数计算
        本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
        建立 Serverless 思维
        本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
        相关文章
        |
        8月前
        |
        机器学习/深度学习 自然语言处理 并行计算
        Self-Attention 原理与代码实现
        Self-Attention 原理与代码实现
        389 0
        |
        8月前
        |
        机器学习/深度学习 关系型数据库 MySQL
        大模型中常用的注意力机制GQA详解以及Pytorch代码实现
        GQA是一种结合MQA和MHA优点的注意力机制,旨在保持MQA的速度并提供MHA的精度。它将查询头分成组,每组共享键和值。通过Pytorch和einops库,可以简洁实现这一概念。GQA在保持高效性的同时接近MHA的性能,是高负载系统优化的有力工具。相关论文和非官方Pytorch实现可进一步探究。
        964 4
        |
        8天前
        |
        机器学习/深度学习 自然语言处理 搜索推荐
        自注意力机制全解析:从原理到计算细节,一文尽览!
        自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
        |
        3月前
        |
        机器学习/深度学习 人工智能 文字识别
        ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
        本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
        3468 0
        |
        7月前
        |
        测试技术 计算机视觉
        【YOLOv8改进】LSKA(Large Separable Kernel Attention):大核分离卷积注意力模块 (论文笔记+引入代码)
        YOLO目标检测专栏介绍了大可分卷积核注意力模块LSKA,用于解决VAN中大卷积核效率问题。LSKA通过分解2D卷积为1D卷积降低计算复杂度和内存占用,且使模型关注形状而非纹理,提高鲁棒性。在多种任务和数据集上,LSKA表现优于ViTs和ConvNeXt,代码可在GitHub获取。基础原理包括LSKA的卷积核分解设计和计算效率优化。示例展示了LSKA模块的实现。更多详情及配置参见相关链接。
        |
        7月前
        |
        机器学习/深度学习 计算机视觉
        YOLOv5改进 | 卷积模块 | 将Conv替换为轻量化的GSConv【原理 + 完整代码】
        在这个教程中,作者介绍了如何将YOLOv5中的Conv模块替换为新型轻量级卷积GSConv,以实现模型瘦身并保持准确性。GSConv结合了分组卷积和空间卷积,减少了计算量。文章详细阐述了GSConv的原理,并提供了添加GSConv到YOLOv5的代码实现步骤。此外,还提到了Slim-neck by GSConv技术,它通过通道压缩和高效连接优化网络结构。读者可以获取完整代码进行实践,适用于资源受限的环境,如移动设备和实时应用。
        |
        7月前
        |
        机器学习/深度学习 计算机视觉 知识图谱
        【YOLOv8改进】STA(Super Token Attention) 超级令牌注意力机制 (论文笔记+引入代码)
        该专栏探讨YOLO目标检测的创新改进和实战应用,介绍了使用视觉Transformer的新方法。为解决Transformer在浅层处理局部特征时的冗余问题,提出了超级令牌(Super Tokens)和超级令牌注意力(STA)机制,旨在高效建模全局上下文。通过稀疏关联学习和自注意力处理,STA降低了计算复杂度,提升了全局依赖的捕获效率。由此构建的层次化视觉Transformer在ImageNet-1K、COCO检测和ADE20K语义分割任务上展现出优秀性能。此外,文章提供了YOLOv8中实现STA的代码示例。更多详细信息和配置可在相关链接中找到。
        |
        7月前
        |
        机器学习/深度学习 编解码 算法
        【YOLOv8改进】MLCA(Mixed local channel attention):混合局部通道注意力(论文笔记+引入代码)
        **摘要:** 本文提出轻量级MLCA模块,结合通道、空间、局部及全局信息,提升网络表达效率。在MobileNet-Attention-YOLO(MAY)中应用MLCA,于PASCAL VOC和SMID数据集上对比SE和CA,mAP提升1.0%和1.5%。论文及代码链接提供。MLCA通过局部池化和反池化处理,增强通道交互和空间信息,实现更精确的目标检测。详情见YOLO改进与实战专栏。
        |
        7月前
        |
        计算机视觉 机器学习/深度学习 自然语言处理
        【YOLOv8改进】CoTAttention:上下文转换器注意力(论文笔记+引入代码)
        本文介绍了YOLO目标检测的创新改进,提出了一种名为Contextual Transformer (CoT)块的新型Transformer模块,用于增强视觉识别能力。CoT块通过3×3卷积编码上下文信息,并结合动态多头注意力矩阵,提高了视觉表示。此外,还提到了Large Separable Kernel Attention (LSKA)模块,它解决了大内核卷积的计算效率问题。CoTNet是基于CoT模块的Transformer风格骨干网络,可替代ResNet中的3×3卷积。CoTAttention类展示了如何在YOLOv8中集成此模块。文章还提供了源码链接和更多实战案例详情。
        |
        8月前
        |
        机器学习/深度学习 存储 算法
        注意力机制(一)(基本思想)
        在注意力机制论文 Attention Is All You Need 中最苦恼大家的肯定是K、Q、V三个变量的含义 翻阅了CSDN、知乎大量文章后,我发现没有文章能够带大家对注意力机制建立直观的认识 大部分文章要么没有从初学者的角度出发介绍的是注意力机制上层应用,要么其作者自己也并没有真正理解注意力机制所以讲的不清不楚 所以在看完《动手学深度学习(pytorch版)》、Attention Is All You Need 论文、以及大量文章后,我开始动手写这篇专门为初学者的介绍注意力机制的文章 权