SE注意力机制详解:从原理到应用,全面解析Squeeze-and-Excitation模块

Squeeze-and-Excitation (SE) 模块的原理与应用

1. 引言:注意力机制的意义

在深度学习领域,注意力机制(Attention Mechanism)通过模拟人类视觉的“聚焦”特性,赋予模型动态调整特征重要性的能力。传统卷积神经网络(CNN)通常平等对待所有通道和空间位置的特征,而Squeeze-and-Excitation(SE)注意力模块的提出,首次将通道注意力机制系统化,成为提升模型性能的关键技术之一。

SE模块通过显式建模通道间的依赖关系,使网络能够自适应地增强重要特征,抑制冗余信息。该模块广泛应用于图像分类、目标检测等任务中,取得了显著的性能提升。

2. SE模块的核心原理

SE模块由三个核心操作组成:Squeeze(压缩)Excitation(激励)Scale(重标定)。其结构如下图所示:

2.1 Squeeze操作:全局特征压缩

输入特征图的尺寸为 H×W×CH \times W \times C,Squeeze操作通过**全局平均池化(Global Average Pooling, GAP)**将每个通道的二维空间信息压缩为一个标量:

zc=1H×W∑i=1H∑j=1Wxc(i,j)z_c = \frac{1}{H \times W} \sum_{i=1}^H \sum_{j=1}^W x_c(i,j)

此操作将特征图从 H×W×CH \times W \times C 压缩为 1×1×C1 \times 1 \times C,从而捕获通道的全局分布信息。

2.2 Excitation操作:通道权重学习

通过两个全连接层(FC)学习通道间的非线性关系:

s=σ(W2⋅δ(W1⋅z))s = \sigma(W_2 \cdot \delta(W_1 \cdot z))

其中:

  • W1∈RC/r×CW_1 \in \mathbb{R}^{C/r \times C} 为降维矩阵(rr 为压缩比)
  • δ\delta 为ReLU激活函数
  • W2∈RC×C/rW_2 \in \mathbb{R}^{C \times C/r} 为升维矩阵
  • σ\sigma 为Sigmoid函数,输出权重值 s∈[0,1]Cs \in [0,1]^C

2.3 Scale操作:特征重标定

将学习到的通道权重 ss 与原始特征图逐通道相乘,完成特征重标定:

x^c=sc⋅xc\hat{x}_c = s_c \cdot x_c

最终输出 X^\hat{X} 的尺寸仍为 H×W×CH \times W \times C,但每个通道的重要性被动态调整。

3. SE模块的数学建模与实现细节

3.1 压缩比(Reduction Ratio)

参数 rr 控制中间层的维度缩减比例,通常取 r=16r=16。较小的 rr 会增加计算量,但可能提升性能,需通过实验权衡。

3.2 轻量化设计

SE模块的参数量仅为:

2C2r+C\frac{2C^2}{r} + C

例如,当 C=512C=512、r=16r=16 时,参数量为 33,79233,792,远低于全连接层的开销。

4. SE模块的即插即用特性

SE模块可无缝集成到现有网络架构中,以下为典型应用案例:

4.1 SE-Inception模块

在Inception模块的输出端添加SE模块,结构如下:

4.2 SE-ResNet模块

在ResNet的残差分支末端插入SE模块:

Input → 卷积层 → SE模块 → 残差连接 → Output

5. SE模块的代码实现(PyTorch示例)

