能看各种网站的浏览器,wordpress 付费阅读,网站商场系统软件,天猫电商平台论文《Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions》
1、作用
这篇论文提出了全局注意力机制#xff08;Global Attention Mechanism, GAM#xff09;#xff0c;旨在通过保留通道和空间方面的信息来增强跨维度交互#xf…论文《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, rate4):super(GAM_Attention, self).__init__()# 通道注意力子模块self.channel_attention nn.Sequential(# 降维减少参数数量和计算复杂度nn.Linear(in_channels, int(in_channels / rate)),nn.ReLU(inplaceTrue), # 非线性激活# 升维恢复到原始通道数nn.Linear(int(in_channels / rate), in_channels))# 空间注意力子模块self.spatial_attention nn.Sequential(# 使用7x7卷积核进行空间特征的降维处理nn.Conv2d(in_channels, int(in_channels / rate), kernel_size7, padding3),nn.BatchNorm2d(int(in_channels / rate)), # 批归一化加速收敛提升稳定性nn.ReLU(inplaceTrue), # 非线性激活# 使用7x7卷积核进行空间特征的升维处理nn.Conv2d(int(in_channels / rate), in_channels, kernel_size7, padding3),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_channelsc) # 实例化GAM_Attention模块y net(x) # 通过GAM_Attention模块处理输入张量print(y.shape) # 打印输出张量的维度信息