news 2026/4/15 19:20:26

YOLO11数据集划分脚本使用说明,自动生成train/val集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO11数据集划分脚本使用说明,自动生成train/val集

YOLO11数据集划分脚本使用说明,自动生成train/val集

在使用YOLO11进行图像分割或目标检测任务时,一个高质量的数据集是模型训练成功的关键。而数据集的合理划分——将原始数据划分为训练集(train)和验证集(val)——则是整个流程中不可或缺的一环。手动划分不仅耗时费力,还容易出错。为此,YOLO11镜像中内置了自动化数据集划分工具,能够帮助用户快速、高效地完成这一基础但关键的操作。

本文将详细介绍如何使用YOLO11提供的tool_seg2datasets.py脚本来自动生成train/val数据集目录结构,并确保图片与标签文件正确对应、随机打乱且比例合理。无论你是刚接触YOLO11的新手,还是希望优化工作流的开发者,都能通过本文掌握这套标准化的数据处理方法。


1. 理解数据集划分的意义

1.1 为什么需要划分训练集和验证集?

在机器学习项目中,我们通常不会用全部数据来训练模型。如果这样做,就无法客观评估模型的真实性能。因此,标准做法是将数据划分为:

  • 训练集(train):用于模型学习特征和参数。
  • 验证集(val):用于在训练过程中监控模型表现,调整超参数,防止过拟合。

合理的划分可以让我们更准确地判断模型是否具备良好的泛化能力。

1.2 划分的基本原则

  • 随机性:样本应随机分配,避免因顺序导致偏差。
  • 类别均衡:各类别在训练集和验证集中分布尽量一致。
  • 不重叠:同一张图片不能同时出现在 train 和 val 中。
  • 路径清晰:生成的目录结构要符合 YOLO 框架的标准格式,便于后续训练调用。

2. 准备原始数据结构

在运行划分脚本前,需先准备好原始数据的组织方式。以图像分割任务为例,假设你已完成标注并准备进入训练阶段。

2.1 原始数据存放位置

建议将所有原始图像和对应的 JSON 标注文件统一放在如下路径:

ultralytics-8.3.9/resources/images/seg/json/

该目录下包含:

  • .jpg.png图像文件
  • 同名的.json标注文件(由 Labelme 生成)

示例结构:

json/ ├── img001.jpg ├── img001.json ├── img002.jpg ├── img002.json └── ...

2.2 使用Labelme完成标注

如参考博文所述,使用开源工具 Labelme 进行多边形标注:

pip install labelme labelme

