YOLOv5训练数据集的配置文件格式与使用技巧

server/2025/1/11 8:45:45/

文章目录

  • 一· 概述
  • 二· 配置文件说明
    • 2.1 官方配置文件解析
    • 2.2 自定义数据集配置文件
    • 2.3 其他格式指定数据集路径
    • 2.4 多个数据集路径指定
  • 三· 总结
      • 注意事项

一· 概述

本文档主要记录 YOLOv5 算法在进行模型训练前,关于加载数据集的配置文件的说明。

默认情况下,YOLOv5 官方规定了数据集的格式与文件结构,分别使用 train test val 用于保存训练集、测试集、验证集的图片与标注文本,且图片与标注文件名为一一对应关系,如下所示:

dataset_cat_dog/
├── images/
│   ├── train/
│   │   ├── img1.jpg
│   │   └── ...
│   ├── test/
│   │   ├── img5.jpg
│   │   └── ...
│   └── val/
│       ├── img10.jpg
│       └── ...
└── labels/├── train/│   ├── img20.txt│   └── ...|── test/│   ├── img25.txt│   └── ...└── val/├── img30.txt└── ...

下面将详细讲解如何按照 YOLOv5 的要求,配置数据集的配置文件。

二· 配置文件说明

2.1 官方配置文件解析

YOLOv5 官方在源代码中提供了一个默认的配置文件 data/coco128.yaml,用于指定数据集的路径、类别数量、类别名称等信息,如下所示(以下内容为翻译版本,源文件链接 : coco128.yaml ):

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# COCO128 数据集 https://www.kaggle.com/ultralytics/coco128 (COCO数据集中train2017部分的前128张图片) 出自 Ultralytics
# 使用示例 : python train.py --data coco128.yaml
# 目录结构如下:
# parent
# ├── yolov5
# └── datasets
#     └── coco128  ← 如本地没有数据集,则会自动下载到这里# 训练/验证/测试集可以使用以下三种方式指定:1) 目录:path/to/imgs,2) 文件:path/to/imgs.txt,或者 3) 列表:[path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # 数据集根目录
train: images/train2017  # 训练集图片目录 ('path'的相对路径) 128 images
val: images/train2017  # 验证集图片目录 ('path'的相对路径) 128 images
test:  # test images (optional)# Classes
nc: 80  # 类别数量
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light','fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow','elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee','skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard','tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple','sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch','potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone','microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear','hair drier', 'toothbrush']  # 类别名称# Download script/URL (optional)
download: https://ultralytics.com/assets/coco128.zip

解析示例配置文件 coco128.yaml 的内容如下:

  1. 数据集路径与项目代码路径同级情况下,使用相对路径指定数据集根目录 path: ../datasets/coco128。这里的相对路径,是运行 train.py 脚本时的相对路径。
  2. 训练集、验证集、测试集的数据,分别使用 train val test 字段指定,这里的路径是相对于数据集根目录 path 的图片文件夹相对路径。
  3. 数据集的路径指定,不拘泥于目录形式,也可以使用文件形式或者列表形式指定数据集的路径。
  4. 类别数量 nc 与类别名称 names,分别指定了数据集中的类别数量与类别名称,这里的类别名称是按照训练数据集的类别名称进行指定的,在这里是 COCO 数据集的类别名称。

2.2 自定义数据集配置文件

通过上面的解析示例,我们可以知道,自定义数据集的配置文件,需要按照 YOLOv5 官方的要求,指定数据集的路径、类别数量、类别名称等信息。我们在使用自己的数据集时,需要相对应的修改配置文件。
例如,现在有一个猫狗检测数据集,数据集标签为 cat dog ,则自定义配置文件修改如下:

path: /home/user/project/dataset_cat_dog  # 数据集根目录,建议使用绝对路径
train: images/train  # 训练集图片目录 ('path'的相对路径)
val: images/val  # 验证集图片目录 ('path'的相对路径)
test: images/test  # 测试集图片目录 ('path'的相对路径)# Classes
nc: 2  # 类别数量
names: ['cat', 'dog']  # 类别名称

注意:上述根目录 path 使用的是 Linux 系统的绝对路径,如果是 Windows 系统,需要使用 \\ 或者 / 进行路径分隔。例如 E:/project/dataset_cat_dog 或者 E:\\project\\dataset_cat_dog

2.3 其他格式指定数据集路径

