Files
Docs/DevLogs/Day27.md
2026-01-05 17:58:03 +08:00

4.0 KiB
Raw Permalink Blame History

Day 27: 室内导航模型集成与训练调试

📅 日期: 2026-01-05

📝 摘要

完成室内导盲数据集 (V2) 的构建,合并了 Estima AI 等多个数据源至 20 类标准。开发了室内导航工作流 (workflow_indoor.py) 并集成至服务器。在模型训练过程中修复了 Loss NaN 问题,并验证了数据集完整性。

🔧 主要变更

1. 数据集准备 (V2 大规模合并版)

  • 数据源扩展: 成功下载并合并了多个新数据集:
    • Estima AI: ~2.5k 图片,映射为 floor 及其它家具。
    • Stair Chair Couch: 增强椅子、沙发和楼梯数据。
    • Indoor Blind: 原始 V1 数据集。
  • 合并策略: 将上述数据集合并为统一的 20 类标准 (blind_guidance_merged),总数据量约 12.4k 张。
  • 健康检查: 运行 check_dataset_health.py 验证了所有 13k+ 图片和标签的完整性。

2. 室内导航工作流 (workflow_indoor.py)

  • 新文件创建: 基于盲道导航逻辑,创建了专用的室内导航器。
  • 20类映射: 定义了完整的 CLASS_NAMESCLASS_NAMES_CN,涵盖:
    • 可行走区域: 地面 (floor), 走廊 (corridor), 人行道 (sidewalk)
    • 障碍物: 椅子, 桌子, 沙发, 柜子, 垃圾桶, 行人, 障碍物等
    • 兴趣点 (POI): 门, 电梯, 楼梯 (重点优化)
  • 可视化与语音: 实现了针对这些类别的特定颜色可视化和语音提示逻辑。

3. 服务器集成 (app_main.py)

  • 模型加载: 修改了 load_indoor_model 函数,默认加载路径更新为 model/yolo11l-seg-indoor.engine
  • 预热逻辑: 增加了对 TensorRT 引擎的识别和模型预热代码。

4. 模型训练 (V2)

  • 配置: 使用 train_merged.py 脚本,基于 yolo11l-seg.pt 预训练模型。
  • 参数: Epochs=200, Batch=16, Device=RTX 3090 (GPU 1)。
  • 调试 (train_merged.py):
  • NaN/Inf 错误修复: 在训练 YOLO11l-seg 时遇到 Loss NaN 问题。
    • 原因: 混合精度训练 (AMP) 在该数据集分布下导致梯度溢出。
    • 解决: 在训练脚本中强制设置 amp=False (使用 FP32 全精度训练)。
  • 数据集检查: 编写并运行了 check_dataset_health.py,确认本地数据集的图片和标签无损坏、无 NaN 坐标,排除了数据源问题。

5. 数据集深度优化 (22类)

  • Tableware 扩展:
    • 响应用户需求,专门合并了 Spoon Fork Chopstick 数据集 (~160张高质量特写)。
    • 将 Class 21 从 cup_item 重命名为更准确的 tableware (餐具),包含碗、勺、叉、筷子、盘子等。
  • 卫浴数据增强: 确认并合并了 washroom 数据集,覆盖马桶 (toilet) 和洗手台 (sink)。
  • 路径修正:
    • 发现 Windows 本地训练脚本生成的 data.yaml 包含本地绝对路径,会导致 Linux 服务器报错。
    • 修复: 修改 merge_datasets.py,使其在生成 data.yaml 时强制写入服务器绝对路径 (/home/rongye/ProgramFiles/Yolo/datasets/blind_guidance_merged),实现跨平台无缝部署。

🐛 遇到的问题与解决

  • 问题: 服务器训练启动后 Loss 迅速变为 NaN报错 Checkpoint is corrupted
    • 排查: 检查了显存、CUDA 版本,最后定位到 AMP 不稳定性。
    • 解决: 关闭 AMP 后解决,同时编写了数据检查脚本作为防御性措施。
  • 问题: 旧代码残留 indoor14 命名。
    • 解决: 全局搜索并清理了所有 indoor14 引用,统一为 yolo11l-seg-indoor
  • 问题: 训练脚本报错 FileNotFoundError (路径错误)。
    • 原因: data.yaml 由 Windows 生成,携带了 d:\... 路径。
    • 解决: 手动修正 data.yaml 并更新生成脚本,统一使用 Linux 服务器路径。

📋 下一步计划

  • 等待服务器模型训练完成 (预计 200 epochs)。
  • 将训练好的 .pt 模型转换为 TensorRT .engine
  • 部署到端侧进行实地测试。