news 2026/4/15 12:08:11

day49_通道注意力机制 @浙大疏锦行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day49_通道注意力机制 @浙大疏锦行

Day 49通道注意力机制 @浙大疏锦行

概念

  • 目的:让神经网络自动学习每个特征通道的重要性,从而增强有用的特征通道,抑制无用的特征通道。
  • 实现步骤
    1. Squeeze (压缩)
      • 使用全局平均池化 (nn.AdaptiveAvgPool2d(1))。
      • 将形状为( B , C , H , W ) (B, C, H, W)(B,C,H,W)的特征图压缩为( B , C , 1 , 1 ) (B, C, 1, 1)(B,C,1,1),使每个通道获得全局感受野。
    2. Excitation (激励)
      • 使用两个全连接层(FC)组成的“瓶颈”结构。
      • 第一个 FC 将通道数降低(reduction_ratio=16),减少计算量并引入非线性。
      • 第二个 FC 将通道数恢复。
      • 最后通过Sigmoid激活函数,输出每个通道的权重(范围 0~1)。
    3. Scale (重标定)
      • 将生成的通道权重与原始特征图相乘 (x * y),完成特征重标定。

代码

模型对比

# 基础CNN模型classCNN(nn.Module):def__init__(self):super(CNN,self).__init__()self.conv1=nn.Conv2d(3,32,3,padding=1)self.bn1=nn.BatchNorm2d(32)self.relu1=nn.ReLU()self.pool1=nn.MaxPool2d(2,2)self.conv2=nn.Conv2d(32,64,3,padding=1)self.bn2=nn.BatchNorm2d(64)self.relu2=nn.ReLU()self.pool2=nn.MaxPool2d(2)self.conv3=nn.Conv2d(64,128,3,padding=1)self.bn3=nn.BatchNorm2d(128)self.relu3=nn.ReLU()self.pool3=nn.MaxPool2d(2)self.fc1=nn.Linear(128*4*4,512)self.dropout=nn.Dropout(p=0.5)self.fc2=nn.Linear(512,10)defforward(self,x):x=self.pool1(self.relu1(self.bn1(self.conv1(x))))x=self.pool2(self.relu2(self.bn2(self.conv2(x))))x=self.pool3(self.relu3(self.bn3(self.conv3(x))))x=x.view(-1,128*4*4)x=self.fc2(self.dropout(self.relu3(self.fc1(x))))returnx# 通道注意力模块 (SE Block)classChannelAttention(nn.Module):def__init__(self,in_channels,reduction_ratio=16):super(ChannelAttention,self).__init__()self.avg_pool=nn.AdaptiveAvgPool2d(1)self.fc=nn.Sequential(nn.Linear(in_channels,in_channels//reduction_ratio,bias=False),nn.ReLU(inplace=True),nn.Linear(in_channels//reduction_ratio,in_channels,bias=False),nn.Sigmoid())defforward(self,x):b,c,_,_=x.size()y=self.avg_pool(x).view(b,c)y=self.fc(y).view(b,c,1,1)returnx*y# 带通道注意力的CNN模型classCNN_SE(nn.Module):def__init__(self):super(CNN_SE,self).__init__()self.conv1=nn.Conv2d(3,32,3,padding=1)self.bn1=nn.BatchNorm2d(32)self.relu1=nn.ReLU()self.ca1=ChannelAttention(32)self.pool1=nn.MaxPool2d(2,2)self.conv2=nn.Conv2d(32,64,3,padding=1)self.bn2=nn.BatchNorm2d(64)self.relu2=nn.ReLU()self.ca2=ChannelAttention(64)self.pool2=nn.MaxPool2d(2)self.conv3=nn.Conv2d(64,128,3,padding=1)self.bn3=nn.BatchNorm2d(128)self.relu3=nn.ReLU()self.ca3=ChannelAttention(128)self.pool3=nn.MaxPool2d(2)self.fc1=nn.Linear(128*4*4,512)self.dropout=nn.Dropout(p=0.5)self.fc2=nn.Linear(512,10)defforward(self,x):x=self.pool1(self.ca1(self.relu1(self.bn1(self.conv1(x)))))x=self.pool2(self.ca2(self.relu2(self.bn2(self.conv2(x)))))x=self.pool3(self.ca3(self.relu3(self.bn3(self.conv3(x)))))x=x.view(-1,128*4*4)x=self.fc2(self.dropout(self.relu3(self.fc1(x))))returnx

