通道注意力机制SEblock

对于任何给定的变换,例如卷积或一组卷积操作,都可以添加一个相应的挤压和激励模块(Squeeze-and-Excitation block)[14] 用于重新校准特征。

如图1所示,特征U首先经过一次挤压(squeeze)操作,通过在空间维度上整合特征图的方式,生成一个通道描述符。该描述符中嵌入了通道特征响应的全局分布,目的在于帮助网络更低层利用来自全局感受野的信息。之后进行一次激励(exciation)操作,通过基于通道间依赖性的自门限机制(self-gating mechanism)来考察各通道间的依赖程度。当两次操作完成后,重新加权的特征图作为SE模块的输出进入到后续层中参与训练。

图1 挤压和激励模块(SE block)

### SEBlock 注意力机制原理 SENet(Squeeze-and-Excitation Networks)引入了一种称为 SEBlock注意力机制,专门用于增强网络对不同特征通道之间重要性的感知能力。这种机制通过重新校准通道权重来突出重要的特征并抑制不那么有用的特征。 具体来说,SEBlock 包含两个主要操作:挤压(squeeze)和激励(excitation)。在挤压阶段,全局平均池化被用来压缩每个通道的空间尺寸到单个数值,从而获得各个通道的重要性描述向量[^1]。这一过程有效地捕捉到了整个图像上的信息汇总。 接着,在激励阶段,这些描述符会经过两层全连接神经元处理——首先是降维映射以减少参数数量;其次是升维恢复至原始通道数,并应用激活函数(通常是 Sigmoid 函数),生成最终的通道注意力系数矩阵。此矩阵中的每一个元素代表对应位置处输入张量相应通道应赋予多少重视程度的信息[^2]。 最后一步是将得到的关注度图乘回原来的特征图上,使得模型能够更加专注于那些对于当前任务更有价值的部分。 ### 实现代码示例 以下是 Python 中基于 PyTorch 框架的一个简单版本 SEBlock 的实现: ```python import torch.nn as nn import torch class SELayer(nn.Module): def __init__(self, channel, reduction=16): super(SELayer, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channel, channel // reduction, bias=False), nn.ReLU(inplace=True), nn.Linear(channel // reduction, channel, bias=False), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x).view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * y.expand_as(x) # 使用方式 input_tensor = torch.randn((8, 512, 32, 32)) # batch_size=8, channels=512, height=width=32 se_layer = SELayer(channel=input_tensor.shape[1]) output_tensor = se_layer(input_tensor) print(output_tensor.shape) # 输出形状应该保持不变 (batch_size, channels, height, width) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值