YOLO11l-seg 室内导盲模型训练指南 (V2)
本方案针对 Dell R730 服务器(RTX 3090 24GB, 192GB RAM)定制,使用大规模合并数据集进行 实例分割 (Instance Segmentation) 训练。
1. 硬件环境配置
1.1 系统与环境
# 1. 创建虚拟环境
conda create -n yolo python=3.10 -y
conda activate yolo
# 2. 安装 PyTorch (CUDA 12.4)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# 3. 安装 Ultralytics 和 常用工具
pip install ultralytics tqdm opencv-python pyyaml
# 4. 其它依赖
pip install opencv-python matplotlib albumentations
1.2 监控显卡
watch -n 1 nvidia-smi
2. 数据集 (V2 大规模合并版 - 22 类)
2.1 数据集组成
我们合并了多个来源的高质量分割数据集,数据源经过精心清洗和重映射:
| 数据集来源 | 描述 | 作用 |
|---|---|---|
| MIT Indoor | 室内场景分类 | 核心补充:提供 appliance, tableware, furniture 等日常物品 |
| Indoor Blind | 早期筛选的导盲数据 | 基础核心数据 (Walkable areas) |
| Washroom | 卫浴分割 | 覆盖 toilet, sink 等卫生间关键设施 |
| Spoon Fork Chopstick | 餐具特写 | 极大增强 tableware 中细小餐具的识别 (筷子/勺子/叉子) |
| Stair Seg | 楼梯分割 | 增强对楼梯的识别 |
| Stair Chair Couch | 楼梯/椅子分割 | 补充高质量椅子与楼梯数据 |
已移除:
- Estima AI: 因全部为平面设计图而非实景图,已移除。
2.2 类别定义 (22 类)
统一后的 22 个导盲核心类别:
| ID | 类别 | 中文 | ID | 类别 | 中文 |
|---|---|---|---|---|---|
| 0 | floor |
地面 | 11 | wall |
墙壁 |
| 1 | corridor |
走廊 | 12 | window |
窗户 |
| 2 | sidewalk |
人行道 | 13 | cabinet |
柜子 |
| 3 | chair |
椅子 | 14 | trash_can |
垃圾桶 |
| 4 | table |
桌子 | 15 | person |
行人 |
| 5 | sofa_bed |
沙发/床 | 16 | bag |
包/背包 |
| 6 | door |
门 | 17 | electronics |
电子电器 |
| 7 | elevator |
电梯 | 18 | plant |
植物 |
| 8 | stairs |
楼梯 | 19 | obstacle |
通用障碍 |
| 9 | appliance |
家电 | 20 | toilet |
卫生间/马桶 |
| 10 | sink |
洗手台 | 21 | tableware |
餐具/物品 |
注:
tableware(ID 21) 包含杯子、碗、盘子、勺子、筷子、瓶子等。
2.3 目录结构 (服务器端)
请确保服务器 /home/rongye/ProgramFiles/Yolo/ 结构如下:
/home/rongye/ProgramFiles/Yolo/
├── yolo11l-seg.pt # 预训练权重 (标准模型)
├── train_merged.py # 🔥 主力训练脚本 (使用合并数据)
├── datasets/
│ └── blind_guidance_merged/ # 🔥 V2 主力数据集
│ ├── data.yaml # 配置 (22类, 路径必须正确)
│ ├── train/
│ ├── valid/
│ └── test/
└── blind_guide_project/ # 训练日志输出
3. 训练配置
3.1 主力配置 blind_guidance_merged/data.yaml
关键点:path 必须是服务器上的绝对路径。
# 路径必须为服务器绝对路径
path: /home/rongye/ProgramFiles/Yolo/datasets/blind_guidance_merged
train: train/images
val: valid/images
test: test/images
nc: 22
names: [floor, corridor, sidewalk, chair, table, sofa_bed, door, elevator, stairs, wall, window, cabinet, trash_can, person, bag, electronics, plant, obstacle, appliance, toilet, sink, tableware]
3.2 训练脚本 train_merged.py
from ultralytics import YOLO
# 加载标准模型
model = YOLO("/home/rongye/ProgramFiles/Yolo/yolo11l-seg.pt")
# 开始训练
results = model.train(
data="/home/rongye/ProgramFiles/Yolo/datasets/blind_guidance_merged/data.yaml",
epochs=200, # 数据量大,跑200轮
imgsz=640, # 训练分辨率
batch=16, # 3090 24G 显存充足
device=1, # 指定使用 GPU 1
workers=16, # 多线程加载
cache="ram", # 192GB 内存全量缓存加速
optimizer="AdamW", # 优化器
close_mosaic=15, # 最后15轮关闭增强
project="blind_guide_project",
name="yolo11l_blind_v2", # V2 版本
amp=False # ⚠️ 关键:必须关闭混合精度以防止 Loss NaN/Inf
)
注意: 如果训练出现
Loss NaN/Inf,请确保设置amp=False。混合精度虽然省显存,但在某些特定数据集分布下会导致梯度溢出。
4. 开始训练流程
步骤 1: 上传数据
将本地生成的 blind_guidance_merged 文件夹完整上传到服务器 /home/rongye/ProgramFiles/Yolo/datasets/ 目录。
⚠️ 特别提醒: 上传后,请务必检查服务器上的
data.yaml中的path字段是否为/home/rongye/ProgramFiles/Yolo/datasets/blind_guidance_merged。如果还是 Windows 路径,请手动修改或上传正确的版本。
步骤 2: 运行训练
cd /home/rongye/ProgramFiles/Yolo
python train_merged.py
步骤 3: 监控
使用 watch -n 1 nvidia-smi 查看显存占用。
5. 模型导出 (TensorRT)
训练完成后 (V2),最佳模型位于 blind_guide_project/yolo11l_blind_v2/weights/best.pt。
导出命令:
from ultralytics import YOLO
model = YOLO("blind_guide_project/yolo11l_blind_v2/weights/best.pt")
# 导出为 TensorRT engine, 半精度 fp16, 动态尺寸固定为 480 (或 640 根据推理端需求)
model.export(format="engine", imgsz=480, half=True, device=0)
目标文件名:yolo11l-seg-indoor.engine (导出后重命名)
Description