2026-01-05 12:19:48 +08:00
2025-12-31 16:28:37 +08:00
2026-01-05 10:42:09 +08:00
2026-01-05 12:19:48 +08:00
2025-12-31 16:31:46 +08:00
2026-01-04 17:41:25 +08:00

YOLO11l-seg 室内导盲模型训练指南

本方案针对 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

# 4. 其它依赖
pip install opencv-python matplotlib albumentations

1.2 监控显卡

watch -n 1 nvidia-smi

2. 数据集

2.1 原始数据集

使用 Roboflow 的 MIT Indoor Scene Classification 数据集:

项目 内容
来源 Roboflow Universe
格式 YOLOv11 (带分割标注)
原始类别 2573 个 (过多且杂乱)

2.2 类别筛选

原始 2573 个类别包含大量与导盲无关的物体(如 alarm clock、bananas 等),需要筛选。

使用 filter_categories.py 脚本将类别从 2573 → 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 窗户/玻璃门

2.3 筛选脚本

python filter_categories.py

生成的数据集:

集合 数量
训练集 1265 张
验证集 363 张
测试集 175 张

2.4 目录结构

/home/rongye/ProgramFiles/Yolo/
├── yolo11l-seg.pt                 # 预训练权重 (标准模型)
├── train.py                       # 训练脚本
├── data.yaml                      # 数据配置
├── filter_categories.py           # 类别筛选脚本
└── datasets/
    └── indoor_blind/              # 筛选后的数据集
        ├── data.yaml
        ├── train/
        │   ├── images/
        │   └── labels/
        ├── valid/
        │   ├── images/
        │   └── labels/
        └── test/
            ├── images/
            └── labels/

3. 训练配置

3.1 数据配置 data.yaml

# 导盲分割数据集 - 14 个核心类别
path: /home/rongye/ProgramFiles/Yolo/datasets/indoor_blind
train: train/images
val: valid/images
test: test/images

nc: 14
names:
  - floor       # 0: 可行走地面
  - corridor    # 1: 走廊/通道
  - sidewalk    # 2: 人行道
  - chair       # 3: 椅子
  - table       # 4: 桌子
  - sofa_bed    # 5: 沙发/床
  - door        # 6: 
  - elevator    # 7: 电梯
  - stairs      # 8: 楼梯
  - wall        # 9: 墙壁
  - person      # 10: 行人
  - cabinet     # 11: 柜子
  - trash_can   # 12: 垃圾桶
  - window      # 13: 窗户/玻璃门

3.2 训练脚本 train.py

from ultralytics import YOLO

# 注意:使用标准 yolo11l-seg.pt而非 yoloe-11l-seg.pt
# YOLOE 不支持自定义类别训练!
model = YOLO("/home/rongye/ProgramFiles/Yolo/yolo11l-seg.pt")

results = model.train(
    data="data.yaml",
    epochs=150,           # 导盲任务建议150轮
    imgsz=640,            # 训练分辨率
    batch=16,             # 3090 显存足够
    device=1,             # 第二块 3090
    workers=16,           # 多线程加载
    cache='ram',          # 192GB 内存全量缓存
    optimizer='AdamW',
    close_mosaic=10,      # 最后10轮关闭mosaic
    amp=True,             # 混合精度
    project="blind_guide_project",
    name="yoloe_seg_blind_v1"
)

⚠️ 重要:必须使用 yolo11l-seg.pt,不能使用 yoloe-11l-seg.pt YOLOE 是零样本模型,不支持自定义类别训练。


4. 训练结果

4.1 模型信息

项目 数值
模型 YOLO11l-seg
参数量 27.6M
训练轮数 150 epochs

4.2 推理性能

阶段 速度
训练时 4.8 ms/张
验证时 23 ms/张

4.3 输出位置

blind_guide_project/yoloe_seg_blind_v1/
├── weights/
│   ├── best.pt      ← 最佳模型
│   └── last.pt
├── results.csv
└── results.png

5. 推理与部署

5.1 验证模型

python -c "from ultralytics import YOLO; m=YOLO('best.pt'); m.predict('test/images', save=True)"

5.2 导出 TensorRT

model = YOLO("blind_guide_project/yoloe_seg_blind_v1/weights/best.pt")
model.export(format="engine", imgsz=480, half=True, device=0)

5.3 重命名模型

建议重命名为更清晰的名称:

cp best.pt yolo11l-seg-indoor14.pt

6. 常见问题

Q: 为什么不用 YOLOE

YOLOE (YOLO Everything) 是零样本/开放词汇模型,设计用于通过文字描述检测任意物体,不支持自定义类别训练。训练时会报错:

RuntimeError: shape '[16, 78, -1]' is invalid for input of size 14745600

Q: 为什么要筛选类别?

原始 MIT Indoor 数据集有 2573 个类别,绝大部分与导盲无关(如 alarm clock、bananas。筛选后 14 个类别更聚焦,训练效果更好。

Q: 训练用 640推理用 480

是的。YOLO11l 具有很强的尺度鲁棒性TensorRT 导出时用 480 可以进一步提速。

Description
Yolo模型训练
Readme 54 MiB
v1.1.3 Latest
2026-01-06 17:11:20 +08:00
Languages
Python 100%