diff --git a/README.md b/README.md index 9d6dc4f..08863c9 100644 --- a/README.md +++ b/README.md @@ -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_can`| 垃圾桶 | -| 5 | `sofa_bed` | 沙发/床 | 15 | `person` | 行人 | -| 6 | `door` | 门 | 16 | `cup_bottle`| 杯子/瓶子 | -| 7 | `elevator` | 电梯 | 17 | `bag` | 包 | -| 8 | `plant` | 植物 | 18 | `electronics`| 电子电器 | -| 9 | `clock` | 时钟/挂钟 | 19 | `obstacle` | 通用障碍物 | +| 0 | `floor` | 地面 | 11 | `wall` | 墙壁 | +| 1 | `corridor` | 走廊 | 12 | `window` | 窗户 | +| 2 | `sidewalk` | 人行道 | 13 | `cabinet` | 柜子 | +| 3 | `chair` | 椅子 | 14 | `trash_can`| 垃圾桶 | +| 4 | `table` | 桌子 | 15 | `person` | 行人 | +| 5 | `sofa_bed` | 沙发/床 | 16 | `bag` | 包/背包 | +| 6 | `door` | 门 | 17 | `electronics`| 电子电器 | +| 7 | `elevator` | 电梯 | 18 | `plant` | 植物 | +| 8 | `stairs` | 楼梯 | 19 | `obstacle` | 通用障碍 | +| 9 | `appliance` | 家电 | 20 | `toilet` | 卫生间/马桶 | +| 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, tableware] ``` ### 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` (导出后重命名) diff --git a/datasets/blind_guidance_merged/data.yaml b/datasets/blind_guidance_merged/data.yaml index a997ea4..aceb710 100644 --- a/datasets/blind_guidance_merged/data.yaml +++ b/datasets/blind_guidance_merged/data.yaml @@ -13,13 +13,15 @@ names: - cabinet - trash_can - person -- cup_bottle - bag - electronics - plant -- clock - obstacle -nc: 20 +- appliance +- toilet +- sink +- tableware +nc: 22 path: /home/rongye/ProgramFiles/Yolo/datasets/blind_guidance_merged test: test/images train: train/images