Init: Yolo模型训练
This commit is contained in:
173
README.md
173
README.md
@@ -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
24
data.yaml
Normal 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
21
train.py
Normal 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
BIN
yolo11l-seg.pt
Normal file
Binary file not shown.
Reference in New Issue
Block a user