上文中使用的是图片文件夹的形式指定数据集路径,实际上还可以使用文件形式指定训练集、验证集、测试集的路径。

首先,我们需要将图片文件的路径保存到一个文本文件中,每一行为一个图片文件的路径,例如,训练集文件 train.txt ,如下所示:

/home/user/project/dataset_cat_dog/images/train/img1.jpg
/home/user/project/dataset_cat_dog/images/train/img2.jpg

然后,我们可以在配置文件中使用文件形式指定数据集的路径,如下所示:

path: /home/user/project/dataset_cat_dog  # 数据集根目录,建议使用绝对路径
train: train.txt  # 训练集图片文件 ('path'的相对路径)
val: val.txt  # 验证集图片文件 ('path'的相对路径)
test: test.txt  # 测试集图片文件 ('path'的相对路径)# Classes
nc: 2  # 类别数量
names: ['cat', 'dog']  # 类别名称

注意: train.txt val.txt test.txt 文件内容中的图片路径,是相对于运行 train.py 脚本时的相对路径。而配置文件中的 train: train.txt val: val.txt test: test.txt 是相对于数据集根目录 path 的相对路径。

建议:使用 train.txt 文件形式指定数据集路径时,最好使用绝对路径,避免路径错误导致数据集加载失败。

2.4 多个数据集路径指定

在实际应用中,我们可能会对模型的训练数据集进行多批次添加,此时,不必将多批次的数据融合到一起,可以分多个数据集文件夹存放,也方便如果某一批数据出现负面的提升效果后将其快速的剔除。

现在,还是以猫狗检测数据集为例,现在我们在 dataset_cat_dog 基础上,再添加一批数据,命名为 dataset_cat_dog2 , 文件目录结构如下:

dataset_cat_dog/
├── images/
│   ├── train/
│   ├── test/
│   └── val/
└── labels/├── train/|── test/└── val/dataset_cat_dog2/
├── images/
│   ├── train/
│   ├── test/
│   └── val/
└── labels/├── train/|── test/└── val/

此时,我们可以在配置文件中指定多个数据集路径,如下所示:

path: /home/user/project  # 数据集根目录,建议使用绝对路径
train: - dataset_cat_dog/images/train  # 训练集图片目录 ('path'的相对路径)- dataset_cat_dog2/images/train  # 训练集图片目录 ('path'的相对路径)
val:- dataset_cat_dog/images/val  # 验证集图片目录 ('path'的相对路径)- dataset_cat_dog2/images/val  # 验证集图片目录 ('path'的相对路径)
test:- dataset_cat_dog/images/test  # 测试集图片目录 ('path'的相对路径)- dataset_cat_dog2/images/test  # 测试集图片目录 ('path'的相对路径)

或者使用中括号形式指定多个数据集路径,如下所示:

path: /home/user/project  # 数据集根目录,建议使用绝对路径
train: [dataset_cat_dog/images/train, dataset_cat_dog2/images/train]  # 训练集图片目录 ('path'的相对路径)
val: [dataset_cat_dog/images/val, dataset_cat_dog2/images/val]  # 验证集图片目录 ('path'的相对路径)
test: [dataset_cat_dog/images/test, dataset_cat_dog2/images/test]  # 测试集图片目录 ('path'的相对路径)

注意:多个数据集路径指定时,需要保证每个数据集的类别数量与类别名称一致,否则会出现错误。

那么,使用文件形式指定多个数据集路径时,如下所示:

path: /home/user/project  # 数据集根目录,建议使用绝对路径
train: [train1.txt, train2.txt]  # 训练集图片文件 ('path'的相对路径)
val: [val1.txt, val2.txt]  # 验证集图片文件 ('path'的相对路径)
test: [test1.txt, test2.txt]  # 测试集图片文件 ('path'的相对路径)

注意:与使用txt文件指定单个数据集路径一样,多个数据集路径指定时,最好使用绝对路径,避免路径错误导致数据集加载失败。

三· 总结