import torch
import torch.nn as nnclass SEBlock(nn.Module):def __init__(self, channel, reduction=16):super(SEBlock, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Sequential(nn.Linear(channel, channel // reduction),nn.ReLU(inplace=True),nn.Linear(channel // reduction, channel),nn.Sigmoid())def forward(self, x):b, c, _, _ = x.size()y = self.avg_pool(x).view(b, c)y = self.fc(y).view(b, c, 1, 1)return x * y.expand_as(x)# 集成到ResNet的Bottleneck
class SEBottleneck(nn.Module):def __init__(self, in_channels, out_channels, stride=1, reduction=16):super(SEBottleneck, self).__init__()self.conv_layers = nn.Sequential(nn.Conv2d(in_channels, out_channels//4, 1),nn.BatchNorm2d(out_channels//4),nn.ReLU(),nn.Conv2d(out_channels//4, out_channels//4, 3, stride=stride, padding=1),nn.BatchNorm2d(out_channels//4),nn.ReLU(),nn.Conv2d(out_channels//4, out_channels, 1),nn.BatchNorm2d(out_channels),SEBlock(out_channels, reduction)  # 插入SE模块)self.shortcut = nn.Sequential()if stride != 1 or in_channels != out_channels:self.shortcut = nn.Sequential(nn.Conv2d(in_channels, out_channels, 1, stride=stride),nn.BatchNorm2d(out_channels))def forward(self, x):out = self.conv_layers(x)out += self.shortcut(x)return nn.ReLU()(out)

6. SE模块的优势与局限性

6.1 优势

  • 性能提升:在ImageNet上,SE-ResNet-50的Top-1错误率降低1.5%。
  • 轻量化:参数量增加不到1%,计算量仅提升约2%。
  • 即插即用:无需修改网络主体结构,兼容各类CNN。

6.2 局限性

  • 通道独立性假设:未显式建模空间维度关系。
  • 大模型压缩效果有限:在参数量过亿的模型中增益较小。

7. 实验效果与性能分析

模型          参数量(M)Top-1错误率(%)
ResNet-50      25.6      23.85
SE-ResNet-50  28.1      22.28
ResNet-101    44.5      21.75
SE-ResNet-101  49.3      20.79

实验表明,SE模块在参数量小幅增加的情况下,显著提升模型精度。

8. SE模块的应用场景扩展

  • 医学影像分割:增强病灶区域的特征响应。
  • 视频动作识别:结合时序注意力提升关键帧权重。
  • 轻量化网络设计:在MobileNetV3中作为核心组件。

9. 与其他注意力机制的对比

机制      关注维度      计算开销典型应用      
SE        通道          低      分类、检测      
CBAM      通道+空间    中      目标检测        
Non-Local全局时空关系  高      视频理解        

10. 总结与未来展望

SE模块通过简单而有效的通道注意力机制,为CNN赋予了动态特征选择能力。未来方向包括:

  • 多维注意力融合:结合空间、通道、时间维度。
  • 自适应压缩比:动态调整 rr 提升效率。
  • 跨模态扩展:应用于多模态任务(如图文检索)。

参考文献

  1. Hu J, et al. "Squeeze-and-Excitation Networks." CVPR 2018.
  2. 官方代码库

:https://github.com/hujie-frank/SENet


总结:通过本文的全面解析,旨在深入理解SE注意力机制的设计思想,并掌握其在实际任务中的应用方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896444.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础大全:Python变量详解

以下是 Python 变量的详细解析: 1. 变量的本质 Python 变量本质上是一个 指向对象的引用(类似标签),而不是存储数据的容器。 变量赋值 a 10 时,Python 会创建一个整数对象 10,然后让变量 a 指向这个对象…

减少内存占用的两种方法|torch.no_grad和disable_torch_init

方法区别 在 PyTorch 中,disable_torch_init 和 torch.no_grad() 是两种完全不同的机制,它们的作用和目的不同,以下是它们的区别: 1. disable_torch_init 作用:disable_torch_init 通常用于某些特定的框架或库中&am…

数据挖掘工程师的技术图谱和学习路径

数据挖掘工程师的技术图谱和学习路径: 1.基础知识 数据挖掘工程师是负责从大量数据中发现潜在模式、趋势和规律的专业人士。以下是数据挖掘工程师需要掌握的基础知识: 数据库知识:熟悉关系数据库和非关系数据库的基本概念和操作,掌握SQL语言。 统计学基础:了解统计学的基…

UE5 Computer Shader学习笔记

首先这里是绑定.usf文件的路径,并声明是用声明着色器 上面就是对应的usf文件路径,在第一张图进行链接 Shader Frequency 的作用 Shader Frequency 是 Unreal Engine 中用于描述着色器类型和其执行阶段的分类。常见的 Shader Frequency 包括&#xff1a…

提示学习(Prompting)

提示学习(Prompting)是一种利用预训练语言模型(Pre-trained Language Models, PLMs)来完成特定任务的方法。它的核心思想是通过设计特定的提示(Prompt),将任务转化为预训练模型能够理解的形式&a…

解决单元测试 mock final类报错

文章目录 前言解决单元测试 mock final类报错1. 报错原因2. 解决方案3. 示例demo4. 扩展 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0…

2025系统架构师(一考就过):案例之三:架构风格总结

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式,按照软件架构风格,物联网系统属于( )软件架构风格。 A:层次型 B:事件系统 C:数据线 D:C2 答案:A 解析: 物联网分为多个层次&#xff0…

数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全

信息化高速发展,数据已成为企业的核心资产,驱动着业务决策、创新与市场竞争力。随着数据开发利用不断深入,常态化的数据流通不仅促进了信息的快速传递与共享,还能帮助企业快速响应市场变化,把握商业机遇,实…

Docker数据卷操作实战

什么是数据卷 数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷 可以在容器之间共享和享用对 数据卷 的修改立马生效对 数据卷 的更新,不会影响镜像数据卷 默认会一直存在,即时容器被…

kafka stream对比flink

Kafka Streams 和 Apache Flink 虽然都支持实时计算,但它们的定位、架构和适用场景存在显著差异。选择哪一个取决于具体的需求、场景和技术栈。以下是两者的核心区别和适用场景分析: 1. 定位与架构差异 Kafka Streams 定位:轻量级库&#x…

二叉树的先序、中序和后序 【刷题反思】

1. 已知中序和后序,求前序 1.1 题目 题目描述:给一棵二叉树的中序和后序排列,求它的先序排列。 输入描述:共两行,均为大写字母组成的字符串,分别表示一棵二叉树的中序和后序 输入:BADC BDCA…

华宇TAS应用中间件与统信最新版本操作系统完成兼容互认证

近日,华宇TAS应用中间件与统信服务器操作系统经过技术迭代与优化,在原先UOS V20的基础上完成了UOS V25的兼容互认证。此次认证涵盖了众多主流的国产CPU平台,包括鲲鹏920、飞腾FT2000/64、飞腾腾云S2500等。 经过严格测试,双方产品…

Docker 搭建 Redis 数据库

Docker 搭建 Redis 数据库 前言一、准备工作二、创建 Redis 容器的目录结构三、启动 Redis 容器1. 通过 redis.conf 配置文件设置密码2. 通过 Docker 命令中的 requirepass 参数设置密码 四、Host 网络模式与 Port 映射模式五、检查 Redis 容器状态六、访问 Redis 服务总结 前言…

35. Spring Boot 2.1.3.RELEASE 应用监控【监控信息可视化】

在 Spring Boot 2.1.3.RELEASE 中实现监控信息可视化可以通过多种方式,下面为你详细介绍使用 Spring Boot Actuator 结合 Grafana 和 Prometheus 以及使用 Spring Boot Admin 这两种常见方法。 方法一:Spring Boot Actuator Grafana Prometheus 1. 添…

服务器间迁移conda环境

注意:可使用迁移miniconda文件 or 迁移yaml文件两种方式,推荐前者,基本无bug! 一、迁移miniconda文件: 拷贝旧机器的miniconda文件文件到新机器: 内网拷贝:scp -r mazhf192.168.1.233:~/miniconda3 ~/ 外…

在VSCode中安装jupyter跑.ipynb格式文件

个人用vs用的较多,不习惯在浏览器单独打开jupyter,看着不舒服,直接上教程。 1、在你的环境中pip install ipykernel 2、在vscode的插件中安装jupyter扩展 3、安装扩展后,打开一个ipynb文件,并且在页面右上角配置内核 …

20250223下载并制作RTX2080Ti显卡的显存的测试工具mats

20250223下载并制作RTX2080Ti显卡的显存的测试工具mats 2025/2/23 23:23 缘起:我使用X99的主板,使用二手的RTX2080Ti显卡【显存22GB版本,准备学习AI的】 但是半年后发现看大码率的视频容易花屏,最初以为是WIN10经常更换显卡/来回更…

WordPress R+L Carrier Edition sql注入漏洞复现(CVE-2024-13481)(附脚本)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…

深入了解 NAT 模式:网络地址转换的奥秘

深入了解 NAT 模式:网络地址转换的奥秘 在计算机网络的世界里,NAT 模式(Network Address Translation,网络地址转换)扮演着至关重要的角色。它就像是网络中的翻译官,在不同网络地址之间进行转换&#xff0…

Git版本控制系统---本地操作(万字详解!)

目录 git基本配置 认识工作区、暂存区、版本库 添加文件--情况一: 添加文件-情况二: 修改文件: 版本回退: git基本配置 1.初始化本地仓库,注意:一定要在一个目录下进行,一般都是新建一个文件夹,在文件…