Files
HSAP/datasets/dms/docs/TODO_gyp_to_yolo26.md
Chengfang Lu 7c43b44c57 feat: initial HSAP platform
Huaxu Sentinel Active Safety Platform with embedded algorithm code,
Docker Compose setup, and vendored dataset scaffolds for clone-and-run.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-25 16:59:59 +08:00

177 lines
6.7 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.
# GYP 数据整理 → YOLO26 RKNN 迁移 Todo
> 数据根目录:`/home/chengfanglu/DATA/DMS/DATASET/gyp`(约 **45G**,已自 `gyp_org` / `BK2/archive/gyp` 迁入)
> 配置:`/home/chengfanglu/DATA/DMS/DATASET/configs/`
> 目标工程:`/home/chengfanglu/DATA/DMS/Code/yolo26_rknn_ultralytics-main`
---
## 阶段 0环境与目录先做
- [ ] **0.1** 确认 conda`clrnet_export` / 新建 `yolo26` 环境,能跑 `yolo train` / `yolo export format=rknn`
- [ ] **0.2** RKNN 量化环境单独建 venv与 ultralytics 依赖隔离,见 README-EN
- [ ] **0.3** 确定目标芯片平台(如 `rk3588`)写入后续 convert 命令
- [ ] **0.4** 统一数据根目录 `DMS/DATASET/dms_yolo/`(使用 `scripts/refresh_yaml.py`
```
dms_yolo/
├── yaml/ # 各任务 yamlpath 为相对路径
├── ddaw/ -> ../gyp/ddaw_1124
├── addw/, addw_face/, isa/, dam/, dam_0417/, isa_class/
├── manifests/
└── README.md
```
迁移服务器: `scripts/pack_dms_yolo.sh` 或 `rsync --copy-links`
---
## 阶段 1盘点源数据BK2/archive/gyp
| 业务 | 源路径 | 格式 | 体量 | 类别数 |
|------|--------|------|------|--------|
| DDAW | `DATASET/gyp/ddaw_1124` | YOLO images/labels | ~646M | 9 |
| ADDW | `DATASET/gyp/addw_0523` | YOLO | ~553M | 4 |
| ADDW 人脸 | `DATASET/gyp/yoloface-0726` | YOLO pose | ~1.6G | face + 37 kpts |
| ISA | `DATASET/gyp/isa_detect` | YOLO | ~40G | 4 |
| ISA 分类 | `DATASET/gyp/isa_class_0116` | 文件夹分类 | ~448M | 多类 |
| DAM | `DATASET/gyp/dam_src_0417` / `dam_0516` | jpg+xml / YOLO | ~540M + ~930M | 待确认 |
| DOWN | `down/yolov5-6.2` | 代码+runs数据在 yaml 指向服务器路径 | 待查本地 data |
- [ ] **1.1** 对每个子项目跑一遍统计train/val 图片数、标签数、空标签、坏图
- [x] **1.2** 唯一数据根:`DMS/DATASET/gyp/`(已从 archive 补齐 isa / yoloface / isa_class
- [x] **1.3** 已删除 `gyp_org` 及 `BK2/archive/gyp` 中重复数据目录(约释放 40G+
---
## 阶段 2转换为 Ultralytics/YOLO26 标准结构
### 划分原则(必守)
**不要按总量随机划分 train/val**,必须 **按类别分层**,使各类在 train/val 中的比例接近(默认 val≈10%)。
- **YOLO 检测**`scripts/stratified_split.py yolo`
合并现有 train+val 为池子后,按「图像所含最稀有类」优先依次划分,避免稀有类全进 train。
- **文件夹分类**`scripts/stratified_split.py classify`
**每个类别目录内独立**划分(与 `isa_preprocess.py` 思路一致),禁止全库 `random.sample`。
- 划分前用 `--dry-run` 查看各类 val 占比;满意后再去掉 `--dry-run` 执行。
```bash
cd DMS/DATASET/scripts
python stratified_split.py yolo --root ../gyp/ddaw_1124 --val-ratio 0.1 --dry-run
python stratified_split.py yolo --root ../gyp/ddaw_1124 --val-ratio 0.1 --seed 42
python stratified_split.py classify --root ../gyp/isa_class_0116 --src-split train --val-ratio 0.1 --dry-run
```
每个检测任务目标结构:
```
dms_yolo/<task>/
images/train/
images/val/
labels/train/ # 与 images 同名 .txt
labels/val/
<task>.yaml
```
- [ ] **2.1 DDAW**(优先,与 DMS 疲劳最相关)
- 源:`ddaw_1124`(已是 YOLO 布局)
- 复制或软链到 `dms_yolo/ddaw/`
- 编写 `ddaw.yaml``path`、`nc: 9`、`names`(与 `gyp_org/configs/ddaw.yaml` 一致)
- 校验 train/val 一一配对
- [ ] **2.2 ADDW 检测**
- 源:`addw_0523`
- 同上,生成 `addw.yaml`4 类)
- [ ] **2.3 ISA 检测**(体量大,可放后)
- 源:`isa/jiancexunlian/isa_detect`(约 5 万 train 图)
- 生成 `isa.yaml`4 类indicative / prohibitory / warning / vehicle
- **必须**用 `stratified_split.py yolo` 按类重划分(约 6 万图,先 `--dry-run`
- [ ] **2.4 DAM**
- 源:`dam/src_data_0417_pick`jpg + xml
- [ ] 编写 xml → YOLO txt 转换脚本(可参考原 yolov5 `dam-0516` 流程)
- [ ] 划分 train/val 后写入 `dms_yolo/dam/`
- [ ] **2.5 ADDW 人脸 Pose**(若上 RKNN
- 源:`yoloface-0726`
- 确认 yolo26 是否支持 `format=rknn` + pose若不支持单独保留 ultralytics820 链路
- 生成 `yoloface.yaml``kpt_shape: [37,3]`
- [ ] **2.6 DOWN / 其他**
- 清点 `down/` 下是否有本地 `images/labels`;若仅 yaml 指远程路径,从 archive 或备份补数据
---
## 阶段 3清单与量化校准集RKNN 必需)
`rknn_export/convert.py` 需要 **图片路径列表 txt**(默认 `coco_subset_20.txt`)。
- [ ] **3.1** 每个任务生成 `manifests/<task>_calib_20.txt`2050 张代表性图,覆盖场景)
- [ ] **3.2** 每个任务生成 `manifests/<task>_train.txt` / `val.txt`(可选,用于训练记录)
- [ ] **3.3** 图片尺寸统一策略:
- 检测默认 **640×640**(与 `yolo export format=rknn` 一致)
- 记录原图分辨率,训练 yaml 里可设 `imgsz`
---
## 阶段 4迁入 yolo26 工程并训练
路径:`DMS/Code/yolo26_rknn_ultralytics-main`
- [ ] **4.1** 在工程下建 `data/` 或软链:`data/dms_yolo -> ../../DATASET/dms_yolo`
- [ ] **4.2** 冒烟训练(每个任务先 1 epoch / 小 subset
```bash
yolo detect train data=../../DATASET/dms_yolo/ddaw/ddaw.yaml model=yolo26n.pt epochs=1 imgsz=640
```
- [ ] **4.3** 正式训练记录:`runs/`、best.pt、指标
- [ ] **4.4** 导出 RKNN 用 ONNX
```bash
yolo export model=runs/detect/train/weights/best.pt format=rknn imgsz=640
```
---
## 阶段 5ONNX → RKNN
- [ ] **5.1** 使用任务专属校准列表:
```bash
python rknn_export/convert.py \
--model-path <best.onnx> \
--platform rk3588 \
--data-path ../../DATASET/dms_yolo/manifests/ddaw_calib_20.txt
```
- [ ] **5.2** 板端验证:原始输出 6 tensor + CPU 后处理decode/NMS见 README-EN
- [ ] **5.3** 与旧 yolov5/yolov8 模型对比精度与延迟
---
## 阶段 6清理与文档
- [ ] **6.1** 确认 `BK2/archive/gyp` 无再用压缩包(**已完成删 16 个,约释 43G**
- [ ] **6.2** 更新 `gyp_org/README.md`:指向 `dms_yolo` 新路径
- [ ] **6.3** 在 `DMS/Code/yolo26_rknn_ultralytics-main` 增加 `docs/DMS_DATASETS.md`(类名、路径、训练命令)
---
## 建议优先级
1. **DDAW** → 冒烟训练 → RKNN 导出(验证整条链路)
2. **ADDW 检测** → 同上
3. **DAM**(需 xml 转换)
4. **ISA**40G训练成本高按需
5. **人脸 Pose**(依赖 RKNN 对 pose 的支持情况)
---
## 当前磁盘参考
| 路径 | 大小(删包后) |
|------|----------------|
| `BK2/archive/gyp` | **~51G** |
| `DMS/DATASET/gyp_org` | ~48G若与 archive 重复,合并后可再省) |
| 系统盘可用 | **~137G** |
---
*生成日期2026-05-20*