Files
RoRD-Layout-Recognation/docs/NextStep.md
2025-10-20 13:35:13 +08:00

8.7 KiB
Raw Blame History

下一步工作计划 (NextStep)

最后更新: 2025-10-20
范围: 仅聚焦于 feature_work.md 的第二部分「模型架构 (Model Architecture)」的落地执行计划
上下文: 核心功能已完成,本文档将模型架构优化转化为可执行的工程计划,便于直接实施与验收。

参考来源:docs/feature_work.md 第二部分;更宏观的阶段规划见 docs/todos/


🔴 模型架构优化Feature Work 第二部分)

目标:在保证现有精度的前提下,提升特征提取效率与推理速度;为后续注意力机制与多尺度策略提供更强的特征基础。

总体验收标准(全局)

  • 训练/验证流程在新骨干和注意力方案下均可跑通,无崩溃/NaN。
  • 在代表性验证集上最终指标IoU/mAP不低于当前 VGG-16 基线;若下降需给出改进措施或回滚建议。
  • 推理时延或显存占用至少一种维度优于基线,或达到“相当 + 结构可扩展”的工程收益。
  • 关键改动均通过配置开关控制,可随时回退。

2.1 实验更现代的骨干网络Backbone

优先级:🟠 中 | 预计工期:~1 周 | 产出:可切换的 backbone 实现 + 对照报告

设计要点(小合约)

  • 输入:与现有 RoRD 一致的图像张量 B×C×H×W。
  • 输出:供检测头/描述子头使用的中高层特征张量通道数因骨干不同而异VGG:512、ResNet34:512、Eff-B0:1280
  • 约束:不改变下游头部的接口形状(头部输入通道需根据骨干进行对齐适配)。
  • 失败模式:通道不匹配/梯度不通/预训练权重未正确加载/收敛缓慢。

配置扩展YAML

configs/base_config.yaml 增加(或确认存在):

model:
	backbone:
		name: "vgg16"   # 可选vgg16 | resnet34 | efficientnet_b0
		pretrained: true
		# 用于选择抽取的特征层(按不同骨干约定名称)
		feature_layers:
			vgg16: ["relu3_3", "relu4_3"]
			resnet34: ["layer3", "layer4"]
			efficientnet_b0: ["features_5", "features_7"]

代码改动建议

  • 文件:models/rord.py
    1. __init__ 中根据 cfg.model.backbone.name 动态构建骨干:
      • vgg16现状保持
      • resnet34torchvision.models.resnet34(weights=IMAGENET1K_V1) 构建;保存 layer3/layer4 输出。
      • efficientnet_b0torchvision.models.efficientnet_b0(weights=IMAGENET1K_V1) 构建;保存末两段 features 输出。
    2. 为不同骨干提供统一的“中间层特征导出”接口(注册 forward hook 或显式调用子模块)。
    3. 依据所选骨干的输出通道,调整检测头与描述子头的输入通道(如使用 1×1 conv 过渡层以解耦通道差异)。
    4. 保持现有前向签名与返回数据结构不变(训练/推理兼容)。

进展更新2025-10-20

  • 已完成:在 models/rord.py 集成多骨干选择(vgg16/resnet34/efficientnet_b0),并实现统一的中间层抽取函数 _extract_c234(可后续重构为 build_backbone/extract_features 明确接口)。
  • 已完成FPN 通用化,基于 C2/C3/C4 构建 P2/P3/P4按骨干返回正确的 stride。
  • 已完成:单图前向 Smoke Test三种骨干单尺度与 FPN均通过。
  • 已完成CPU 环境 A/B 基准(单尺度 vs FPNdocs/description/Performance_Benchmark.md
  • 待完成GPU 环境基准(速度/显存)、基于真实数据的精度评估与收敛曲线对比。

落地步骤Checklist

  • models/rord.py 增加/落地骨干构建与中间层抽取逻辑(当前通过 _extract_c234 实现)。
  • 接入 ResNet-34返回等价中高层特征layer2/3/4通道≈128/256/512
  • 接入 EfficientNet-B0返回 features[2]/[3]/[6](约 24/40/192FPN 以 1×1 横向连接对齐到 fpn_out_channels
  • 头部适配单尺度头使用骨干高层通道数FPN 头统一使用 fpn_out_channels
  • 预训练权重:支持 pretrained=true 加载;补充权重加载摘要打印(哪些层未命中)。
  • 单图 smoke test前向通过、无 NaN三种骨干单尺度与 FPN

评测与选择A/B 实验)

  • 在固定数据与超参下,比较 vgg16/resnet34/efficientnet_b0
    • 收敛速度loss 曲线 0-5 epoch
    • 推理速度ms / 2048×2048与显存GB[CPU 初步结果已产出GPU 待复测;见 docs/description/Performance_Benchmark.md]
    • 验证集 IoU/mAP真实数据集待跑
  • 形成表格与可视化图给出选择结论与原因CPU 版初稿已在报告中给出观察)。
  • 若新骨干在任一关键指标明显受损,则暂缓替换,仅保留为可切换实验选项。

