一组用于 YOLO 数据集批处理的小工具,覆盖常见的数据准备流程:
- 批量按同一区域裁剪图片,并同步修正 YOLO 检测/分割标签。
- 批量增强图片,并复制对应标签。
- 将 YOLO 标签转换为 LabelMe JSON,便于人工检查。
- 按图片文件名从旧数据集复制同名标签。
这个仓库主要解决数据处理后标签仍需保持一致的问题。裁剪时会同步裁剪并重新归一化 detection 边界框和 segmentation 多边形,而不是只处理图片。
建议使用 Python 3.10 或更新版本。
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txtlabelme 只在需要打开人工标注/检查界面时使用;如果只运行裁剪、增强和标签匹配脚本,可以不安装它。
工具默认使用 YOLO 常见目录结构:
dataset_root/
images/
xxx.jpg
labels/
xxx.txt
仓库中的 sample_folder/ 是一个最小示例。处理结果保存在 new_data/,其中生成的图片、标签和中间文件已加入 .gitignore。
Windows 下可双击:
.\batch_crop.bat或直接运行:
python .\batch_cropping.py选择 images 目录或多张图片后,在第一张图上框选裁剪区域。程序会对全部图片使用同一裁剪区域,并把结果输出到 new_data/temp_crop/images 和 new_data/temp_crop/labels。
Windows 下可双击:
.\batch_enhance.bat或直接运行:
python .\batch_enhancing.py默认增强配置保存在 config/enhance/e0.json。生成结果默认输出到 new_data/temp_<配置名>/images 和 new_data/temp_<配置名>/labels。
python .\labels_checking.py .\sample_folder --check check输出目录默认为 check/<数据集目录名>/。脚本会复制图片并生成同名 .json,方便用 LabelMe 打开检查。
如果有类别名配置,可通过 --data 指定 YOLO 的 data.yaml / data.txt:
python .\labels_checking.py .\sample_folder --data .\data.yamlpython .\labels_matching.py --new .\new_data\pending_data --old .\old_data_det脚本会读取 --new 目录下的 images,从 --old/labels 中复制同名 .txt 到 --new/labels。
.\labelme_enter.bat等价于运行 labelme。如果你使用 conda 环境,请先自行激活对应环境。
增强配置文件位于:
config/enhance/e0.json
可在 GUI 中保存新的配置,例如 e1.json。增强输出文件名会附加配置名前缀,例如 image_e0.jpg。
pip install -r requirements-dev.txt
python -m pytest -q测试覆盖检测框裁剪与重新归一化、裁剪边界截断、YOLO 到 LabelMe 的转换,以及按文件名补齐标签。
.
├── batch_cropping.py # 批量裁剪并同步 YOLO 标签
├── batch_enhancing.py # 批量图像增强并复制标签
├── labels_checking.py # YOLO 标签转 LabelMe JSON
├── labels_matching.py # 按图片名复制匹配标签
├── config/enhance/e0.json # 默认增强配置
├── sample_folder/ # 最小示例数据
├── tests/ # 标签处理测试
├── requirements-dev.txt # 测试依赖
└── new_data/.gitkeep # 本地输出目录占位
- 支持
.jpg、.jpeg、.png、.bmp、.tif、.tiff、.webp。 - 裁剪脚本支持 YOLO detection 和 segmentation 标签。
new_data/中的处理结果和check/中的检查文件已加入.gitignore。