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