验收标准2.1

  • 三种骨干方案均可训练与推理(当前仅验证推理,训练与收敛待验证);
  • 最终入选骨干在 IoU/mAP 不低于 VGG 的前提下,带来显著的速度/显存优势之一;
  • 切换完全配置化(无需改代码)。

风险与回滚2.1

  • 通道不匹配导致维度错误 → 在进入头部前统一使用 1×1 conv 适配;
  • 预训练权重与自定义层名不一致 → 显式映射并记录未加载层;
  • 收敛变慢 → 暂时提高训练轮数、调学习率/BN 冻结策略;不达标即回滚 backbone.name=vgg16

2.2 集成注意力机制CBAM / SE-Net

优先级:🟠 中 | 预计工期:~710 天 | 产出:注意力增强的 RoRD 变体 + 对照报告

模块选择与嵌入位置

  • 方案 ACBAM通道注意 + 空间注意),插入至骨干高层与两类头部之前;
  • 方案 BSE-Net通道注意轻量但仅通道维插入多个阶段以增强稳定性
  • 建议:先实现 CBAM保留 SE 作为备选开关。

配置扩展YAML

model:
	attention:
		enabled: true
		type: "cbam"   # 可选cbam | se | none
		places: ["backbone_high", "det_head", "desc_head"]
		# 可选超参reduction、kernel_size 等
		reduction: 16
		spatial_kernel: 7

代码改动建议

  • 文件:models/rord.py
    1. 实现 CBAMSEBlock 模块(或从可靠实现迁移),提供简洁 forward。
    2. __init__ 中依据 cfg.model.attention 决定在何处插入:
      • backbone 高层输出后(增强高层语义的判别性);
      • 检测头、描述子头输入前(分别强化不同任务所需特征)。
    3. 注意保持张量尺寸不变;若引入残差结构,保证与原路径等价时可退化为恒等映射。

落地步骤Checklist

  • 实现 CBAM通道注意MLP/Avg+Max Pool+ 空间注意7×7 conv
  • 实现 SEBlockSqueeze全局池化+ ExcitationMLP, reduction
  • RoRD 中用配置化开关插拔注意力,默认关闭。
  • 在进入检测/描述子头前分别测试开启/关闭注意力的影响。
  • 记录注意力图(可选):导出中间注意图用于可视化对比。

训练与评估

  • 以入选骨干为基线,分别开启 cbamse 进行对照;
  • 记录:训练损失、验证 IoU/mAP、推理时延/显存;
  • 观察注意力图是否集中在关键几何(边角/交点/突变);
  • 若带来过拟合迹象(验证下降),尝试减弱注意力强度或减少插入位置。

验收标准2.2

  • 模型在开启注意力后稳定训练,无数值异常;
  • 指标不低于无注意力基线;若提升则量化收益;
  • 配置可一键关闭以回退。

风险与回滚2.2

  • 注意力导致过拟合或梯度不稳 → 降低 reduction、减少插入点、启用正则
  • 推理时延上升明显 → 对注意力路径进行轻量化(如仅通道注意或更小 kernel

工程与度量配套

实验记录(建议)

  • 在 TensorBoard 中新增:
    • arch/backbone_namearch/attention_typeText/Scalar
    • train/loss_totaleval/iou_metriceval/map
    • 推理指标:infer/ms_per_imageinfer/vram_gb

对照报告模板(最小集)

  • 数据集与配置摘要(随机种子、批大小、学习率、图像尺寸)。
  • 三个骨干 + 注意力开关的结果表(速度/显存/IoU/mAP
  • 结论与落地选择(保留/关闭/待进一步实验)。

排期与里程碑(建议)

  • M11 天):骨干切换基础设施与通道适配层;单图 smoke 测试。
  • M223 天ResNet34 与 EfficientNet-B0 接入与跑通;
  • M312 天A/B 评测与结论;
  • M434 天):注意力模块接入、训练对照、报告输出。

相关参考

  • 源文档:docs/feature_work.md 第二部分(模型架构)
  • 阶段规划:docs/todos/
  • 配置系统:configs/base_config.yaml