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

一· 概述

本文档主要记录 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.

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于训练YOLOv8模型来检测VOC2012数据集中的目标,你可以按照以下步骤进行操作: 1. 数据集准备:首先,确保你已经下载并准备好了VOC2012数据集。该数据集包含了训练图像和相应的标注文件,这些标注文件描述了图像中每个目标的位置和类别。 2. 标注文件转换:YOLOv8模型使用的是Darknet标注格式,而VOC数据集的标注文件是以XML格式提供的。你需要将VOC数据集的标注文件转换成Darknet格式。你可以使用一些工具或脚本来完成这个转换过程。 3. 数据集划分:根据你的需要,可以将数据集划分为训练集和验证集。一般来说,常用的划分比例是70%的图像用于训练,30%用于验证。 4. 修改配置文件YOLOv8模型有一个配置文件,其中包含了模型的相关设置。你需要根据你的需求修改这个配置文件,包括类别数量、训练和验证数据集的路径等。 5. 训练模型:使用YOLOv8模型的训练命令行工具开始训练模型。你需要指定配置文件数据集路径、权重文件等参数。训练过程中,模型会根据提供的图像和标注进行迭代优化。 6. 模型评估:训练完成后,你可以使用验证集对模型进行评估。通过计算模型在验证集上的预测结果与真实标注之间的差异,可以得到模型的性能指标,如精度、召回率等。 7. 模型使用:一旦模型训练完成并通过了验证,你可以将其用于检测新的图像。通过对图像进行预测,并根据预测结果进行后处理,可以识别出图像中的目标并标注它们的位置。 请注意,以上步骤仅提供了一个基本的训练流程,具体实施可能会因实际情况而有所不同。此外,YOLOv8模型的训练还可能需要一些其他的配置技巧,如数据增强、学习率调整等,以获得更好的检测性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值