# YOLO11l-seg 室内导盲模型训练指南 (V2) 本方案针对 Dell R730 服务器(RTX 3090 24GB, 192GB RAM)定制,使用大规模合并数据集进行 **实例分割 (Instance Segmentation)** 训练。 ## 1. 硬件环境配置 ### 1.1 系统与环境 ```bash # 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 监控显卡 ```bash 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` 必须是服务器上的绝对路径。 ```yaml # 路径必须为服务器绝对路径 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` ```python 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: 运行训练 ```bash 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`。 导出命令: ```python 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` (导出后重命名)