利用Python高效整理猫狗数据集训练集与验证集(附源码讲解)
在进行目标检测或图像分类任务的准备过程中,我们常常需要将原始图片、标注文件(如 .json
或 .xml
)进行归类整理,分配到训练集(train)和验证集(val)中。
本文将分享两段实用的 Python 脚本,教你如何批量整理这些数据文件,让你专注于模型训练而非文件搬运。
✨ 脚本一:整理 JSON 标注的图像数据集
若你使用的是 JSON 格式标注(如 COCO 标准),这个脚本能帮你将图像与其对应的 JSON 文件分拣到统一的训练/验证路径下。
✅ 脚本功能概览
- 支持
.jpg
、.jpeg
、.png
图像格式; - 将猫和狗的数据按“训练集”和“验证集”两类分别归档;
- 同时整理图像与对应的 JSON 文件;
- 自动创建目标路径,避免手动建目录的繁琐。
📜 示例代码
import os
import shutildef copy_files(src_dir, dst_dir, exts):if not os.path.exists(src_dir):returnos.makedirs(dst_dir, exist_ok=True)for fname in os.listdir(src_dir):if any(fname.lower().endswith(ext) for ext in exts):shutil.copy(os.path.join(src_dir, fname), os.path.join(dst_dir, fname))base_dir = r"你的数据集根目录路径/猫狗/挑出来的"target_base = r"你希望存放整理后训练json和图像的路径"for split in ["训练集", "验证集"]:for animal in ["cat", "dog"]:img_src = os.path.join(base_dir, animal, split, "images")json_src = os.path.join(base_dir, animal, split, "json")if split == "训练集":img_dst = os.path.join(target_base, "训练", "images")json_dst = os.path.join(target_base, "训练", "json")else:img_dst = os.path.join(target_base, "验证", "images")json_dst = os.path.join(target_base, "验证", "json")copy_files(img_src, img_dst, [".jpg", ".jpeg", ".png"])copy_files(json_src, json_dst, [".json"])print("图片和json已整理完成!")
📂 脚本二:整理 XML 标注的图像数据集
如果你使用的是 VOC 格式的 XML 标注文件,那么这段代码会非常适合你。
🚀 脚本功能概览
- 同样支持猫/狗数据按“训练集”与“验证集”归档;
- 将 XML 标注文件与图像配对搬运;
- 简洁、直观,适合快速部署在任何图像分类项目中。
📜 示例代码
import os
import shutildef copy_files(src_dir, dst_dir, exts):if not os.path.exists(src_dir):returnos.makedirs(dst_dir, exist_ok=True)for fname in os.listdir(src_dir):if any(fname.lower().endswith(ext) for ext in exts):shutil.copy(os.path.join(src_dir, fname), os.path.join(dst_dir, fname))base_dir = r"你的数据集根目录路径/猫狗/挑出来的"target_train_base = r"你希望存放训练数据的路径"
target_val_base = r"你希望存放验证数据的路径"for split in ["训练集", "验证集"]:for animal in ["cat", "dog"]:img_src = os.path.join(base_dir, animal, split, "images")xml_src = os.path.join(base_dir, animal, split, "xml")if split == "训练集":img_dst = os.path.join(target_train_base, "images")xml_dst = os.path.join(target_train_base, "xml")else:img_dst = os.path.join(target_val_base, "images")xml_dst = os.path.join(target_val_base, "xml")copy_files(img_src, img_dst, [".jpg", ".jpeg", ".png"])copy_files(xml_src, xml_dst, [".xml"])print("训练集和验证集整理完成!")
💡 使用建议
- 路径问题:以上所有
base_dir
、target_base
等路径应替换为你本机或服务器上的真实路径; - 目录结构要求:
- 你的原始数据目录应具备如下结构:
猫/训练集/images 猫/训练集/json 或 xml 狗/验证集/images 狗/验证集/json 或 xml
- 若结构不同,请相应调整
os.path.join(...)
的拼接逻辑;
- 你的原始数据目录应具备如下结构:
- 环境依赖:仅需 Python 原生库
os
与shutil
,无需额外安装任何依赖,轻量实用。
📌 结语
数据的高效整理是深度学习项目成功的关键之一。与其手动搬运,不如写段小脚本让机器来干活!希望这两段代码能帮助你快速整理训练集数据,为接下来的模型训练扫清障碍。
如果你觉得有帮助,欢迎点赞、收藏,或者评论区交流你的优化思路!🚀