当前位置: 首页 > news >正文

【持续更新】WT-YOLO数据集配置与目录划分

本文将根据笔者实际经验来介绍YOLO数据集配置与目录划分,包括数据集配置文件dataset.yaml的详细解析,如有错误,欢迎评论区指正。

一、第一种:全面的文件目录框架

全面的YOLO项目目录框架,可支持使用多种数据集、训练多种模型。对于部署大型训练项目使用,不再赘述。

yolovX/  # YOLO 项目的根目录
├── data/  # 数据集相关文件
│   ├── datasets/  # 数据集存储目录
│   │   ├── coco/  # COCO 数据集
│   │   ├── voc/   # VOC 数据集
│   │   └── custom/  自 #定义数据集
│   │       ├── images/  # 图像文件
│   │       │   ├── train/  # 训练集图像
│   │       │   ├── val/   # 验证集图像
│   │       │   └── test/  # 测试集图像
│   │       └── labels/  # 标签文件
│   │           ├── train/  # 训练集标签
│   │           ├── val/   # 验证集标签
│   │           └── test/  # 测试集标签
│   ├── configs/  # 数据集配置文件
│   │   ├── coco.yaml  # COCO 数据集配置
│   │   ├── voc.yaml   # VOC 数据集配置
│   │   └── custom.yaml  # 自定义数据集配置
│   └── weights/  # 预训练权重文件
│       ├── yolovX_coco.pt  # 在 COCO 数据集上预训练的权重
│       └── yolovX_custom.pt  # 在自定义数据集上训练的权重
├── models/  # 模型定义和配置
│   ├── yolovX.py  # YOLO 模型定义
│   ├── backbone.py  # 主干网络(如 CSPDarknet)
│   ├── neck.py     # Neck 模块(如 PANet)
│   └── head.py     # Head 模块(如 YOLOHead)
├── utils/  # 工具函数
│   ├── datasets.py  # 数据集加载和处理
│   ├── general.py   # 通用工具函数(如 NMS、非极大值抑制)
│   ├── losses.py    # 损失函数
│   ├── metrics.py   # 评估指标(如 mAP)
│   ├── plots.py     # 可视化工具
│   └── torch_utils.py  # PyTorch 相关工具
├── runs/  # 训练和推理结果
│   ├── train/  # 训练结果
│   │   ├── exp0/  # 第一次实验
│   │   ├── exp1/  # 第二次实验
│   │   └── ...
│   └── detect/  # 推理结果
│       ├── exp0/  # 第一次推理
│       ├── exp1 / # 第二次推理
│       └── ...
├── scripts/  # 脚本文件
│   ├── train.py  # 训练脚本
│   ├── val.py    # 验证脚本
│   ├── detect.py # 推理脚本
│   └── export.py # 导出模型脚本(如 ONNX、TensorRT)
├── requirements.txt  # 项目依赖
├── README.md  # 项目说明
└── main.py    # 主程序入口

二、第二种:单项目目录框架

笔者使用,主要用于单数据集的小型项目,以下两种划分方式都可以训练,本质没什么不同,主要看谁更有结构性或者看自己的偏好。

2.1 框架1

2.1.1 目录划分1