标注时注意:

  • 使用“多边形”模式圈出目标区域
  • 正确输入类别名称(如person,car
  • 保存为 JSON 格式,与原图同名同目录

这一步完成后,即可进入下一步:将 JSON 文件转换为 YOLO 可读的标签格式。


3. 将JSON标注转为YOLO格式标签

YOLO系列模型不直接读取 JSON 文件,而是需要将其转换为纯文本.txt标签文件,每行表示一个对象,格式如下:

<class_id> <x1> <y1> <x2> <y2> ... <xn> <yn>

其中坐标为归一化的多边形顶点。

3.1 执行转换脚本

YOLO11镜像提供了专用转换脚本:

python tool/tool_json2label_seg.py

此脚本会自动遍历resources/images/seg/json/目录下的所有 JSON 文件,并生成对应的.txt标签文件,输出至:

ultralytics-8.3.9/resources/images/seg/labels/

提示:请确保tool_json2label_seg.py具备可执行权限。若报错,请检查路径及依赖库是否安装完整。


4. 使用tool_seg2datasets.py自动生成train/val集

这是本文的核心部分:如何使用内置脚本一键完成数据集划分。

4.1 脚本功能概述

tool/tool_seg2datasets.py是一个专为图像分割任务设计的数据集划分工具,主要功能包括:

  • 自动扫描指定目录中的图像和标签文件
  • 随机打乱数据顺序
  • 按设定比例(默认 9:1)划分训练集与验证集
  • 创建标准目录结构datasets/images/train,datasets/images/val,datasets/labels/train,datasets/labels/val
  • 复制文件到对应目录,保持名称一致

4.2 运行划分脚本

进入项目根目录后执行:

cd ultralytics-8.3.9/ python tool/tool_seg2datasets.py

运行过程示例输出:

Found 50 images and labels. Shuffling and splitting with ratio 0.9 : 0.1... Creating directories... Copying 45 images to train set... Copying 5 images to val set... Dataset split completed!

4.3 查看生成的目录结构

执行成功后,会在项目中创建以下结构:

resources/images/seg/datasets/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/

每个子目录中都存放着对应的数据文件,命名完全匹配,可直接用于训练。


5. 配置数据集信息文件(yaml)

为了让 YOLO11 模型知道从哪里读取数据,需要编写一个.yaml配置文件。

5.1 创建配置文件

新建文件:resources/config/data/yolo11-seg.yaml

内容如下:

# 数据集根路径(相对于训练脚本的位置) path: ../ultralytics-yolo11/resources/images/seg/datasets/images # 训练集和验证集路径(相对于 path) train: train val: val # 类别名称列表 names: 0: person 1: car

⚠️ 注意:path必须指向images的父级目录,YOLO 会自动在其中查找trainval子目录。

5.2 关键字段说明

字段说明
path数据集根目录,必须能访问到images/train,images/val
train训练集相对路径,一般为train
val验证集相对路径,一般为val
names类别映射表,索引从 0 开始

6. 实际训练调用示例

完成上述步骤后,就可以在训练脚本中引用该数据集配置。

6.1 编写训练脚本train_seg.py

from ultralytics import YOLO, settings # 设置日志和权重保存路径 settings.update({ "runs_dir": "./", "weights_dir": "./weights/seg" }) def main(): # 加载模型结构并预加载权重 model = YOLO("resources/config/model/yolo11-seg.yaml").load("weights/seg/yolo11n-seg.pt") # 开始训练 results = model.train( data="resources/config/data/yolo11-seg.yaml", # 数据配置 epochs=1000, patience=100, batch=16, imgsz=640, workers=4, optimizer='AdamW', lr0=1e-3, hsv_h=0.9, hsv_s=0.9, hsv_v=0.9, degrees=0.2, mosaic=1.0, scale=0.5, shear=0.2, augment=True, agnostic_nms=True, pretrained=True, cos_lr=True, resume=False # 新训练设为 False ) if __name__ == "__main__": main()

6.2 启动训练

python train_seg.py

只要数据路径无误,模型将自动加载trainval集,开始训练并实时输出验证指标。


7. 常见问题与解决建议

7.1 图片与标签未一一对应?

原因:原始 JSON 转换失败或命名不一致。

解决方案

  • 检查tool_json2label_seg.py是否正常运行
  • 确保图像与 JSON 文件同名(不含扩展名)
  • 手动核对labels/目录下是否有缺失文件

7.2 提示“找不到数据”?

原因yaml文件中的path路径错误。

解决方案

  • 使用相对路径时,务必确认是从训练脚本所在位置计算的
  • 可尝试打印os.getcwd()查看当前工作目录
  • 推荐使用绝对路径调试,确认后再改回相对路径

7.3 划分比例能否自定义?

目前tool_seg2datasets.py默认按 9:1 划分,如需修改比例,可编辑脚本中的split_ratio = 0.9参数。

例如改为 8:2:

split_ratio = 0.8 # 80% 训练,20% 验证

保存后重新运行即可生效。


8. 总结

本文系统介绍了如何利用 YOLO11 镜像提供的工具链,完成从原始标注数据到标准训练集的全流程构建。核心步骤总结如下:

  1. 准备原始图像与 JSON 标注,存于统一目录;
  2. 运行tool_json2label_seg.py,将 JSON 转为 YOLO 格式.txt标签;
  3. 运行tool_seg2datasets.py,自动生成train/val图像与标签目录;
  4. 编写.yaml配置文件,明确数据路径与类别;
  5. 在训练脚本中引用该配置,启动模型训练。

整套流程简洁高效,极大降低了数据预处理门槛,特别适合初学者快速上手图像分割任务。通过自动化脚本的支持,你可以把更多精力集中在模型调优和业务应用上,而不是繁琐的数据整理。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 16:08:39

零基础搭建本地实时语音转文字系统:隐私与效率的完美平衡

零基础搭建本地实时语音转文字系统&#xff1a;隐私与效率的完美平衡 【免费下载链接】WhisperLiveKit Real-time, Fully Local Speech-to-Text and Speaker Diarization. FastAPI Server & Web Interface 项目地址: https://gitcode.com/GitHub_Trending/wh/WhisperLive…

作者头像 李华
网站建设 2026/4/13 14:05:22

LIO-SAM完整安装指南:构建高精度激光雷达惯性SLAM系统

LIO-SAM完整安装指南&#xff1a;构建高精度激光雷达惯性SLAM系统 【免费下载链接】LIO-SAM LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping 项目地址: https://gitcode.com/GitHub_Trending/li/LIO-SAM 还在为机器人定位与建图系统的复杂…

作者头像 李华
网站建设 2026/4/14 3:37:49

零基础掌握QtScrcpy:安卓投屏全攻略

零基础掌握QtScrcpy&#xff1a;安卓投屏全攻略 【免费下载链接】QtScrcpy QtScrcpy 可以通过 USB / 网络连接Android设备&#xff0c;并进行显示和控制。无需root权限。 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 你是否曾经想要在电脑大屏幕上流畅操…

作者头像 李华
网站建设 2026/4/13 16:11:12

语音-噪声阈值怎么设?科哥手把手教你调出最佳效果

语音-噪声阈值怎么设&#xff1f;科哥手把手教你调出最佳效果 1. 引言&#xff1a;为什么你的语音检测总不精准&#xff1f; 你有没有遇到过这种情况&#xff1a;明明录音里有人在说话&#xff0c;系统却检测不到&#xff1b;或者环境有点风吹草动&#xff0c;模型就开始“幻…

作者头像 李华
网站建设 2026/4/13 9:00:16

ComfyUI-WanVideoWrapper 使用教程

ComfyUI-WanVideoWrapper 使用教程 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 项目介绍 ComfyUI-WanVideoWrapper 是一个开源项目&#xff0c;它为 ComfyUI 提供了一个包装器节点&#xff…

作者头像 李华