21 - GAM模块

论文《Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions》

1、作用

这篇论文提出了全局注意力机制(Global Attention Mechanism, GAM),旨在通过保留通道和空间方面的信息来增强跨维度交互,从而提升深度神经网络的性能。GAM通过引入3D排列与多层感知器(MLP)用于通道注意力,并辅以卷积空间注意力子模块,提高了图像分类任务的表现。该方法在CIFAR-100和ImageNet-1K数据集上的图像分类任务中均稳定地超越了几种最新的注意力机制,包括在ResNet和轻量级MobileNet模型上的应用。

2、机制

1、通道注意力子模块

利用3D排列保留跨三个维度的信息,并通过两层MLP放大跨维度的通道-空间依赖性。这个子模块通过编码器-解码器结构,以一个缩减比例r(与BAM相同)来实现。

2、空间注意力子模块

为了聚焦空间信息,使用了两个卷积层进行空间信息的融合。同时,为了进一步保留特征图,移除了池化操作。此外,为了避免参数数量显著增加,当应用于ResNet50时,采用了分组卷积与通道混洗。

3、独特优势

1、效率与灵活性

GAM展示了与现有的高效SR方法相比,如IMDN,其模型大小小了3倍,同时实现了可比的性能,展现了在内存使用上的高效性。

2、动态空间调制

通过利用独立学习的多尺度特征表示并动态地进行空间调制,GAM能够高效地聚合特征,提升重建性能,同时保持低计算和存储成本。

3、有效整合局部和非局部特征

GAM通过其层和CCM的结合,有效地整合了局部和非局部特征信息,实现了更精确的图像超分辨率重建。

4、代码

import torch.nn as nn
import torchclass GAM_Attention(nn.Module):def __init__(self, in_channels, rate=4):super(GAM_Attention, self).__init__()# 通道注意力子模块self.channel_attention = nn.Sequential(# 降维,减少参数数量和计算复杂度nn.Linear(in_channels, int(in_channels / rate)),nn.ReLU(inplace=True),  # 非线性激活# 升维,恢复到原始通道数nn.Linear(int(in_channels / rate), in_channels))# 空间注意力子模块self.spatial_attention = nn.Sequential(# 使用7x7卷积核进行空间特征的降维处理nn.Conv2d(in_channels, int(in_channels / rate), kernel_size=7, padding=3),nn.BatchNorm2d(int(in_channels / rate)),  # 批归一化,加速收敛,提升稳定性nn.ReLU(inplace=True),  # 非线性激活# 使用7x7卷积核进行空间特征的升维处理nn.Conv2d(int(in_channels / rate), in_channels, kernel_size=7, padding=3),nn.BatchNorm2d(in_channels)  # 批归一化)def forward(self, x):b, c, h, w = x.shape  # 输入张量的维度信息# 调整张量形状以适配通道注意力处理x_permute = x.permute(0, 2, 3, 1).view(b, -1, c)# 应用通道注意力,并恢复原始张量形状x_att_permute = self.channel_attention(x_permute).view(b, h, w, c)# 生成通道注意力图x_channel_att = x_att_permute.permute(0, 3, 1, 2).sigmoid()# 应用通道注意力图进行特征加权x = x * x_channel_att# 生成空间注意力图并应用进行特征加权x_spatial_att = self.spatial_attention(x).sigmoid()out = x * x_spatial_attreturn out# 示例代码:使用GAM_Attention对一个随机初始化的张量进行处理
if __name__ == '__main__':x = torch.randn(1, 64, 20, 20)  # 随机生成输入张量b, c, h, w = x.shape  # 获取输入张量的维度信息net = GAM_Attention(in_channels=c)  # 实例化GAM_Attention模块y = net(x)  # 通过GAM_Attention模块处理输入张量print(y.shape)  # 打印输出张量的维度信息

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

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

相关文章

Java01--使用IDEA编写运行第一个Java程序HelloWorld

一.先新建一个文件夹存放项目(后续可以推送到Gitee) 二.创建项目 1.打开IDEA,点击首页的新建项目 2.新建空项目并命名,存放路径为步骤一创建的文件夹: 3.在新项目中新建一个src文件夹(用于集中管理文件) 4.在src文件夹…

目标检测相关【清晰易懂】

目标检测相关 (b)是语义分割,(c)是实例分割 目标检测 每个目标一个框标签 实例分割 语义分割 识别每一个目标个体 目标检测基础上进一步提升模型能力有两个方向:实例分割、旋转目标检测。 实例分割 …

强化学习 A2C算法

3.actor-critic方法 3.1 Reinforce 算法,也称为蒙特卡洛策略梯度。蒙特卡洛方差 第一节介绍了DQN 在上一节基于策略的方法中,我们的目标是直接优化策略,而无需使用价值函数。更准确地说,Reinforce 是 基于策略的方法 的一个子类…

关于MCU、MPU、SoC、DSP四大类型芯片

目录 MCU、MPU、SoC、DSP四大类型芯片分析 一、MCU 1、概念 2、特点 3、常见芯片 4、应用场景 二、MPU 1、概念 2、特点 3、常见芯片 4、应用场景 三、SoC 1、概念 2、特点 3、常见芯片 4、应用场景 四、DSP 1、概念 2、特点 3、常见芯片 4、应用场景 MCU、…

【数据结构】图论最短路圣器:Floyd算法如何用双矩阵征服负权图?

