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

172 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 漏掉的细电线。