#WTYOLO训练模型目录框架25-04-13 目录划分一
yolovX/  # YOLO 项目的根目录
├── datasets/  # 数据集相关文件
│   ├── images/  # 图像文件(JPG)
│   │          ├── train/  # 训练集图像
│   │          ├── val/   # 验证集图像
│   │          └── test/  # 测试集图像
│   ├── labels/  # 标签文件(txt格式)
│   │           ├── train/  # 训练集标签
│   │           ├── val/   # 验证集标签
│   │           └── test/  # 测试集标签
│   ├── dataset.yaml  # 自定义数据集配置
│   │
│   └── weights/  # 预训练权重文件
│       ├── yolovX.pt  # 在官网数据集上预训练的权重
│       └── yolovX_yours.pt  # 在自定义数据集上训练的权重
│
├── models/  # 模型定义和配置以及输出训练模型目录
│   ├── yolovX.py  # YOLO 模型定义
│   ├── backbone.py  # 主干网络(如 CSPDarknet)
│   ├── neck.py     # Neck 模块(如 PANet)
│   ├── your_trained_model.py     # 已训练模型
│   └── head.py     # Head 模块(如 YOLOHead)
│
├── utils/  # 工具函数(可选)
│   ├── datasets.py  # 数据集加载和处理
│   ├── general.py   # 通用工具函数(如 NMS、非极大值抑制)
│   ├── losses.py    # 损失函数
│   ├── metrics.py   # 评估指标(如 mAP)
│   ├── plots.py     # 可视化工具
│   └── torch_utils.py  # PyTorch 相关工具
│
├── runs/  # 训练和推理结果(自动生成)
│   ├── train/  # 训练结果
│   │   ├── exp0/  # 第一次实验
│   │   ├── exp1/  # 第二次实验
│   │   └── ...
│   └── detect/  # 推理结果
│       ├── exp0/  # 第一次推理
│       ├── exp1 / # 第二次推理
│       └── ...
│
├── requirements.txt  # 项目依赖
├── README.md  # 项目说明
├── train.py  # 训练脚本
├── val.py    # 验证脚本
├── detect.py # 推理脚本
├── export.py # 导出模型脚本(如 ONNX、TensorRT)
├── more # 更多自定义脚本或目录

2.1.2 对应的数据集配置文件dataset.yaml

path: ../datasets
train: images/train
val: images/val
test: images/test

nc: n
names:
    0: class1
    1: class2
    2: class3
    3: ...
    4: classn

 解释:


path: ../datasets 
解析:配置数据集根目录(可选),但如果不设置该选项,系统会自动调用上一次训练的数据集(如果有的话),前一次训练的数据集配置结果会保存在'/root/.config/Ultralytics/settings.yaml'中,从而导致新的数据集训练调用旧的数据集而发生一些错误,所以建议配置该选项。可使用相对目录,如果要保证万无一失,建议使用绝对目录

引用他人的话:“这是数据集的路径,相对于代码的根目录;如果没有这个参数,则默认当前路径,也就是代码根目录”

笔者注:在 YOLO 的 dataset.yaml 配置文件中,训练图像路径前加 ../ 是为了表示相对路径,详见另一篇文章YOLO 的 data.yaml 配置文件路径解析-CSDN博客。

  • ../ 表示返回当前目录的上一级目录,因为dataset.yaml在datasets目录下,要从当前目录索引datatsets文件夹,首先要返回到上级目录再索引datatsets。

  • 这种路径配置方式使得项目结构更加灵活,方便在不同环境下迁移项目

train: images/train
val: images/val
test: images/test 

解析:该三项为数据集的图片和标签目录指向,在实际训练过程中,YOLO会自动将‘images’替换为‘labels’来索引图片对应的标签文件,所以不需要重复设置‘labels’的目录

nc: n
names:
    0: class1
    1: class2
    2: class3
    3: ...
    4: classn
解析:nc是 "number of classes" 的缩写,表示数据集中类别的数量。这个参数用于定义模型需要检测的目标类别总数,names字段用来指定目标检测类别的名称列表。该字段是一个 Python 列表形式,按照索引顺序对应标注中的类别 ID,有两种写法,一种就是如上展示的形式,另一种是列表形式,如下:

names: ['class1', 'class2', 'class3',...,'classn']

2.2 框架2

2.2.1目录划分2

