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

174 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 下一步工作计划 (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` 增加(或确认存在):
```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现状保持
- resnet34`torchvision.models.resnet34(weights=IMAGENET1K_V1)` 构建;保存 `layer3/layer4` 输出。
- efficientnet_b0`torchvision.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 FPN`docs/description/Performance_Benchmark.md`
- 待完成GPU 环境基准(速度/显存)、基于真实数据的精度评估与收敛曲线对比。
### 落地步骤Checklist
- [x]`models/rord.py` 增加/落地骨干构建与中间层抽取逻辑(当前通过 `_extract_c234` 实现)。
- [x] 接入 ResNet-34返回等价中高层特征layer2/3/4通道≈128/256/512
- [x] 接入 EfficientNet-B0返回 `features[2]/[3]/[6]`(约 24/40/192FPN 以 1×1 横向连接对齐到 `fpn_out_channels`
- [x] 头部适配单尺度头使用骨干高层通道数FPN 头统一使用 `fpn_out_channels`
- [ ] 预训练权重:支持 `pretrained=true` 加载;补充权重加载摘要打印(哪些层未命中)。
- [x] 单图 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 的前提下,带来显著的速度/显存优势之一;
- [x] 切换完全配置化(无需改代码)。
### 风险与回滚2.1
- 通道不匹配导致维度错误 → 在进入头部前统一使用 1×1 conv 适配;
- 预训练权重与自定义层名不一致 → 显式映射并记录未加载层;
- 收敛变慢 → 暂时提高训练轮数、调学习率/BN 冻结策略;不达标即回滚 `backbone.name=vgg16`
---
## 2.2 集成注意力机制CBAM / SE-Net
优先级:🟠 中 | 预计工期:~710 天 | 产出:注意力增强的 RoRD 变体 + 对照报告
### 模块选择与嵌入位置
- 方案 ACBAM通道注意 + 空间注意),插入至骨干高层与两类头部之前;
- 方案 BSE-Net通道注意轻量但仅通道维插入多个阶段以增强稳定性
- 建议:先实现 CBAM保留 SE 作为备选开关。
### 配置扩展YAML
```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) 实现 `CBAM``SEBlock` 模块(或从可靠实现迁移),提供简洁 forward。
2) 在 `__init__` 中依据 `cfg.model.attention` 决定在何处插入:
- backbone 高层输出后(增强高层语义的判别性);
- 检测头、描述子头输入前(分别强化不同任务所需特征)。
3) 注意保持张量尺寸不变;若引入残差结构,保证与原路径等价时可退化为恒等映射。
### 落地步骤Checklist
- [ ] 实现 `CBAM`通道注意MLP/Avg+Max Pool+ 空间注意7×7 conv
- [ ] 实现 `SEBlock`Squeeze全局池化+ ExcitationMLP, reduction
- [ ]`RoRD` 中用配置化开关插拔注意力,默认关闭。
- [ ] 在进入检测/描述子头前分别测试开启/关闭注意力的影响。
- [ ] 记录注意力图(可选):导出中间注意图用于可视化对比。
### 训练与评估
- [ ] 以入选骨干为基线,分别开启 `cbam``se` 进行对照;
- [ ] 记录:训练损失、验证 IoU/mAP、推理时延/显存;
- [ ] 观察注意力图是否集中在关键几何(边角/交点/突变);
- [ ] 若带来过拟合迹象(验证下降),尝试减弱注意力强度或减少插入位置。
### 验收标准2.2
- [ ] 模型在开启注意力后稳定训练,无数值异常;
- [ ] 指标不低于无注意力基线;若提升则量化收益;
- [ ] 配置可一键关闭以回退。
### 风险与回滚2.2
- 注意力导致过拟合或梯度不稳 → 降低 reduction、减少插入点、启用正则
- 推理时延上升明显 → 对注意力路径进行轻量化(如仅通道注意或更小 kernel
---
## 工程与度量配套
### 实验记录(建议)
- 在 TensorBoard 中新增:
- `arch/backbone_name``arch/attention_type`Text/Scalar
- `train/loss_total``eval/iou_metric``eval/map`
- 推理指标:`infer/ms_per_image``infer/vram_gb`
### 对照报告模板(最小集)
- 数据集与配置摘要(随机种子、批大小、学习率、图像尺寸)。
- 三个骨干 + 注意力开关的结果表(速度/显存/IoU/mAP
- 结论与落地选择(保留/关闭/待进一步实验)。
---
## 排期与里程碑(建议)
- M11 天):骨干切换基础设施与通道适配层;单图 smoke 测试。
- M223 天ResNet34 与 EfficientNet-B0 接入与跑通;
- M312 天A/B 评测与结论;
- M434 天):注意力模块接入、训练对照、报告输出。
---
## 相关参考
- 源文档:`docs/feature_work.md` 第二部分(模型架构)
- 阶段规划:`docs/todos/`
- 配置系统:`configs/base_config.yaml`