chore: 数据迁到 data/raw/ 后同步所有路径引用
原始数据从 data/<数据集> 移到了 data/raw/<数据集>。
- 聚类配置的 dataset.root:film / pearlescent 均改为 data/raw/ 下
- 检测配置的 img_dir 与 label_dir 注释同步
- README、data/README、算法文档、流程图(含重新渲染的 PNG)与各脚本
docstring 里的路径示例一并更新
- data/README 补充目录约定:原始数据只读放 data/raw/,
export_clusters.py 的派生数据集放在 data/ 下与 raw/ 平级
- 顺手把 unlabeled 数据集加进 datasets/__init__.py:此前它没在包初始化时注册,
build_dataset({"name": "unlabeled"}) 只有在别处先 import 过该模块时才可用
迁移后重跑全量聚类,结果与迁移前逐项一致(轮廓 0.3255、稳定性 0.9641、
簇大小 [4507, 3795, 4849, 1428])。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5f31ed0a92
commit
5d395b7c25
+23
-16
@@ -2,20 +2,27 @@
|
||||
|
||||
存放数据集本体或指向数据集的软链接;除本文件外的内容都不入库(见 .gitignore)。
|
||||
|
||||
标注采用 **YOLO 风格**:`images/` 下每张图在同层 `labels/` 里有一个同名 `.txt`。
|
||||
**原始数据一律放在 `data/raw/<数据集名>/` 下**,派生数据(如按聚类结果导出的数据集)
|
||||
放在 `data/` 下与 `raw/` 平级,两者一眼可分:
|
||||
|
||||
```
|
||||
data/
|
||||
└── film/
|
||||
├── images/ # 原图(或指向 NAS 的软链:ln -s /mnt/nas/film/images data/film/images)
|
||||
│ ├── train/0001.png
|
||||
│ └── val/0002.png
|
||||
├── labels/ # 与 images 目录结构一一对应
|
||||
│ ├── train/0001.txt
|
||||
│ └── val/0002.txt
|
||||
└── data.yaml # path / train / val / nc / names
|
||||
├── raw/ # 原始数据,只读
|
||||
│ └── film/
|
||||
│ ├── images/ # 原图(或指向 NAS 的软链:ln -s /mnt/nas/film/images data/raw/film/images)
|
||||
│ │ ├── train/0001.png
|
||||
│ │ └── val/0002.png
|
||||
│ ├── labels/ # 与 images 目录结构一一对应
|
||||
│ │ ├── train/0001.txt
|
||||
│ │ └── val/0002.txt
|
||||
│ └── data.yaml # path / train / val / nc / names
|
||||
└── film_r18_cluster_k4/ # 派生:scripts/export_clusters.py 的产物
|
||||
├── 0/ 1/ 2/ 3/
|
||||
└── manifest.json
|
||||
```
|
||||
|
||||
标注采用 **YOLO 风格**:`images/` 下每张图在同层 `labels/` 里有一个同名 `.txt`。
|
||||
|
||||
标注文件每行一个目标,坐标**相对图像宽高归一化**到 [0, 1],中心点格式:
|
||||
|
||||
```
|
||||
@@ -31,18 +38,18 @@ data/
|
||||
`data.yaml` 与 ultralytics 通用:
|
||||
|
||||
```yaml
|
||||
path: data/film
|
||||
path: data/raw/film
|
||||
train: images/train
|
||||
val: images/val
|
||||
nc: 5
|
||||
names: {0: scratch, 1: bubble, 2: particle, 3: crease, 4: stain}
|
||||
```
|
||||
|
||||
配置里的 `classes` 既可以直接写类别列表,也可以写成 `data/film/data.yaml` 由框架读取 `names`。
|
||||
配置里的 `classes` 既可以直接写类别列表,也可以写成 `data/raw/film/data.yaml` 由框架读取 `names`。
|
||||
|
||||
## 还没分类的样本
|
||||
|
||||
`data/film` 下按人工整理留下的目录(`grease`、`wrinkle`、`反面纵黑点` ……)只是历史产物,
|
||||
`data/raw/film` 下按人工整理留下的目录(`grease`、`wrinkle`、`反面纵黑点` ……)只是历史产物,
|
||||
不是最终类别。要重新梳理类别时用无监督聚类,它会忽略这些目录名、把所有图拉平处理:
|
||||
|
||||
```bash
|
||||
@@ -57,10 +64,10 @@ uv run python scripts/cluster_unlabeled.py --config configs/cluster/film.yaml
|
||||
```bash
|
||||
# labelme / VOC -> YOLO txt(顺带生成 data.yaml)
|
||||
uv run python scripts/convert_annotations.py --format labelme \
|
||||
--input data/film/labelme --images data/film/images \
|
||||
--output data/film/labels --data-yaml data/film/data.yaml
|
||||
--input data/raw/film/labelme --images data/raw/film/images \
|
||||
--output data/raw/film/labels --data-yaml data/raw/film/data.yaml
|
||||
|
||||
# 划分 train / val(默认建软链,不复制数据)
|
||||
uv run python scripts/split_dataset.py --images data/film/images \
|
||||
--labels data/film/labels --val-ratio 0.2 --data-yaml data/film/data.yaml
|
||||
uv run python scripts/split_dataset.py --images data/raw/film/images \
|
||||
--labels data/raw/film/labels --val-ratio 0.2 --data-yaml data/raw/film/data.yaml
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user