通道注意子模块使用3D排列来跨三个维度保留信息。然后,它使用两层MLP (多层感知器) 放大跨维度的通道空间依赖性。(MLP是编码器-解码器结构,其缩减比为r,与BAM相同。)
在空间注意子模块中,为了关注空间信息,我们使用两个卷积层进行空间信息融合。我们也使用来自频道注意子模块的相同缩减比例r,与BAM相同。同时,最大池减少了信息,并产生了负面影响。我们删除了池化以进一步保留特征图。因此,空间注意模块有时会显著增加参数的数量。为了防止参数的显着增加,我们在resnet50中采用具有通道shuffle的组卷积 (Zhang等 [2018])。图3中示出了没有组卷积的空间注意子模块。
import torch.nn as nn
import torch
class GAM_Attention(nn.Module):
def __init__(self, in_channels, out_channels, rate=4):
super(GAM_Attention, self).__init__()
self.channel_attention = nn.Sequential(
nn.Linear(in_channels, int(in_channels / rate)),
nn.ReLU(inplace