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

63 lines
4.0 KiB
Markdown
Raw Permalink 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.
# 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_NAMES``CLASS_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`
- 部署到端侧进行实地测试。