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

文章目录

  • 一· 概述
  • 二· 配置文件说明
    • 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.mzph.cn/pingmian/21231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPC-----RCF

RPC RPC(Remote Procedure Call Protocol)——远程过程调用协议。 RCF

linux命令:调试必备工具dmesg

在服务器上进行芯片调试时,我们会遇到各种各样的问题,很多问题与操作系统相关。此时就需要了解操作系统发生了哪些事件。 dmesg 是linux系统中用来打印或控制内核缓冲区内容的命令。这个环形缓冲区记录了系统启动以来发生的各种事件消息,包括…

ChatTTS改良版 - 高度逼真的人类情感文本生成语音工具(TTS)本地一键整合包下

先介绍下ChatTTS 和之前发布的 Fish Speech 类似,都是免费开源的文本生成语音的AI软件,但不同的是,ChatTTS测试下来,对于人类情感语调的模仿,应该是目前开源项目做的最好的,是一款高度接近人类情感、音色、…

MYSQL学习笔记-基础篇

一、SQL 1、DDL 2、DML 3、DQL 4、DCL 主要包括用户管理和权限控制 1)DCL-管理用户 --查询用户 use mysql select * from user;--新增用户 CREATE USER 用户名主机名 IDENTIFIED BY 密码eg: create user hahalocalhost identied by 123; cre…

ppo-clip的本质以及它为什么是另一种ppo-KL-penalty

显然&#xff0c;clip在优势函数A>0且重采样比例过大时截断了上限&#xff0c;在优势函数A<0且重采样比例过小时也截断了负值的上限。 我以第一种情况解释clip的作用。 首先&#xff0c;所有选择的action都是RL中你希望增大概率的action。 当A>0时&#xff0c;说明这…

WordPress中借助Table of Contents Plus+Widget Options插件,实现仅在文章侧边栏显示文章目录的功能

本文转自博主的个人博客&#xff1a;https://blog.zhumengmeng.work,欢迎大家前往查看。 原文链接&#xff1a;点我访问 序言&#xff1a;今天心血来潮&#xff0c;写了一篇文章&#xff0c;忽然发现自己的文章极少有目录&#xff0c;这对于长文章的阅读来说是十分不利的&#…

【自动驾驶】针对低速无人车的线控底盘技术

目录 术语定义 一般要求 操纵装置 防护等级 识别代号 技术要求 通过性要求 直线行驶稳定性 环境适应性要求 功能安全要求 信息安全要求 故障处理要求 通信接口 在线升级(OTA) 线控驱动 动力性能 驱动控制响应能力 线控制动 行车制动 制动响应能力 线控转向 总体要求 线控…

车联网安全入门——ICSim模拟器使用

文章目录 车联网安全入门——ISCim模拟器使用介绍主要特点&#xff1a;使用场景&#xff1a; 安装使用捕获can流量candumpcansnifferwiresharkSavvyCAN主要特点&#xff1a;使用场景&#xff1a; 重放can报文cansendSavvyCAN 总结 车联网安全入门——ISCim模拟器使用 &#x1…

SQL刷题笔记day8——SQL进阶——表与索引操作

