本文旨在分享一种通道注意力

        通道注意力(Channel Attention)是一种在深度学习中使用的机制,主要用于提升神经网络对特征的选择性关注。在卷积神经网络(CNN)等模型中,特征图的不同通道可能包含不同的重要信息。通道注意力机制通过为每个通道分配不同的权重,来增强网络对重要特征的关注,同时抑制不重要的特征。

        通道通常指的是特征图中的一个维度,用于表示输入数据的不同特征。例如,在图像处理中,每个颜色通道(如红色、绿色和蓝色)代表图像的不同颜色信息。在生理信号处理中,每个导联可代表一个通道。

具体来讲:

最后一届ImageNet冠军模型:挤压-激励网络Squeeze-and-Excitation Networks

开源链接:GitHub - hujie-frank/SENet: Squeeze-and-Excitation Networks

参考论文:Hu, Jie , et al. "Squeeze-and-Excitation Networks." IEEE Transactions on Pattern Analysis and Machine Intelligence PP.99(2017).

import torch
import torch.nn as nn

class SEBlock(nn.Module):
    def __init__(self, channels, reduction=16):
        super(SEBlock, self).__init__()
        # Squeeze:全局平均池化,得到每个通道的全局信息
        self.global_avg_pool = nn.AdaptiveAvgPool2d(1)  
        # Excitation:通过两个全连接层进行特征压缩和扩展
        self.fc1 = nn.Linear(channels, channels // reduction, bias=False)
        self.relu = nn.ReLU(inplace=True)
        self.fc2 = nn.Linear(channels // reduction, channels, bias=False)
        self.sigmoid = nn.Sigmoid()  # 输出每个通道的权重

    def forward(self, x):
        batch_size, channels, _, _ = x.size()
        # 1. Squeeze:全局平均池化,输出形状 [batch_size, channels, 1, 1]
        y = self.global_avg_pool(x).view(batch_size, channels)
        # 2. Excitation:通过两个全连接层映射到原通道数,并用 Sigmoid 激活
        y = self.fc1(y)
        y = self.relu(y)
        y = self.fc2(y)
        y = self.sigmoid(y).view(batch_size, channels, 1, 1)
        # 3. 通道加权:原始输入与注意力权重逐元素相乘
        return x * y

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