SE注意力
SE注意力
·
本文旨在分享一种通道注意力
通道注意力(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
更多推荐



所有评论(0)