172 lines
5.5 KiB
Markdown
172 lines
5.5 KiB
Markdown
# YOLOE-11l-seg 室内导盲模型全流程指南
|
||
|
||
本方案针对 Dell R730 服务器(RTX 3090 24GB, 192GB RAM)定制,专注于室内导盲场景下的 **实例分割 (Instance Segmentation)** 任务。
|
||
|
||
## 1. 硬件环境优化 (Server Optimization)
|
||
|
||
你的服务器拥有海量内存(192GB),这是提升训练速度的核心武器。
|
||
|
||
### 1.1 系统与环境配置
|
||
|
||
```bash
|
||
# 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 在服务器内散热压力大,建议训练时另开窗口运行:
|
||
|
||
```bash
|
||
watch -n 1 nvidia-smi
|
||
```
|
||
|
||
## 2. 数据集 (Dataset)
|
||
|
||
推荐使用 Roboflow 的 **Indoor Obstacle Detection** 数据集,包含室内导盲所需的关键类别。
|
||
|
||
### 2.1 数据集信息
|
||
|
||
| 项目 | 内容 |
|
||
|------|------|
|
||
| 来源 | [Roboflow Universe](https://universe.roboflow.com/indooroutdoornavigation/indoor-obstacle-detection) |
|
||
| 版本 | 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`
|
||
|
||
```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`
|
||
|
||
```python
|
||
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 以内:
|
||
|
||
```python
|
||
# 训练完后执行导出
|
||
model = YOLO("blind_guide_project/yoloe_11l_v1/weights/best.pt")
|
||
model.export(format="engine", imgsz=480, half=True, device=0)
|
||
```
|
||
|
||
### 4.2 将"像素"转化为"语音"
|
||
|
||
在服务器端处理结果时,利用分割结果计算行走路径:
|
||
|
||
```python
|
||
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 漏掉的细电线。 |