目录 1 创建一张新表 2 修改表 3 删除表 4 创建索引 5 删除索引 1 创建一张新表 我的答案 create table if not exists user_info_vip (id int(11) primary key auto_increment Comment自增ID, # 有了主键就不用写not nul了 uid int(11) unique not null Comment用户ID, …

发现真正的诉求

在不久前&#xff0c;我在负责一个项目&#xff0c;设计了一个方案。但是&#xff0c;与我一同合作的同事对其中的一个设计点持有异议。我们尝试讨论解决&#xff0c;但似乎没有找到共识。然而&#xff0c;尽管双方的观点没有达成一致&#xff0c;我们都清楚地表达了自己的想法…

272 基于matlab的形态滤波和局域值分解(LMD)的齿轮故障诊断

基于matlab的形态滤波和局域值分解&#xff08;LMD&#xff09;的齿轮故障诊断&#xff0c;GUI交互界面。通过形态滤波对一维信号进行降噪处理&#xff0c;并通过LMD局部均值分解提取故障信号&#xff0c;最后提取处故障频率。程序已调通&#xff0c;可直接运行。 272 形态滤波…

[AIGC] DAG模型在任务调度中有什么优势?

DAG(Directed Acyclic Graph&#xff0c;有向无环图)在任务调度中的应用带来了以下优势&#xff1a; 清晰的任务依赖关系&#xff1a;在DAG模型中&#xff0c;任务以节点的形式存在&#xff0c;任务间的依赖关系通过有向边来表示。这使得任务关系清晰明了&#xff0c;易于理解和…

Mysql学习经验总结(一)

Mysql的简介&#xff1a; MySql是一个开源的关系型数据库管理系统&#xff0c;广泛应用于Web应用程序的数据存储和管理。它支持多用户并发访问&#xff0c;具有高性能、稳定可靠、易于使用和管理的特点。 MySql官网提供了详细的文档、下载、社区等资源&#xff0c;官网的地址…

微信小程序的服务调取

微信小程序的服务调取概述 微信小程序允许开发者通过网络请求与服务器进行交互&#xff0c;从而实现数据的上传和下载。这是通过小程序提供的API&#xff0c;如wx.request、wx.downloadFile、wx.uploadFile等来完成的。这些API使得小程序可以从远程服务器获取数据&#xff0c;…

文档智能开源软件

文档智能介绍&#xff1a; 文档智能通常指的是利用人工智能技术来处理和分析文档内容&#xff0c;以实现自动化、智能化的文档管理。文档智能的应用领域非常广泛&#xff0c;包括但不限于&#xff1a; 1. **文档识别**&#xff1a;使用OCR&#xff08;光学字符识别&#xff0…

Java+SVNCloud+Mysql课程设计

文章目录 1、主要内容2、所需准备3、与sql访问的中间类&#xff1a;SqlMessage4、窗口界面5、main方法 1、主要内容 课程设计&#xff0c;主要通过Javas wing创建窗口&#xff0c;jdbc连接云端mysql数据库进行基本操作&#xff0c;支持随机生成数据并用动态展示数据结果。 先…

一种最大重叠离散小波包特征提取和支持向量机的ECG心电信号分类方法(MATLAB 2018)

目前小波分析算法常采用Mallat快速算法。该算法由与滤波器卷积、隔点采样和隔点插零等三个环节组成。由于实际使用的滤波器并不具有理想频域特性&#xff0c;使得在标准二进小波算法中存在着频率混叠和小波系数失真等缺点&#xff0c;在标准二进小波包算法中还存在频带错乱现象…

matlab误差估计扩展卡尔

在MATLAB中实现扩展卡尔曼滤波&#xff08;Extended Kalman Filter, EKF&#xff09;时&#xff0c;误差估计是一个关键步骤。EKF是一种用于非线性系统状态估计的算法&#xff0c;它通过线性化非线性系统模型&#xff0c;并利用卡尔曼滤波的框架进行状态估计和误差估计。以下是…

展现市场布局雄心,ATFX再度亮相非洲峰会,开启区域市场新篇章

自2023年全球市场营销战略部署实施以来&#xff0c;ATFX在全球各区域市场取得了丰硕成果&#xff0c;其品牌实力、知名度、影响力均有大幅提升。在这场全球扩张的征程中&#xff0c;非洲市场日益成为集团关注的焦点。自2023年首次踏上这片充满潜力的市场以来&#xff0c;ATFX持…

【TB作品】MSP430 G2553 单片机口袋板,读取单片机P1.4电压显示,ADC

功能 读取P1.4电压&#xff0c;显示到口袋板显示屏&#xff0c;电压越高亮灯越多。 部分程序 while (1){ADC10CTL0 | ENC ADC10SC; // Sampling and conversion startLPM0;adcvalue ADC10MEM; //原始数据 0到1023adtest (float) adcvalue / 1024.…