Init: Yolo模型训练

This commit is contained in:
Kevin Wong
2025-12-31 16:31:46 +08:00
parent b7fb57a541
commit 4765376c00
4 changed files with 217 additions and 3 deletions

175
README.md
View File

@@ -1,3 +1,172 @@
# Yolo # YOLOE-11l-seg 室内导盲模型全流程指南
Yolo模型训练 本方案针对 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 漏掉的细电线。

24
data.yaml Normal file
View File

@@ -0,0 +1,24 @@
# 导盲分割数据集 - 从 MIT Indoor 筛选的 14 个核心类别
# 原始 2573 类别 -> 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: 窗户/玻璃门

21
train.py Normal file
View File

@@ -0,0 +1,21 @@
from ultralytics import YOLO
# 加载 YOLOv11-Large 分割模型 (标准版本,支持自定义训练)
# 注意YOLOE 不支持自定义类别数训练,需使用标准 YOLO11
model = YOLO("/home/rongye/ProgramFiles/Yolo/yolo11l-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_seg_blind_v1"
)

BIN
yolo11l-seg.pt Normal file

Binary file not shown.