最短路径 穿越负权迷雾:Floyd算法如何解锁全图最短路径?​​一、Floyd算法1.1 算法思想1.2 算法逻辑1.3 算法评价1.4 算法限制 二、三种算法对比🌟结语 穿越负权迷雾:Floyd算法如何解锁全图最短路径?​​ 大家好&…

宝塔面板集成阿里云 OSS 备份失败的解决方案

宝塔面板集成阿里云OSS备份失败的解决方案 一、问题背景 在使用宝塔面板配置阿里云OSS云存储备份功能时,用户遇到如下错误: Traceback (most recent call last):File "class/CloudStoraUpload.py", line 144, in __init__from alioss_main import OSSClient as ocFile "…

如何安全高效地维护CMS智能插件?

作为网站开发者或运维人员,你是否经历过这样的场景:满怀期待地点击了插件“更新”按钮,刷新页面后却看到一片刺眼的500错误?或发现网站加载速度从2秒骤降到10秒?智能插件为CMS系统(如WordPress、Drupal、亿…

FastAPI如何用角色权限让Web应用安全又灵活?

title: FastAPI如何用角色权限让Web应用安全又灵活? date: 2025/06/13 05:46:55 updated: 2025/06/13 05:46:55 author: cmdragon excerpt: 基于角色的路由访问控制是Web应用中常见的安全控制模式,通过为用户分配特定角色来管理权限。FastAPI利用依赖注入系统实现权限控制…

利用 SpreadJS 优化表格渲染性能

引言 在当今的数据驱动时代,表格作为一种重要的数据展示和交互方式,广泛应用于各类 Web 应用中。然而,当表格数据量增大或操作复杂度提高时,渲染性能往往会成为一个关键问题。SpreadJS 作为一款功能强大的纯前端电子表格控件&…

状态检查常用SQL

使用MySQL自身命令获取数据库服务状态。 连接数 -- 最大使用连接数 show status like Max_used_connections; -- 系统配置的最大连接数 show global variables like %max_connections; -- 当前打开的连接数 show status like Threads_connected; 缓存 -- 未从缓冲池读取的次…

【Mac 上离线安装 ADB 工具】

✅ 一、步骤总览(离线安装 ADB) 下载 ADB 离线包(zip 文件)解压到一个固定位置(比如 ~/adb)配置环境变量验证安装是否成功 ✅ 二、步骤详情(假设你已经下载好了 zip 文件) &#x1…

什么是数据仓库的ETL

ETL详解:数据整合的核心技术 1. 什么是ETL? ETL(Extract, Transform, Load)是数据仓库和数据分析领域的核心数据处理流程,指从不同数据源**抽取(Extract)数据,经过清洗转换&#x…

数字ic后端设计从入门到精通8(含fusion compiler, tcl教学)ULVTLL、LVT、ULVT详解及应用

LVT vs ULVT vs ULVTLL:从PPA、成本的角度出发 比较维度LVTULVTULVTLL阈值电压(Vth)中等低极低但经过优化减少泄漏开关速度中等快略慢于ULVT但优于LVT驱动能力较低高较高,略低于ULVT漏电流较低高显著低于ULVT动态功耗中等低低静态功耗低高低面积小小略大(因需额外技术减少泄…

Jupyter notebook中的感叹号!魔法命令介绍

背景: 之前用过anaconda conda创建过虚拟环境,也用过venv虚拟环境,也搭建过Jupyter notebook环境,但是今天看到下列的代码,不清楚感叹号代表什么。 如: !python -m venv signlang_env 解答: &a…

mysql 数值函数 介绍

MySQL 提供了多种数值函数,用于处理和操作数值数据。以下是一些常见的 MySQL 数值函数的介绍和使用示例: 1. ABS() 功能:返回一个数值的绝对值。语法:ABS(number)示例: SELECT ABS(-5); -- 输出: 5 2. …

HBase 安装与简单操作指南

一、安装前准备 1. 系统要求 Java 1.8+Hadoop 2.x/3.x (已配置并运行,伪分布式或全分布式)SSH 免密登录配置完成确保系统主机名解析正确2. 下载 HBase 最新稳定版下载地址: wget https://downloads.apache.org/hbase/2.4.11/hbase-2.4.11-bin.tar.gz 二、安装步骤 1. 解…

OpenCV CUDA模块设备层-----用于CUDA 纹理内存(Texture Memory)的封装类cv::cudev::Texture

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cudev::Texture 是 OpenCV CUDA 模块(opencv_cudaimgproc)中用于 CUDA 纹理内存(Texture Memory&#xf…

自主学习-《Self-Adapting Language Models》

代码: https://jyopari.github.io/posts/seal 拟人比喻: 学生把备考的东西,以自己的方式记成笔记精华,更有利于他的理解和记忆。 背景: Self-improving: 本文: 输入外界知识,LLM将其整理为笔记(…

马上行计划管理后端架构

小程序日活未破万低成本高可用及滚动发版实战。 小程序已经积累很多用户了,高可用及滚动发布已经提上日程。 日活未破万,选购多台多家云服务器或者自建机房搭建k8s(Kubernetes),成本显然有点太高了。因此取了折中的办法本地和云端服务同时启…

C++---类和对象(上)

1.类的定义 1.1类定义格式 首先我们引入一个新的关键字-----class,class定义一个类。 定义方法 跟我们之前定义结构体非常的像 那我们来简单的看一个类的定义 我们C语言实现的时候,结构体和函数是分离的。但是现在不需要,我可以直接写 …