2.8 KiB
2.8 KiB
Day 25 开发日志
日期:2025-12-31
主题:室内导盲分割模型训练完成与验证
🔧 训练问题排查与修复
问题 1: YOLOE 不支持自定义类别训练
错误:
RuntimeError: shape '[16, 78, -1]' is invalid for input of size 14745600
原因:yoloe-11l-seg.pt (YOLO Everything) 是零样本/开放词汇模型,不支持传统 fine-tuning。
解决方案:改用标准分割模型 yolo11l-seg.pt
# train.py 修改
model = YOLO("/home/rongye/ProgramFiles/Yolo/yolo11l-seg.pt")
问题 2: 数据集类别不匹配
原始数据集:MIT Indoor Scene (2573 个类别)
- 类别过多且杂乱(从 alarm clock 到 zuccini)
- 大部分与导盲无关
解决方案:创建 filter_categories.py 脚本筛选导盲相关类别
筛选结果 (14 类):
| ID | 类别 | 用途 |
|---|---|---|
| 0 | floor | 可行走地面 |
| 1 | corridor | 走廊/通道 |
| 2 | sidewalk | 人行道 |
| 3 | chair | 椅子障碍物 |
| 4 | table | 桌子障碍物 |
| 5 | sofa_bed | 沙发/床 |
| 6 | door | 门 |
| 7 | elevator | 电梯 |
| 8 | stairs | 楼梯 |
| 9 | wall | 墙壁边界 |
| 10 | person | 行人 |
| 11 | cabinet | 柜子 |
| 12 | trash_can | 垃圾桶 |
| 13 | window | 窗户/玻璃门 |
数据规模:
- 训练集:1265 张
- 验证集:363 张
- 测试集:175 张
✅ 训练完成
训练配置
model = YOLO("yolo11l-seg.pt")
model.train(
data="data.yaml",
epochs=150,
imgsz=640,
batch=16,
device=1, # RTX 3090
cache='ram',
optimizer='AdamW',
amp=True
)
训练结果
- 模型参数:27.6M
- 训练时长:约 1.5 小时
- 推理速度:4.8ms/张 (训练时) / 23ms/张 (验证时)
✅ 模型验证
测试集预测
python -c "from ultralytics import YOLO; m=YOLO('best.pt'); m.predict('test/images', save=True)"
验证结果
| 指标 | 数值 |
|---|---|
| 测试图片 | 175 张 |
| 推理速度 | 23ms/张 |
| 无检测率 | 2.3% (4张) |
| 类别覆盖 | 14/14 全部检测到 |
典型检测样例
corridor: 1 floor, 4 doors, 3 wallsdining room: 6 chairs, 3 tables, 2 wallsconference: 14 chairs, 2 tablesairport: 1 floor, 2 chairs, 4 walls, 1 person
📁 产物位置
/home/rongye/ProgramFiles/Yolo/blind_guide_project/yoloe_seg_blind_v1/
├── weights/
│ ├── best.pt ← 最佳模型
│ └── last.pt
├── results.csv
└── results.png
📋 下一步
- 导出 TensorRT 格式 (imgsz=480)
- 集成到导盲服务器替换现有模型
- 实际场景测试