YOLOv5数据集的文件结构和文件格式以及标注工具LabelImg的说明文档

本文主要是介绍YOLOv5数据集的文件结构和文件格式以及标注工具LabelImg的说明文档,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一 · 概述
  • 二 · 文件结构与数据格式
    • 2.1 数据集的文件结构
    • 2.2 数据格式
    • 2.2 文件结构
    • 2.3 标注文件的注意事项
  • 三 · 手动标注YOLOv5数据集
    • 3.1 标注工具的选择
    • 3.2 标注流程
  • 四 · 总结与注意事项
    • 4.1 `labelImg`的使用技巧与说明
    • 4.2 注意事项

一 · 概述

YOLOv5 是一个采用深度学习技术的目标检测模型。在训练这个模型时,需要创建一个特定格式的数据集。这篇文章将详细介绍 YOLOv5 训练数据集的创建方法、文件结构及其格式说明。

二 · 文件结构与数据格式

YOLOv5 采用了 .txt 文件来描述同名图像文件中目标的类别和位置信息。.txt 文件中的每一行代表图像中的一个目标,多个目标采用多行数据来保存。

2.1 数据集的文件结构

一般情况下, 一个完整的数据集包含三部分内容:

  • classes.txt 文件,用于记录类别名称
  • images 文件夹,用于保存图片文件
  • labels 文件夹,用于保存标注文件

注: imageslabels 文件夹中的文件名应该一一对应,即 images 文件夹中的图片文件和 labels 文件夹中的标注文件应该同名。

其中,数据集中对应的训练集、验证集和测试集分别放在 trainvaltest 文件夹中。同样,imageslabels 文件夹中的结构应该一一对应。数据比例建议 : 70% 用于训练,20% 用于验证,10% 用于测试。

文件结构如下:

dataset/
├── classes.txt
├── images
│   ├── train
│   │   ├── image1.jpg
│   │   └── ...
│   ├── val
│   │   ├── image3.jpg
│   │   └── ...
│   └── test
│       ├── image5.jpg
│       └── ...
└── labels├── train│   ├── image1.txt│   └── ...├── val│   ├── image3.txt│   └── ...└── test├── image5.txt└── ...

2.2 数据格式

举例说明,假设我们的任务是检测5个类别的目标:狗(dog)、人(person)、猫(cat)、电视(tv)和汽车(car)。那么 classes.txt 文件内容如下:

dog
person
cat
tv
car

.txt文本中记录的并非类别名称,而是类别的索引,从 0 开始。例如,dog 的索引为0,person 的索引为 1,以此类推。

索引类别
0dog
1person
2cat
3tv
4car

.txt文本中,每行记录一个目标对象的类别索引和位置信息,包含五个字段:<class> <cx> <cy> <width> <height>

  • class:类别索引,整数,从 0 开始。
  • cx、cy:浮点数,表示目标中心点的横坐标和纵坐标,归一化到图像宽高的比例,范围为 [0, 1]
  • width、height:浮点数,表示目标的宽度和高度,归一化到图像宽高的比例,范围为 [0, 1],

标注示意图如下:

600

注意cx、cy、width、height 都是相对于图像宽高的比例,而不是绝对像素值。
例如,如果一个目标的中心点位于图像的正中心,且占据了整个图像区域,格式为 0 0.5 0.5 1 1(假设目标类别为 0)。

2.2 文件结构

YOLOv5 训练数据集通常包含两部分:图像文件和对应的标注文件。每个图像文件对应一个同名但扩展名为 .txt 的标注文件。例如,对于图像 image.jpg,其对应的标注文件为 image.txt

在这个 .txt 文件中,每一行代表图像中的一个目标信息,按照 class cx cy width height 的顺序排列。例如,0 0.5 0.5 1 1 表示该图像有一个类别为 0(假设为猫)的目标,在图像正中心位置,且占据整个图像。

2.3 标注文件的注意事项

  • 所有数值使用空格隔开
  • 文件结束时可选一个空行,但不是必须的
  • 每行末尾不能有空格
  • 行与行之间不能有空行

注 : 标注文件不符合上述格式要求时,会导致在标注可视化或训练时出现错误。

三 · 手动标注YOLOv5数据集

训练所需要的图像可以从各种来源获取,例如公开数据集、互联网或者自己进行图片标注。如果你打算从网上收集图片,注意版权和使用许可。

接下来,需要在每张图像中标注出我们想要检测的目标。可以使用各种标注工具,如 labelImg。每张图片的标注结果会生成一个对应的 .txt 文件。

3.1 标注工具的选择

这里我们选用 labelImg 作为标注工具一个开源的图像标注工具,易于使用,支持 Pascal VOC YOLO 等多种格式。软件使用界面如下图所示:

600

3.2 标注流程

  1. 打开 labelImg 软件,点击 Open Dir 打开图像文件夹。
  2. 点击 Change Save Dir 设置标注文件保存路径。用于保存 .txt 标注文件
  3. 选择一张图像,点击 Create RectBox 按钮,然后在图像上框选目标,目标框选定后,在弹出的类别框中选择对应的类别即可,如下图所示:
    600
  4. 点击 Save 保存标注结果,软件会自动生成一个同名的 .txt 文件,保存了目标的类别和位置信息。

四 · 总结与注意事项

4.1 labelImg的使用技巧与说明

  • 快捷键w 新建矩形框,d 下一张图片,a 上一张图片,s 保存标注结果,del 删除当前矩形框
  • 自动保存: 点击工具栏的 View,在下拉菜单中勾选 Auto Save mode 即可开启自动保存模式
  • 类别显示: 点击工具栏的 View,在下拉菜单中勾选 Display Labels,即可在画面中对应的标注框中显示当前类别的名称
    400
  • 默认类别设置: 当标注单个类别目标时,设置默认类别,每次就不需要选择目标类别,工具自动填充,如下如所示,设置并勾选默认类别为 person 后,每次拉框直接默认类别,不需要再手动选择了
    400

4.2 注意事项

  • 文件格式:标注文件的格式必须符合 YOLOv5 的要求,否则 LabelImg 无法可视化标注框。参考[[#2.3 标注文件的注意事项]]

  • 中文路径:无论是文件夹路径还是图片名称,均不能包含中文字符,否则会导致标注文件保存失败

  • classes.txt: classes.txt 文件一定要放置在与标注文件同一级的目录中,否则 LabelImg 无法可视化标注框。

  • 标注提示文件: LabelImg 自带一个标注提示文件,用来填充标注时的标注提示框,文件位置处理data/predefined_classes.txt,确保文件中的类别名称与 classes.txt 文件中的类别名称一致。labelImg会自动读取这个文件,用于填充标注提示框。文件结构如下所示:

LabelImg
|__data
|   |__predefined_classes.txt
|__labelImg.exe

以上便是关于 YOLOv5 数据集的文件结构和数据格式的简要说明,关于如何使用 yaml文件配置训练时的训练集与测试集路径、以及多个数据集文件夹组合的配置方法,会通过另一篇文档详细记录与说明。

这篇关于YOLOv5数据集的文件结构和文件格式以及标注工具LabelImg的说明文档的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016208

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1