当前位置: 首页 > news >正文

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.xdnf.cn/news/1037395.html

相关文章:

  • 破壁虚实的情感科技革命:元晟定义AI陪伴机器人个性化新纪元
  • SpringBoot 自动化部署实战:从环境搭建到 CI/CD 全流程
  • vulnyx Diff3r3ntS3c writeup
  • CLONE:用于长距离任务的闭环全身人形机器人遥操作
  • C++之模板进阶
  • 多线程下 到底是事务内部开启锁 还是先加锁再开启事务?
  • 《人工智能时代与人类价值》读书简要笔记
  • [CVPR 2025] DeformCL:基于可变形中心线的3D血管提取新范式
  • Docker全平台安装指南:从零到一构建容器化环境(满级版)
  • GDI+ 中与GDI32取图形区域函数对比CreateEllipticRgn/CreatePolygonRgn
  • g++ a.cpp -o a ‘pkg-config --cflags --libs opencv4‘/usr/bin/ld: 找不到 没有那个文件或目录
  • [智能客服project] AI提示词配置 | 主协调器 | 闲鱼协议工具
  • PX4无人机|MID360使用FAST_LIO,实现自主定位及定点——PX4无人机配置流程(五)
  • Vue Methods 实现原理详解
  • 【数据集成与ETL 04】dbt实战指南:现代化数据转换与SQL代码管理最佳实践
  • 一个前端正则校验引发的问题
  • 马上行计划管理后端架构
  • 深度分析Javascript中的Promise
  • 动态多目标进化算法:基于迁移学习的动态多目标遗传算法Tr-NSGA-II求解CEC2015,提供完整MATLAB代码
  • python基础与数据类型
  • C# 枚 举(枚举)
  • Python Day51
  • pyspark非安装使用graphframes
  • PHP+mysql雪里开轻量级报修系统 V1.0Beta
  • Laravel 从版本 5 到 12 每个版本都引入了一些新的特性、改进和弃用的功能
  • rt-thread的定时器驱动(裸机版本)记录.
  • Flutter JSON解析全攻略:使用json_serializable实现高效序列化
  • java设计模式[1]之设计模式概览
  • 免费电子印章生成工具,可在线设计印章
  • TLSF 内存分配器