YOLO 的 data.yaml 配置文件用于定义数据集的结构和类别信息。这里列出几种常见的写法和示例,在正式训练时需要根据实际需求正确配置 data.yaml 文件。

1. 基础配置(相对路径)

这是最常见的写法,使用相对路径来指定训练集、验证集和测试集的路径。

# 数据集根目录(可选)
path: ../datasets  # 相对于当前文件的路径

# 训练、验证和测试集的路径(相对于 path)
train: images/train  # 训练集图像路径
val: images/val      # 验证集图像路径
test: images/test    # 测试集图像路径(可选)

# 类别数量
nc: 5  # 假设有 5 个类别

# 类别名称列表
names: ['class1', 'class2', 'class3', 'class4', 'class5']

2. 使用绝对路径

如果项目需要在不同环境中运行,可以使用绝对路径来指定数据集的位置。

# 绝对路径
train: /absolute/path/to/train/images  # 训练集图像路径
val: /absolute/path/to/val/images      # 验证集图像路径
test: /absolute/path/to/test/images    # 测试集图像路径(可选)

nc: 5  # 类别数量
names: ['class1', 'class2', 'class3', 'class4', 'class5']  # 类别名称

3. 多数据集配置

如果需要同时使用多个数据集(例如,分别训练和验证),可以在 trainval 中指定多个路径。

# 多数据集配置
train:
  - /path/to/dataset1/train/images  # 数据集 1 的训练集
  - /path/to/dataset2/train/images  # 数据集 2 的训练集

val:
  - /path/to/dataset1/val/images    # 数据集 1 的验证集
  - /path/to/dataset2/val/images    # 数据集 2 的验证集

test: /path/to/test/images  # 测试集路径(可选)

nc: 5  # 类别数量
names: ['class1', 'class2', 'class3', 'class4', 'class5']  # 类别名称

4. 无测试集的配置

如果项目中没有测试集,可以省略 test 字段。

path: ../datasets  # 数据集根目录(可选)

train: images/train  # 训练集路径
val: images/val      # 验证集路径

nc: 5  # 类别数量
names: ['class1', 'class2', 'class3', 'class4', 'class5']  # 类别名称

5. 类别名称的字典格式(不推荐)

虽然 YOLO 通常使用列表格式定义类别名称,但某些版本可能支持字典格式。不过,建议使用列表格式以确保兼容性。

path: ../datasets

train: images/train
val: images/val

nc: 5
names:
  0: class1
  1: class2
  2: class3
  3: class4
  4: class5

注意事项

  1. 路径的正确性:确保路径正确指向图像文件夹。如果使用相对路径,path 字段是相对于 data.yaml 文件的位置。
  2. 类别数量和名称匹配nc 的值必须与 names 列表的长度一致。
  3. 缩进和格式:YAML 文件对缩进和格式非常敏感,确保使用正确的缩进(通常为 2 个空格)。
  4. 测试集可选test 字段是可选的,如果项目中没有测试集,可以省略。

示例项目结构

假设你的项目结构如下:

yolovX/
├── data/
│   └── datasets/
│       ├── images/
│       │   ├── train/
│       │   ├── val/
│       │   └── test/
│       └── labels/
│           ├── train/
│           ├── val/
│           └── test/
└── configs/
    └── data.yaml

对应的 data.yaml 文件可以这样写:

path: ../datasets  # 数据集根目录

train: images/train  # 训练集图像路径
val: images/val      # 验证集图像路径
test: images/test    # 测试集图像路径

nc: 5  # 类别数量
names: ['class1', 'class2', 'class3', 'class4', 'class5']  # 类别名称

总而言之

  • 使用相对路径更灵活,便于项目迁移。
  • 确保 ncnames 的值匹配。
  • 如果有多个数据集,可以在 trainval 中指定多个路径。
  • 避免使用字典格式定义类别名称,建议使用列表格式。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