本文主要讲解了 YOLOv5 算法在进行模型训练前,关于加载数据集的配置文件的说明。主要内容包括以下几个方面:

  1. 官方配置文件结构与解释:

    • 默认配置文件 coco128.yaml 的内容说明,包含数据集路径、类别数量与类别名称的设置。
    • coco128.yaml 文件的解析,演示如何基于相对路径和绝对路径设置路径。
  2. 自定义数据集的配置文件创建:

    • 通过示例演示如何自定义一个猫狗检测数据集的配置文件,如何修改类别数量和名称。
    • 提示不同操作系统的路径设置差异(Linux vs Windows)。
  3. 其他格式指定数据集路径:

    • 讲解如何使用文本文件的形式指定训练集、验证集、测试集的图片文件路径,通过文本文件保存各图片路径,并在配置文件中引用。
  4. 多个数据集的路径指定:

    • 介绍如何指定多个数据集文件夹分别存放数据,并在配置文件中通过列表方式指定多个数据集路径。
    • 演示如何在配置文件中使用列表形式指定多个数据集路径,确保每个数据集的类别数量与类别名称一致。

注意事项

  • 路径设置:

    • 相对路径与绝对路径的使用建议,特别是在不同操作系统间的差异。
    • 使用文本文件形式指定图片路径时,推荐使用绝对路径,防止路径错误。
  • 类别数量与名称一致性:

    • 确保在指定多个数据集路径时,各个数据集的类别数量与类别名称是一致的,以防止加载错误。
  • 文件形式指定路径:

    • 使用txt文件形式指定数据集路径时,确保配置文件中的路径是相对于数据集根目录的相对路径或直接使用绝对路径。

通过上述的讲解与示例,相信看过以后就可以进行模型训练了,happy hunting.


http://www.ppmy.cn/server/46838.html

相关文章

Chromium源码学习(1)—— 拉取源码,编译

阅读建议:先简单过一下整个文章目录结构,大致了解一下各个步骤在干什么,然后在上手操作可能会事半功倍。也许你遇到的有些问题文章中已经提及到了,但是由于你没有往下看导致卡进度。 Chromium简介 Chromium项目于2008年发布&…

GPU学习(1)

一、为什么要GPU 我们先看一个基本的神经网络计算 YF(x)AxB 这就是一次乘法一次加法 ,也叫FMA,(fused multiply-add) 如果矩阵乘,就是上面的那个式子扩展一下,所以又用了这张老图 比如你要多执行好几个yAxB,可能比较简…

【前端开发--css学习笔记】CSS超详细的学习笔记。前端开发css学习笔记(非常详细,适合小白入门)

二&#xff0c;CSS学习笔记 1&#xff0c;CSS语法 1-1 CSS 实例 CSS声明总是以分号 ; 结束&#xff0c;声明总以大括号 {} 括起来: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title…

MySQL 连接池在 Python 中的深度探索与实践

MySQL 连接池在 Python 中的深度探索与实践 在 Python 中&#xff0c;高效地管理数据库连接是一个关键任务&#xff0c;尤其是在处理大量并发请求时。MySQL 连接池作为优化数据库连接管理的工具&#xff0c;显得尤为重要。本文将从四个方面、五个方面、六个方面和七个方面&…

MybatisPlus @TableField之SqlCondition源码解析

应用对象&#xff1a;模型&#xff0c;作用&#xff1a;调用IService接口&#xff0c;使用查询包装器实现灵活的条件查询。 TableField(conditionSqlCondition.LIKE) 注解使用逻辑 com.baomidou.mybatisplus.extension.service.IService.page(分页对象&#xff0c;查询包装器…

VScode中对git的学习笔记

1.git是什么&#xff1f; Git是一个功能强大的分布式版本控制系统&#xff0c;由Linux内核的创始人Linus Torvalds在2005年创建。它以其速度、数据完整性和支持大型项目的能力而闻名&#xff0c;被广泛应用于软件开发中。Git允许开发者在本地机器上拥有完整的代码库副本&#x…

自动评论自动私信引流系统,自动化时代的挑战与机遇

随着科技的飞速发展&#xff0c;自动化技术已经渗透到我们生活的方方面面。从工业生产线上的机械臂到家庭中的智能助手&#xff0c;自动化不仅改变了我们的工作方式&#xff0c;也在重塑着社会的面貌。然而&#xff0c;在享受自动化带来的便利和效率的同时&#xff0c;我们也必…

桃金娘T2T基因组-文献精读17

Gap-free genome assembly and comparative analysis reveal the evolution and anthocyanin accumulation mechanism of Rhodomyrtus tomentosa 无缺口基因组组装及比较分析揭示了桃金娘的进化和花青素积累机制 摘要 桃金娘&#xff08;Rhodomyrtus tomentosa&#xff09;是…