Files
HSAP/datasets/dms/docs/TODO_gyp_to_yolo26.md

177 lines
6.7 KiB
Markdown
Raw Normal View History

# 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*