# yolo_tools **Repository Path**: zhangzhangzf/yolo_tools ## Basic Information - **Project Name**: yolo_tools - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-16 - **Last Updated**: 2026-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LabelMe 数据目录转 YOLO Segment 训练数据集 脚本文件:`labelme_json_to_yolo_seg.py` ## 功能 - 把 LabelMe 的 `polygon` 转成 YOLO 分割标签 - 把 LabelMe 的 `rectangle` 转成四个点的 polygon - 自动把输出数据集中的中文/特殊字符文件名整理为英文安全文件名 - 自动清理图像和标签不一一对应的无用源数据 - 生成 `train / val / test` 三个子集,默认比例 `7:2:1` - 生成可直接训练的 YOLO 数据集目录结构 - 生成可拷贝到 YOLO 项目中直接使用的 `dataset.yaml` - 可选读取已有 `dataset.yaml`,固定类别 ID 顺序 - 可选输出 `classes.txt` 和 `label_to_id.json` - 自动兼容 Windows 常见 JSON 编码:`utf-8` / `utf-8-sig` / `gbk` / `gb18030` ## 为什么需要这个工具 `yolo segment train` 要求每个目标都使用 polygon 标签: ```txt class_id x1 y1 x2 y2 x3 y3 ... ``` 不能把检测框格式: ```txt class_id x_center y_center width height ``` 和分割 polygon 混在同一个分割数据集中。 如果某些目标只做检测,也需要补成四点 polygon(矩形四个角点)。 ## 输入目录要求 默认场景: - 所有 `LabelMe JSON` - 对应图片 放在同一个目录下即可,工具会自动配对。 配不上的文件会按设置清理: - 默认移动到 `_orphaned` - 也可以改成 `delete` - 或 `ignore` ## 基本用法 ### 1. 使用已有 `dataset.yaml` 固定类别顺序(推荐) ```powershell conda activate yolo26 python G:\my_yolo\code\tools\labelme_json_to_yolo_seg.py G:\你的数据目录 --dataset-yaml G:\my_yolo\code\ultralytics\dataset.yaml --save-classes --overwrite ``` ### 2. 不依赖 `dataset.yaml`,自动从 JSON 收集类别 ```powershell conda activate yolo26 python G:\my_yolo\code\tools\labelme_json_to_yolo_seg.py G:\你的数据目录 --save-classes --overwrite ``` ### 3. 指定输出目录和划分比例 ```powershell conda activate yolo26 python G:\my_yolo\code\tools\labelme_json_to_yolo_seg.py G:\你的数据目录 --output-dir G:\你的数据目录\YOLODataset_seg --split 7 2 1 --save-classes --overwrite ``` ### 4. 无用数据直接删除 ```powershell conda activate yolo26 python G:\my_yolo\code\tools\labelme_json_to_yolo_seg.py G:\你的数据目录 --orphan-mode delete --overwrite ``` ## 输出内容 默认会在数据目录下生成: ```text YOLODataset_seg/ ├─ images/ │ ├─ train/ │ ├─ val/ │ └─ test/ ├─ labels/ │ ├─ train/ │ ├─ val/ │ └─ test/ ├─ annotations/ │ ├─ train/ │ ├─ val/ │ └─ test/ ├─ dataset.yaml ├─ prepare_summary.json ├─ classes.txt # 传 --save-classes 时生成 └─ label_to_id.json # 传 --save-classes 时生成 ``` 说明: - `images/`:训练图片 - `labels/`:YOLO segmentation 标签 - `annotations/`:清洗后、已改成英文安全文件名的 JSON 备份 - `dataset.yaml`:训练直接使用 - `prepare_summary.json`:本次清洗和划分摘要 ## 支持的 LabelMe shape_type - `polygon` - `rectangle` 其他类型(如 `circle`、`line`、`point`)会跳过并给出警告。 ## 划分比例 默认: ```text train : val : test = 7 : 2 : 1 ``` 可自定义,例如: ```powershell conda activate yolo26 python G:\my_yolo\code\tools\labelme_json_to_yolo_seg.py G:\你的数据目录 --split 8 1 1 --overwrite ``` ## 训练方式 生成完成后,直接使用生成的 `dataset.yaml`: ```powershell conda activate yolo26 yolo segment train model=yolo26n-seg.pt data=G:\你的数据目录\YOLODataset_seg\dataset.yaml epochs=20 imgsz=640 batch=1 device=cpu ``` ## 训练前建议 转换完成后,确认: 1. `labels/train/*.txt` 中每一行至少有 7 列以上(`class + 3个点以上`) 2. 不要再出现 `class x_center y_center w h` 这种检测框格式 3. 坐标已经归一化到 `0~1` 4. `dataset.yaml` 的 `names` 顺序和类别 ID 映射一致 5. `_orphaned` 中的文件是未配对或损坏的源数据,可人工复查