Files
Yolo/README.md
2025-12-31 16:31:46 +08:00

5.5 KiB
Raw Blame History

YOLOE-11l-seg 室内导盲模型全流程指南

本方案针对 Dell R730 服务器RTX 3090 24GB, 192GB RAM定制专注于室内导盲场景下的 实例分割 (Instance Segmentation) 任务。

1. 硬件环境优化 (Server Optimization)

你的服务器拥有海量内存192GB这是提升训练速度的核心武器。

1.1 系统与环境配置

# 1. 创建虚拟环境
conda create -n yolo python=3.10 -y
conda activate yolo

# 2. 安装适配 3090 (Ampere架构) 的 PyTorch
# CUDA 12.8 驱动兼容 CUDA 12.4 版本的 PyTorch
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

# 3. 安装 Ultralytics (支持 YOLOE-11 系列)
pip install ultralytics

# 4. 其它必要库
pip install opencv-python matplotlib albumentations

1.2 监控显卡温度

3090 在服务器内散热压力大,建议训练时另开窗口运行:

watch -n 1 nvidia-smi

2. 数据集 (Dataset)

推荐使用 Roboflow 的 Indoor Obstacle Detection 数据集,包含室内导盲所需的关键类别。

2.1 数据集信息

项目 内容
来源 Roboflow Universe
版本 v11
训练集 1440 张
验证集 57 张
测试集 54 张
类别数 8 个

2.2 类别列表

ID 类别 说明
0 closed_door 关闭的门
1 door
2 elevator 电梯
3 escalator 自动扶梯
4 footpath 步道/可行走区域
5 obstacle 障碍物
6 person 行人
7 wall 墙壁

2.3 下载与上传

  1. 在 Roboflow 选择 YOLOv11 格式下载
  2. 解压后修改 data.yaml 中的路径为服务器绝对路径
  3. 按以下结构上传至服务器:
/home/rongye/ProgramFiles/Yolo/
├── yoloe-11l-seg.pt              # 预训练权重
├── train.py                       # 训练脚本
├── data.yaml                      # 数据配置
└── datasets/
    └── indoor_obstacle/           # 数据集目录
        ├── train/
        │   ├── images/
        │   └── labels/
        ├── valid/
        │   ├── images/
        │   └── labels/
        └── test/
            ├── images/
            └── labels/

3. 训练配置 (Training Protocol)

针对 3090 (24GB) 和 192GB 内存优化的脚本。

3.1 编写 data.yaml

# 数据集配置 - Indoor Obstacle Detection v11
path: /home/rongye/ProgramFiles/Yolo/datasets/indoor_obstacle
train: train/images
val: valid/images
test: test/images

nc: 8
names: ['closed_door', 'door', 'elevator', 'escalator', 'footpath', 'obstacle', 'person', 'wall']

3.2 训练脚本 train.py

from ultralytics import YOLO

# 加载 YOLOE-11l-seg 权重 (Everything/World系列)
# 11l 是 Large 版本,拥有最强的特征提取能力
model = YOLO("yoloe-11l-seg.pt") 

# 开始训练
results = model.train(
    data="data.yaml",
    epochs=150,           # 导盲任务建议150轮以确保收敛
    imgsz=640,            # 训练分辨率保持 640
    batch=16,             # 3090 显存大16-32 均可
    device=1,             # 指定第二块 3090
    workers=16,           # 利用双路 Xeon CPU 的多线程能力
    cache='ram',          # 【核心优化】192GB内存足够载入全部数据极大缩短IO等待
    optimizer='AdamW',     # 分割任务建议使用 AdamW
    close_mosaic=10,      # 最后 10 轮关闭增强,提升 Mask 边缘的细腻程度
    amp=True,             # 开启混合精度,提速并省显存
    project="blind_guide_project",
    name="yoloe_11l_v1"
)

4. 适配 480p 实时推理 (Inference Adaption)

你训练用 640使用用 480。11l 模型具有很强的尺度鲁棒性。

4.1 服务器端推理优化

在服务器上运行推理时,通过导出 TensorRT 格式,可以将 3090 的延迟降至 10ms 以内:

# 训练完后执行导出
model = YOLO("blind_guide_project/yoloe_11l_v1/weights/best.pt")
model.export(format="engine", imgsz=480, half=True, device=0)

4.2 将"像素"转化为"语音"

在服务器端处理结果时,利用分割结果计算行走路径:

import numpy as np

def generate_guide_command(results):
    for r in results:
        # 获取 footpath (class 4) 的掩码
        footpath_mask = r.masks.data[r.boxes.cls == 4].cpu().numpy()
        
        # 将掩码横向分为 左、中、右 三个扇区
        # 如果中间扇区地面像素占比低于阈值,说明前方有障碍物
        h, w = footpath_mask[0].shape
        middle_zone = footpath_mask[0][int(h*0.5):, int(w*0.35):int(w*0.65)]
        
        if np.mean(middle_zone) < 0.5:
            return "停止,前方有障碍物"
        else:
            return "路径安全,请直行"

5. 常见问题 (FAQ)

  • Q: 训练过程中显卡太热怎么办?
    • A: R730 散热主要是靠前排风扇。如果 3090 超过 85度请在 iDRAC 里将风扇转速手动设为 70% 或更高。
  • Q: 为什么不用小模型 (11s)
    • A: 因为你的模型运行在服务器上。3090 跑 11l 和跑 11s 的延迟差距对导盲来说可以忽略(都是毫秒级),但 11l 能发现 11s 漏掉的细电线。