#WTYOLO训练模型目录框架25-04-13 目录划分一
yolovX/  # YOLO 项目的根目录
├── datasets/  # 数据集相关文件
│   ├── train/  # 训练集
│   │   ├── images/  # 训练集图像(JPG)
│   │   └── labels/   # 训练集标签(txt)
│   ├── val/  # 验证集
│   │   ├── images/  # 验证集图像(JPG)
│   │   └── labels/   # 验证集标签(txt)
│   ├── test/  # 测试集
│   │   ├── images/  # 测试集图像(JPG)
│   │   └── labels/  # 测试集标签(txt)
│   ├── dataset.yaml  # 自定义数据集配置(定义路径和分类相关)
│   │
│   └── weights/  # 预训练权重文件
│       ├── yolovX.pt  # 在官网数据集上预训练的权重
│       └── yolovX_yours.pt  # 在自定义数据集上训练的权重
│
├── models/  # 模型定义和配置以及输出训练模型目录
│   ├── yolovX.py  # YOLO 模型定义
│   ├── backbone.py  # 主干网络(如 CSPDarknet)
│   ├── neck.py     # Neck 模块(如 PANet)
│   ├── your_trained_model.py     # 已训练模型
│   └── head.py     # Head 模块(如 YOLOHead)
│
├── utils/  # 工具函数(可选)
│   ├── datasets.py  # 数据集加载和处理
│   ├── general.py   # 通用工具函数(如 NMS、非极大值抑制)
│   ├── losses.py    # 损失函数
│   ├── metrics.py   # 评估指标(如 mAP)
│   ├── plots.py     # 可视化工具
│   └── torch_utils.py  # PyTorch 相关工具
│
├── runs/  # 训练和推理结果(自动生成)
│   ├── train/  # 训练结果
│   │   ├── exp0/  # 第一次实验
│   │   ├── exp1/  # 第二次实验
│   │   └── ...
│   └── detect/  # 推理结果
│       ├── exp0/  # 第一次推理
│       ├── exp1 / # 第二次推理
│       └── ...
│
├── requirements.txt  # 项目依赖
├── README.md  # 项目说明
├── train.py  # 训练脚本
├── val.py    # 验证脚本
├── detect.py # 推理脚本
├── export.py # 导出模型脚本(如 ONNX、TensorRT)
└── more # 更多自定义脚本或目录

2.2.2 对应的dataset.yaml文件

train: ../train/images
val: ../valid/images
test: ../test/images

nc: n
names: ['class1', 'class2', 'class3',...,'classn']

dataset.yaml文件解析如2.1.2说明。

三、YOLO txt标签文件解析

YOLO 标签文件用于标注图像中的目标对象,格式如下:

  • 每行代表一个目标对象,包含类别编号和边界框坐标。
  • 格式为:<class_id> <x_center> <y_center> <width> <height>
  • <class_id>:目标类别,从 0 开始编号,与 data.yaml 文件中的 names 对应。
  • <x_center> 和 <y_center>:目标框中心点的 x 和 y 坐标(相对于图像的宽度和高度),值的范围是 0 到 1。
  • <width> 和 <height>:目标框的宽度和高度(相对于图像的宽度和高度),值的范围是 0 到 1。

标签文件的命名通常与图像文件名相对应,例如图像文件名为 image.jpg,则标签文件名为 image.txt。标签文件所在文件夹与图像文件夹同级,通常命名为 labels

在配置数据集时,需要在 data.yaml 文件中指定训练集、验证集、测试集的路径,以及类别数量和类别名称列表。例如:

train: images/train
val: images/val
test: images/test
nc: 2
names: ['cat', 'dog']

其中,trainval 和 test 分别指向训练集、验证集和测试集的图像文件夹,nc 表示类别数量,names 是一个列表,包含数据集中所有类别的名称。一个txt标签文件的实例如下:

0 0.4192685102586976 0.06182933060807358 0.8144513826940232 0.31016862544711293
1 0.03568242640499554 0.44966785896780787 0.5325602140945584 0.5958099131323454
0 0.13648528099910795 0.39141543178334187 0.23015165031222123 0.44915687276443533
0 0.41570026761819806 0.3127235564639755 0.5316681534344335 0.4471129279509453
2 0.27029438001784123 0.656617271333674 0.8911685994647636 0.771078180889116
0 0.2943800178412132 0.8640776699029126 0.8920606601248885 0.9151762902401636
0 0.4041034790365745 0.7751660705160961 0.8893844781445138 0.8630556974961676
0 0.34611953612845675 0.774144098109351 0.4023193577163247 0.801226366888094
1 0.9063336306868867 0.3321410321921308 0.9625334522747547 0.7874297393970363
0 0.4005352363960749 0.5993868165559529 0.8938447814451382 0.655595298926929
0 0.5343443354148082 0.3137455288707205 0.8911685994647636 0.5973428717424629
1 0.03568242640499554 0.08686765457332651 0.2247992863514719 0.13336739908022482
0 0.12845673505798394 0.03372508942258559 0.22390722569134702 0.0858456821665815
2 0.3951828724353256 0.38988247317322433 0.41391614629794826 0.44864588656106286

四、关于YOLO settings的一些设置

配置settings,在train.py中引入settings模块进行配置。

