文章目录
- 一 · 概述
- 二 · 文件结构与数据格式
- 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
文件夹,用于保存标注文件
注:
images
和labels
文件夹中的文件名应该一一对应,即images
文件夹中的图片文件和labels
文件夹中的标注文件应该同名。
其中,数据集中对应的训练集、验证集和测试集分别放在 train
、val
和 test
文件夹中。同样,images
和 labels
文件夹中的结构应该一一对应。数据比例建议 : 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
,以此类推。
索引 | 类别 |
---|---|
0 | dog |
1 | person |
2 | cat |
3 | tv |
4 | car |
.txt
文本中,每行记录一个目标对象的类别索引和位置信息,包含五个字段:<class> <cx> <cy> <width> <height>
- class:类别索引,整数,从 0 开始。
- cx、cy:浮点数,表示目标中心点的横坐标和纵坐标,归一化到图像宽高的比例,范围为 [0, 1]
- width、height:浮点数,表示目标的宽度和高度,归一化到图像宽高的比例,范围为 [0, 1],
标注示意图如下:
注意:
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
等多种格式。软件使用界面如下图所示:
3.2 标注流程
- 打开
labelImg
软件,点击Open Dir
打开图像文件夹。 - 点击
Change Save Dir
设置标注文件保存路径。用于保存.txt
标注文件 - 选择一张图像,点击
Create RectBox
按钮,然后在图像上框选目标,目标框选定后,在弹出的类别框中选择对应的类别即可,如下图所示:
- 点击
Save
保存标注结果,软件会自动生成一个同名的.txt
文件,保存了目标的类别和位置信息。
四 · 总结与注意事项
4.1 labelImg
的使用技巧与说明
- 快捷键:
w
新建矩形框,d
下一张图片,a
上一张图片,s
保存标注结果,del
删除当前矩形框 - 自动保存: 点击工具栏的
View
,在下拉菜单中勾选Auto Save mode
即可开启自动保存模式 - 类别显示: 点击工具栏的
View
,在下拉菜单中勾选Display Labels
,即可在画面中对应的标注框中显示当前类别的名称
- 默认类别设置: 当标注单个类别目标时,设置默认类别,每次就不需要选择目标类别,工具自动填充,如下如所示,设置并勾选默认类别为
person
后,每次拉框直接默认类别,不需要再手动选择了
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
文件配置训练时的训练集与测试集路径、以及多个数据集文件夹组合的配置方法,会通过另一篇文档详细记录与说明。