@@ -14,8 +14,8 @@ conda activate yolo
# 2. 安装 PyTorch (CUDA 12.4)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# 3. 安装 Ultralytics
pip install ultralytics
# 3. 安装 Ultralytics 和 常用工具
pip install ultralytics tqdm opencv-python pyyaml
# 4. 其它依赖
pip install opencv-python matplotlib albumentations
@@ -29,36 +29,43 @@ watch -n 1 nvidia-smi
---
## 2. 数据集 (V2 大规模合并版)
## 2. 数据集 (V2 大规模合并版 - 22 类 )
### 2.1 数据集组成
我们合并了多个来源的高质量分割数据集,总 数据量约 **12,400 张 ** :
我们合并了多个来源的高质量分割数据集,数据源经过精心清洗和重映射 :
| 数据集来源 | 描述 | 作用 |
|------|------|------|
| **MIT Indoor ** | 室内场景分类 | 提供丰富背景和基础物体 |
| **Indoor Blind ** | 早期筛选的导盲数据 | 基础核心数据 |
| **Stair Seg ** | 楼梯 分割 | 增强对楼梯的识别 (Map to `stairs` ) |
| **MIT Indoor ** | 室内场景分类 | 核心补充:提供 `appliance` , `tableware` , `furniture` 等日常物品 |
| **Indoor Blind ** | 早期筛选的导盲数据 | 基础核心数据 (Walkable areas) |
| **Washroom ** | 卫浴 分割 | 覆盖 `toilet` , `sink` 等卫生间关键设施 |
| **Spoon Fork Chopstick ** | 餐具特写 | 极大增强 `tableware` 中细小餐具的识别 (筷子/勺子/叉子) |
| **Stair Seg ** | 楼梯分割 | 增强对楼梯的识别 |
| **Stair Chair Couch ** | 楼梯/椅子分割 | 补充高质量椅子与楼梯数据 |
| **Estima AI ** | 室内房间分割 | 映射为 * * `floor` **,极大增强可行走区域识别 |
### 2.2 类别定义 (20 类)
**已移除 ** :
- **Estima AI**: 因全部为平面设计图而非实景图,已移除。
统一后的 20 个导盲核心类别:
### 2.2 类别定义 (22 类)
| ID | 类别 | 说明 | ID | 类别 | 说明 |
统一后的 22 个导盲核心类别:
| ID | 类别 | 中文 | ID | 类别 | 中文 |
|----|------|------|----|------|------|
| 0 | `floor` | 可行走 地面 | 10 | `stairs ` | 楼梯 |
| 1 | `corridor` | 走廊/通道 | 11 | `wall ` | 墙壁 |
| 2 | `sidewalk` | 人行道 | 12 | `window ` | 窗户 |
| 3 | `chair` | 椅子 | 13 | `cabinet ` | 柜子 |
| 4 | `table` | 桌子 | 14 | `trash_ca n` | 垃圾桶 |
| 5 | `sofa_bed` | 沙发/床 | 15 | `person ` | 行人 |
| 6 | `door` | 门 | 16 | `cup_bottle` | 杯子/瓶子 |
| 7 | `elevator` | 电梯 | 17 | `bag ` | 包 |
| 8 | `plant ` | 植物 | 18 | `electronics ` | 电子电器 |
| 9 | `clock` | 时钟/挂钟 | 19 | `obstac le` | 通用障碍物 |
| 0 | `floor` | 地面 | 11 | `wall ` | 墙壁 |
| 1 | `corridor` | 走廊 | 12 | `window ` | 窗户 |
| 2 | `sidewalk` | 人行道 | 13 | `cabinet ` | 柜子 |
| 3 | `chair` | 椅子 | 14 | `trash_can ` | 垃圾桶 |
| 4 | `table` | 桌子 | 15 | `perso n` | 行人 |
| 5 | `sofa_bed` | 沙发/床 | 16 | `bag ` | 包/背包 |
| 6 | `door` | 门 | 17 | `electronics` | 电子电器 |
| 7 | `elevator` | 电梯 | 18 | `plant ` | 植物 |
| 8 | `stairs ` | 楼梯 | 19 | `obstacle ` | 通用障碍 |
| 9 | `appliance` | 家电 | 20 | `toi let ` | 卫生间/马桶 |
| 10 | `sink` | 洗手台 | 21 | `tableware` | 餐具/物品 |
> **注**: `tableware` (ID 21) 包含杯子、碗、盘子、勺子、筷子、瓶子等。
### 2.3 目录结构 (服务器端)
@@ -68,15 +75,12 @@ watch -n 1 nvidia-smi
/home/rongye/ProgramFiles/Yolo/
├── yolo11l-seg.pt # 预训练权重 (标准模型)
├── train_merged.py # 🔥 主力训练脚本 (使用合并数据)
├── train.py # 🛡️ 备份训练脚本 (使用旧数据)
├── datasets/
│ ├ ── blind_guidance_merged/ # 🔥 V2 主力数据集 (12k images)
│ │ ├── data.yaml # 配置 (20类 )
│ │ ├── train/
│ │ ├── valid/
│ │ └── test/
│ └── indoor_blind/ # 🛡️ 备份数据集 (1.8k images)
│ └── data.yaml # 配置 (14类)
│ └ ── blind_guidance_merged/ # 🔥 V2 主力数据集
│ ├── data.yaml # 配置 (22类, 路径必须正确 )
│ ├── train/
│ ├── valid/
│ └── test/
└── blind_guide_project/ # 训练日志输出
```
@@ -86,15 +90,17 @@ watch -n 1 nvidia-smi
### 3.1 主力配置 `blind_guidance_merged/data.yaml`
**关键点 ** : `path` 必须是服务器上的绝对路径。
``` yaml
# 路径必须为绝对路径
# 路径必须为服务器 绝对路径
path : /home/rongye/ProgramFiles/Yolo/datasets/blind_guidance_merged
train : train/images
val : valid/images
test : test/images
nc : 20
names : [ floor, corridor, sidewalk, chair, table, sofa_bed, door, elevator, stairs, wall, window, cabinet, trash_can, person, cup_bottle, bag, electronics, plant, clock, obstacle]
nc : 22
names : [ floor, corridor, sidewalk, chair, table, sofa_bed, door, elevator, stairs, wall, window, cabinet, trash_can, person, bag, electronics, plant, obstacle, appliance, toilet, sink, tablewar e]
```
### 3.2 训练脚本 `train_merged.py`
@@ -117,40 +123,34 @@ results = model.train(
optimizer = " AdamW " , # 优化器
close_mosaic = 15 , # 最后15轮关闭增强
project = " blind_guide_project " ,
name = " yolo11l_blind_v2 " # V2 版本
name = " yolo11l_blind_v2 " , # V2 版本
amp = False # ⚠️ 关键:必须关闭混合精度以防止 Loss NaN/Inf
)
```
> **注意**: 如果训练出现 `Loss NaN/Inf`,请确保设置 `amp=False`。混合精度虽然省显存,但在某些特定数据集分布下会导致梯度溢出。
---
## 4. 开始训练
## 4. 开始训练流程
### 步骤 1: 上传数据
将本地生成的 `blind_guidance_merged` 文件夹完整上传到服务器 `/home/rongye/ProgramFiles/Yolo/datasets/` 目录。
> **⚠️ 特别提醒**: 上传后,请务必检查服务器上的 `data.yaml` 中的 `path` 字段是否为 `/home/rongye/ProgramFiles/Yolo/datasets/blind_guidance_merged`。如果还是 Windows 路径,请手动修改或上传正确的版本。
### 步骤 2: 运行训练
``` bash
conda activate yolo
cd /home/rongye/ProgramFiles/Yolo
python train_merged.py
```
### 步骤 3: 监控
使用 `watch -n 1 nvidia-smi` 查看显存占用,确保训练正常开始 。
使用 `watch -n 1 nvidia-smi` 查看显存占用。
---
## 5. 备份方案 (旧数据 )
如果需要回退到旧版本训练(仅 14 类,数据量较小):
1. 使用备份脚本:`train.py`
2. 数据路径:`/home/rongye/ProgramFiles/Yolo/datasets/indoor_blind/data.yaml`
3. 运行:`python train.py`
---
## 6. 模型导出 (TensorRT)
## 5. 模型导出 (TensorRT )
训练完成后 (V2),最佳模型位于 `blind_guide_project/yolo11l_blind_v2/weights/best.pt` 。
@@ -158,6 +158,7 @@ python train_merged.py
``` python
from ultralytics import YOLO
model = YOLO ( " blind_guide_project/yolo11l_blind_v2/weights/best.pt " )
# 导出为 TensorRT engine, 半精度 fp16, 动态尺寸固定为 480 (或 640 根据推理端需求)
model . export ( format = " engine " , imgsz = 480 , half = True , device = 0 )
```
目标文件名:`yolo11l-seg-indoor.engine` (导出后重命名)