rss 网站插件,链接提交使用说明,网址域名ip查询子域名解析,计算机网络技术网站开发SENet#xff08;Squeeze-and-Excitation Network#xff09;是一种用于深度卷积神经网络#xff08;CNN#xff09;的注意力机制#xff0c;旨在增强网络在特征通道上的表示能力。它通过学习每个通道的重要性权重#xff0c;然后使用这些权重来重新加权特征图#xff0… SENetSqueeze-and-Excitation Network是一种用于深度卷积神经网络CNN的注意力机制旨在增强网络在特征通道上的表示能力。它通过学习每个通道的重要性权重然后使用这些权重来重新加权特征图从而增强有用信息的表示抑制不相关信息。 下面是详细介绍SENet注意力机制的步骤 1. Squeeze压缩阶段 在这个阶段对输入的特征图进行全局平均池化以压缩通道维度。假设输入特征图为 X形状为 (C, H, W)其中 C 是通道数H 和 W 分别是高度和宽度。全局平均池化会得到一个大小为 (C, 1, 1) 的张量。 2. Excitation激励阶段 在这个阶段通过一个两层的全连接网络来学习通道的重要性权重。这个全连接网络由一个压缩操作和一个激励操作组成。 a. 压缩操作将上一步中得到的 (C, 1, 1) 的张量输入到一个全连接层将通道数压缩到一个较小的值称为 middle_channels。 b. 激励操作将压缩后的特征输入到一个 ReLU 激活函数得到一个 (middle_channels,) 的向量。 3. 重标定Re-calibration阶段 将上一步中得到的激励向量扩展为 (C, 1, 1) 的张量与原始特征图 X 逐元素相乘从而获得每个通道上的加权特征图。 以下是用 PyTorch 实现的示例代码
import torch
import torch.nn as nnclass SEBlock(nn.Module):def __init__(self,in_channels,ratio):super(SEBlock, self).__init__()middle_channelsin_channels//ratioself.squeezenn.AdaptiveAvgPool2d(1)self.excitation nn.Sequential(nn.Conv2d(in_channels, middle_channels, kernel_size1),nn.ReLU(inplaceTrue),nn.Conv2d(middle_channels, in_channels, kernel_size1),nn.Sigmoid())def forward(self, x):# Squeeze phasesqueezed self.squeeze(x)print(Squeezed shape:, squeezed.shape)# Excitation phaseweights self.excitation(squeezed)print(Excitation weights shape:, weights.shape)# Re-calibration phaseoutput x * weightsprint(Output shape:, output.shape)return outputif __name__ __main__:modelSEBlock(64,8)device torch.device(cuda if torch.cuda.is_available() else cpu)model.to(device)input_tensortorch.randn(1,64,224,224).to(device)output_tensormodel(input_tensor)这段代码定义了一个名为 SEBlock 的模块用于在给定的输入特征图上应用SENet注意力机制。在创建模型时你可以将这个模块插入到你的卷积神经网络中以增强特征表示能力。