from ultralytics import YOLO
from ultralytics import settings

# 设置模块配置说明
# settings模块用于管理YOLO训练时的全局配置项
# update()方法可更新运行目录、tensorboard集成等设置
# reset()方法可将所有设置恢复默认值

settings.update({'datasets_dir': 'datasets'})

# 将设置恢复为默认值
settings.reset()

# 初始化YOLOv8模型(加载预训练权重)
# 初始化YOLOv8模型
# 加载预训练的YOLOv8n模型(nano版本)
# 支持更换不同尺寸模型:s(small), m(medium), l(large), x(extra large)

打印settings

from ultralytics import settings

# View all settings
print(settings)

# Return a specific setting
#value = settings['runs_dir']

五、补充更新一:nc参数缺省说明(25/4/13)

在 YOLO 数据集配置文件中,有些案例使用了类别名称的字典格式,但在配置文件中不在包含"nc"参数,这里说明一下,即使使用了类别名称的字典格式,仍然建议明确指定 nc 参数(类别数量)。这是因为 nc 参数明确告诉模型类别总数,而字典格式的 names 虽然可以推断出类别数量,但并不是所有 YOLO 实现都支持这种格式。

5.1 nc参数非却省原因

  1. 明确性nc 参数明确指定了类别数量,避免了潜在的误解或错误。
  2. 兼容性:某些 YOLO 实现可能不支持字典格式的 names,明确指定 nc 可以确保兼容性。
  3. 一致性:YOLO 的官方实现通常使用列表格式的 names,明确指定 nc 可以保持与官方实现的一致性。

5.2 示例说明

以下是一个使用字典格式的 names 的配置文件示例,同时明确指定了 nc 参数:

path: ../datasets  # 数据集根目录(可选)

train: images/train  # 训练集图像路径
val: images/val      # 验证集图像路径
test: images/test    # 测试集图像路径(可选)

nc: 5  # 类别数量
names:
  0: class1
  1: class2
  2: class3
  3: class4
  4: class5

5.3 示例总结

  • 建议明确指定 nc 参数:即使使用字典格式的 names,仍然建议明确指定 nc 参数以确保明确性和兼容性。
  • 避免潜在问题:某些 YOLO 实现可能不支持字典格式的 names,明确指定 nc 可以避免潜在问题。
  • 保持一致性:与 YOLO 的官方实现保持一致,通常使用列表格式的 names 并明确指定 nc 参数。

N、更多内容【持续更新本文档】

更多内容待笔者进一步探索后更新分享

……

相关文章:

  • [特殊字符] 终端效率提升指南:zsh + tmux
  • MQ(RabbitMQ.1)
  • CSS 字体学习笔记
  • C#里使用MaterialDesign时在VS2022里出错
  • vdso概念及原理,vdso_fault缺页异常,vdso符号的获取
  • 【Raqote】 1.1.2 路径填充ShaderClipMaskBlitter结构体(blitter.rs)
  • AI(学习笔记第一课) 在vscode中配置continue
  • LVS(Linux虚拟服务器)
  • Go语言从零构建SQL数据库(7):实现ALTER TABLE语句的解析
  • Open-TeleVision源码解析——宇树摇操方案的重要参考:VR控制人形机器人采集数据
  • 【Docker基础】Compose 使用手册:场景、文件与命令详解
  • 数据结构第五版【李春葆】
  • AWS出海合规解决方案:全球业务扩张的技术指南
  • 深度学习理论-直观理解 Attention
  • 【语音识别】vLLM 部署 Whisper 语音识别模型指南
  • 理解 MCP 协议的数据传递:HTTP 之上的一层“壳子
  • Spring State Machine入门实践
  • 算法思想之位运算(二)
  • C语言编写的线程池
  • 【Mybatis-plus】应用笔记及用例(持续更新)
  • 三大猪企一季度同比均实现扭亏为盈,营收同比均实现增长
  • 国台办:相关优化离境退税政策适用于来大陆的台湾同胞
  • 庄语乐︱宋代历史是被“塑造”出来的吗?
  • 游客曝九寨沟打网约车被出租车围堵,官方:前者违规,后者做法不对
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 美媒:受关税政策影响,美国电商平台近千种商品平均涨价29%