当前位置: 首页 > news >正文

Python Day50

Task:
1.resnet结构解析
2.CBAM放置位置的思考
3.针对预训练模型的训练策略
a.差异化学习率
b.三阶段微调

1. ResNet结构解析

ResNet(残差网络)的核心思想是通过**残差连接(Skip Connection)**解决深层网络中的梯度消失问题。以ResNet18为例:

  • 基本结构

    • 输入层:7x7卷积(stride=2),接3x3最大池化(stride=2)。
    • 4个残差块组,每组包含2个残差块(共18层):
      • 每个残差块由两个3x3卷积层组成,中间通过BatchNorm和ReLU连接。
      • 每组第一个残差块可能进行下采样(步长=2),此时跳跃连接使用1x1卷积调整通道数和步长。
    • 结尾:全局平均池化 + 全连接分类层。
  • 残差块公式
    ( \text{输出} = F(x) + x )
    其中 ( F(x) ) 是两个卷积层的结果,跳跃连接直接相加。

  • 维度匹配:当输入输出尺寸或通道数不同时,跳跃连接通过1x1卷积调整。


2. CBAM放置位置的思考

CBAM(通道+空间注意力模块)的最佳位置需权衡计算开销和性能提升:

  • 常见位置

    1. 残差块内部:在残差相加后加入CBAM(即 ( \text{CBAM}(F(x)+x) )),增强融合特征的注意力。
    2. 卷积块之间:在ResNet的每个残差块后或VGG的卷积层后插入,直接处理特征图。
  • 实验结论

    • ResNet:CBAM放在残差相加后效果更佳(如ResNet的每个残差块末尾)。
    • VGG:在卷积层后、激活函数前插入,避免破坏非线性表达。

3. 预训练模型的训练策略

a. 差异化学习率
  • 原理:深层网络的特征更抽象,需更大调整;浅层特征(如边缘纹理)较通用,应微调。
  • 实现
    • 分层设置学习率(如浅层lr=1e-5,深层lr=1e-3)。
    • 工具支持:PyTorch的param_groups可为不同层分配不同学习率。
b. 三阶段微调
  • 步骤
    1. 冻结全部,仅训练分类头:适配新任务类别。
    2. 解冻部分骨干网络(如后3个残差块组),使用较低学习率微调。
    3. 整体网络训练:全解冻,使用更小学习率(如1e-5)精细调整。

4. ResNet18结构详解

以输入224x224图像为例:

  1. Conv1:7x7卷积(64通道,stride=2) → BN → ReLU。
  2. MaxPool:3x3池化(stride=2)。
  3. 残差块组
    • Layer1:2个残差块,64通道,无下采样。
    • Layer2:2个残差块,128通道(首个块下采样)。
    • Layer3:2个残差块,256通道(下采样)。
    • Layer4:2个残差块,512通道(下采样)。
  4. Global Average Pooling → 全连接层(输出类别数)。

5. VGG16+CBAM微调策略实践

步骤1:插入CBAM模块
  • 位置选择:在每个VGG卷积块末尾(池化层前)插入CBAM。
    # 示例代码(PyTorch)
    class VGG16_CBAM(nn.Module):def __init__(self):super().__init__()self.features = vgg16(pretrained=True).features# 在第3、6、10、14、18层后插入CBAM(根据VGG结构)self.cbam1 = CBAM(64)self.cbam2 = CBAM(128)...def forward(self, x):for i, layer in enumerate(self.features):x = layer(x)if i in [3, 6, 10, 14, 18]:  # 假设这些位置是卷积块末尾x = self.cbam1(x)return x
    
步骤2:差异化学习率设置
  • 参数分组
    optimizer = torch.optim.Adam([{'params': model.features.parameters(), 'lr': 1e-5},  # 浅层{'params': model.cbam_layers.parameters(), 'lr': 1e-4},  {'params': model.classifier.parameters(), 'lr': 1e-3}  # 深层
    ])
    