代码中定义了两个模型进行对比:

  1. 基础 CNN (CNN)
    • 包含 3 个卷积块(Conv -> BN -> ReLU -> MaxPool)。
    • 最后接全连接层进行分类。
  2. 带注意力的 CNN (CNN_SE)
    • 结构与基础 CNN 类似。
    • 关键区别:在每个卷积块的 ReLU 激活之后、池化之前,插入了ChannelAttention模块。

训练

  • 定义了train_and_log函数,统一管理训练循环。
  • 记录了每个 Epoch 和 Batch 的 Loss 及 Accuracy,并保存到 CSV 文件中以便后续分析。
  • 使用了Adam优化器和ReduceLROnPlateau学习率调度策略。

可视化

  1. 特征图可视化 (visualize_feature_maps)
    • 展示模型中间层(如 conv1, conv2, conv3)输出的特征图。
    • 帮助理解网络在不同深度提取了什么样的视觉特征(边缘、纹理、部件等)。
  2. 注意力热力图 (visualize_attention_map)
    • 提取卷积层输出,计算通道均值作为权重。
    • 将高响应的通道特征图叠加在原图上。
    • 作用:直观展示模型在进行分类决策时,主要“关注”图像的哪些区域(例如是否聚焦在物体主体上)。

总结

通过在卷积神经网络中引入通道注意力机制(SE Block),模型能够以极小的计算代价(少量的参数增加),显式地建模通道间的依赖关系,从而提升特征表示能力。这种机制是即插即用的,可以方便地集成到现有的 CNN 架构中。

@浙大疏锦行
Block),模型能够以极小的计算代价(少量的参数增加),显式地建模通道间的依赖关系,从而提升特征表示能力。这种机制是即插即用的,可以方便地集成到现有的 CNN 架构中。

@浙大疏锦行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 12:45:02

生物信息学中的模式匹配技巧

在生物信息学领域,处理大量的基因序列数据是一个常见任务。今天我们来探讨如何通过Python中的Biopython库和正则表达式模块(re)来高效地处理FASTA格式的文件,并提取特定模式的序列信息。 背景介绍 FASTA格式是一种用于存储核酸和蛋白质序列的文本格式,每个序列由一个描述…

作者头像 李华
网站建设 2026/4/11 16:37:14

单片机毕设 stm32智能鱼缸监控投喂系统(源码+硬件+论文)

文章目录 0 前言1 主要功能2 硬件设计(原理图)3 核心软件设计4 实现效果5 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉…

作者头像 李华
网站建设 2026/4/12 16:05:27

人机信息论

为了计算,需要计量,为了计量,需要定义。香农定义了信源、信道的信息量;为了这个定义,他定义了信息、信息量、定义了信息量的单位.....这些定义成了他最著名的定义,也通过这些定义奠定了信息论的基础。类似&…

作者头像 李华
网站建设 2026/4/12 1:26:53

Vetur插件安装:新手教程(零基础手把手教学)

零基础也能懂:手把手教你安装 Vetur,开启 Vue 开发第一步 你是不是刚接触前端开发?看到别人用 Vue 写代码行云流水,自动补全、语法高亮、错误提示一应俱全,而自己打开 .vue 文件却像在“裸写”——没有颜色、没有提…

作者头像 李华
网站建设 2026/4/12 22:43:11

libusb异步传输调试技巧:日志追踪与问题定位方法

libusb异步传输调试实战:用日志穿透“黑盒”通信你有没有遇到过这样的场景?设备明明插着,libusb_submit_transfer()返回成功,但数据就是收不到——回调函数像人间蒸发了一样,不报错也不执行。或者,你的高速…

作者头像 李华