Files
Seg_Data_Server_Net/docs/DATASET_PREPARATION.md

87 lines
2.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.
# 数据集、Label、Mask 处理流程
本项目保留 `Seg/` 里的原始处理逻辑,并在网页端把上传数据集统一组织成:
```text
var/uploads/datasets/<dataset_name>/
images/ 原始图片或待推理图片
labels/ YOLO txt/json/yaml 标注
masks/ 语义分割灰度 mask 或彩色 label/mask
```
## 现有数据集样例
可以参考两个现有路径:
- `Seg/DataSet_Own/A_Ori``Seg/DataSet_Own/A_Label_Ori`
- `Seg/Seg_All_In_One_YoloModel/Yolo数据集构建/ORI``Label`
它们的核心要求是:原图和标注图用同一个文件 stem 配对。比如:
```text
images/sample_001.png
masks/sample_001.png
labels/sample_001.txt
```
如果彩色 label 带 `_label` 后缀,原脚本会在配对或转换时剥离这个后缀。
## 彩色 label 到训练 mask
`Seg/DataSet_Own/1. 图片预处理(内含使用手册)/4_deal_labels.py` 的流程是:
1. 从人工彩色 label 读取 RGB。
2. 用边缘检测、连通域检测、分水岭填充清理标注区域,输出 `*_label.png``*_pro_label_fold`
3.`Annotate_CLASSES``Annotate_PALETTE` 精确匹配颜色。
4. 背景写成 `0`,第一个类别从 `1` 开始写入灰度 GT mask。
5. 输出训练用 mask 到 `*_GT_label_fold`,默认后缀是 `_gtFine_labelTrainIds.png`
因此,新数据如果是 MMSeg/SegModel 语义分割训练,推荐准备:
```text
images/*.png
masks/*.png # 单通道灰度0 是背景1..N 是类别 id
```
如果手里只有彩色 label需要先按调色板转换成灰度 mask。新增类别时要同步维护
- `Annotate_CLASSES`
- `Annotate_PALETTE`
- `bg_PALETTE`
## 彩色 label 或 GT mask 到 YOLO txt
YOLO 分割训练使用 polygon txt。现有脚本路径
```text
Seg/Seg_All_In_One_YoloModel/Yolo数据集构建/2_Check_and_Gen_Txt_Label_sort_label.py
```
该脚本会读取 `ORI_GT_label_fold` 中的灰度 GT mask
- `0` 是背景;
- 非背景灰度值代表类别;
- 每个类别区域提取轮廓;
- 坐标按图片宽高归一化;
- 输出 `class_id x1 y1 x2 y2 ...``Data/labels/train``Data/labels/val`
网页端的上传数据集如果要直接训练 YOLO需要
```text
images/sample_001.png
labels/sample_001.txt
```
然后在数据集页生成 `dataset.yaml`,再启动 `yolo.train_custom`
## 新图片推理
如果只是对新图片做推理,不需要 mask 或 label
1. 在网页数据集页创建一个新数据集。
2. 把新图片上传到 `images`
3. 进入推理页,选择一个已经训练好的权重,例如 `best.pt`
4. 图片来源选择这个数据集,启动预测或热度图任务。
如果要把新图片加入训练,则必须额外提供同名的 `mask``label txt`,否则只能用于推理或人工复核。