步骤3:三阶段微调
  1. 阶段一:冻结features层,训练CBAMclassifier
  2. 阶段二:解冻后两个卷积块(如features[-6:]),学习率设为1e-4。
  3. 阶段三:解冻全部,学习率衰减至1e-5,训练10个Epoch。

总结

  • ResNet:残差连接是核心,CBAM放置于残差相加后。
  • VGG+CBAM:在卷积块后插入,结合分阶段微调和分层学习率。
  • 实践建议:通过消融实验确定CBAM位置,使用学习率scheduler(如CosineAnnealing)优化收敛。

文章转载自:

http://IyBQxGna.hrypL.cn
http://en9FzjBq.hrypL.cn
http://wdkEGedR.hrypL.cn
http://g895F33J.hrypL.cn
http://a6jPhSh3.hrypL.cn
http://eQBODrn6.hrypL.cn
http://blrqSQGS.hrypL.cn
http://woJDnP6q.hrypL.cn
http://J06RiGEQ.hrypL.cn
http://Qcb4mblJ.hrypL.cn
http://FCrD39Op.hrypL.cn
http://2MwzgHr9.hrypL.cn
http://i8Q4B8WG.hrypL.cn
http://40UbvAW0.hrypL.cn
http://IjbV4WZZ.hrypL.cn
http://tkSMjB5Y.hrypL.cn
http://izfTMHbB.hrypL.cn
http://ry7Cdfth.hrypL.cn
http://LcZH2YSc.hrypL.cn
http://VF0ynVdM.hrypL.cn
http://z2vxhezP.hrypL.cn
http://ay8u3J3Z.hrypL.cn
http://aWpbTQbA.hrypL.cn
http://VN2dX4gB.hrypL.cn
http://XBz1r8i9.hrypL.cn
http://eVqLF6uC.hrypL.cn
http://gAQbCWsV.hrypL.cn
http://pCEQXRKN.hrypL.cn
http://mm3KqvyA.hrypL.cn
http://MvICCgmP.hrypL.cn
http://www.dtcms.com/a/247611.html

相关文章:

  • 04 - CoordAttention模块
  • Python图片格式转换工具深度解析[附源码】
  • 完整强化学习教程:基于4x4网格世界的智能体探索之旅(一)
  • 2025-06-13【视频处理】基于视频内容转场进行分割
  • 动态规划算法的欢乐密码(二):路径问题
  • Spring Cloud Gateway + JWT 单点登录实现方案(无独立的认证服务器)
  • 最新 Python-PLAXIS 自动化建模技术与典型岩土工程案例实践应用
  • 搭建网站应该怎样选择服务器?
  • 轻量级密码算法LED的C语言实现(无第三方库)
  • 造成服务器宕机的原因都有哪些?
  • SpringBoot 服务器监控 监控系统开销 获取服务器系统的信息用户信息 运行信息 保持稳定
  • JVM 内存、JMM内存与集群机器节点内存的联系
  • aardio 继承与多态
  • 关于 WASM: WASM + JS 混合逆向流程
  • 7. TypeScript接口
  • Python数据结构与算法(6.1)——树
  • 鸿蒙网络编程系列53-仓颉版TCP连接超时分析示例
  • python中的文件操作处理:文本文件的处理、二进制文件的处理
  • Android音视频多媒体开源框架基础大全
  • 基于Docker实现frp之snowdreamtech/frps
  • window显示驱动开发—为 DirectX VA 2.0 扩展模式提供功能(一)
  • 【JVM】- 类加载与字节码结构1
  • Spring AI详细使用教程:从入门到精通
  • RabbitMQ缓存详解:由来、发展、核心场景与实战应用
  • ubuntu之坑(十四)——安装FFmpeg进行本地视频推流(在海思平台上运行)
  • 软件工程的实践
  • ffmpeg subtitles 字幕不换行的问题解决方案
  • Yarn与NPM缓存存储目录迁移
  • MySQL查询缓存深度剖析
  • ffmpeg rtmp推流源码分析