YOLO数据集目录划分方式及对应的data.yaml配置

YOLO数据集目录划分方式及对应的data.yaml配置

YOLO数据集目录划分主要有两种主流方式,每种方式对应的data.yaml文件写法有所不同。下面我将详细介绍这两种划分方式及其配置方法。

一、YOLO数据集目录划分的两种主要方式

1. 基于文件夹的划分方式(推荐)

这是最常用的划分方式,将数据集按照train/val/test分别存放在不同的子文件夹中。目录结构如下:

dataset/
├── images/
│   ├── train/       # 训练集图片
│   ├── val/         # 验证集图片
│   └── test/        # 测试集图片(可选)
└── labels/
    ├── train/       # 训练集标签
    ├── val/         # 验证集标签
    └── test/        # 测试集标签(可选)

优点

  • 结构清晰,易于管理
  • 图片和标签文件一一对应
  • 适合大型数据集

2. 基于txt索引文件的划分方式

这种方式通过txt文件记录图片路径,不实际移动文件位置。目录结构如下:

dataset/
├── images/          # 所有图片混合存放
├── labels/          # 所有标签混合存放
├── train.txt        # 记录训练集图片路径
├── val.txt          # 记录验证集图片路径
└── test.txt         # 记录测试集图片路径(可选)

优点

  • 不改变原始文件位置
  • 适合小规模数据集或快速实验

二、data.yaml文件配置方法

1. 基于文件夹划分的data.yaml配置

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

# 训练集路径(相对path或绝对路径)
train: images/train  
val: images/val
test: images/test  # 测试集可选

# 类别数量
nc: 2

# 类别名称列表
names: ['cat', 'dog']

关键点

  • 路径可以是相对path的相对路径,也可以是绝对路径
  • YOLO会自动将images替换为labels查找对应的标签文件

2. 基于txt文件划分的data.yaml配置

# 训练集txt文件路径
train: train.txt
val: val.txt
test: test.txt  # 测试集可选

# 类别数量
nc: 2

# 类别名称列表
names: ['cat', 'dog']

关键点

  • txt文件中每行是图片的绝对路径
  • 标签文件路径由图片路径自动推断(将images替换为labels)

三、进阶配置与注意事项

1. 多数据集组合配置

可以组合多个数据集文件夹:

train:
  - ../dataset1/images/train
  - ../dataset2/images/train
val: ../dataset1/images/val
nc: 2
names: ['cat', 'dog']

2. 特殊参数配置

# 是否使用缓存加速训练(需要足够内存)
cache: ram  # 或disk

# 类别权重(用于不平衡数据集)
class_weights: [0.5, 1.0]  # 对应names顺序

3. 注意事项

  1. 路径格式

    • 使用正斜杠/而非反斜杠\
    • 避免中文路径和空格
  2. 类别顺序

    • names列表顺序必须与标注文件中的class_id一致
    • 从0开始连续编号
  3. 标签文件验证

    • 确保每个图片都有对应的标签文件
    • 验证标签文件格式是否正确
  4. 数据集划分比例

    • 常见比例:train:val:test = 70:20:10 或 80:10:10
    • 小数据集可省略test集

四、数据集划分代码示例

1. Python划分脚本示例

import os
import shutil
from sklearn.model_selection import train_test_split

# 参数设置
val_size = 0.1
test_size = 0.2
img_path = './images'
label_path = './labels'
output_dir = './dataset'

# 创建目录结构
os.makedirs(f'{output_dir}/images/train', exist_ok=True)
os.makedirs(f'{output_dir}/images/val', exist_ok=True)
os.makedirs(f'{output_dir}/images/test', exist_ok=True)
os.makedirs(f'{output_dir}/labels/train', exist_ok=True)
os.makedirs(f'{output_dir}/labels/val', exist_ok=True)
os.makedirs(f'{output_dir}/labels/test', exist_ok=True)

# 获取所有图片文件
img_files = [f for f in os.listdir(img_path) if f.endswith('.jpg')]

# 划分数据集
train, test = train_test_split(img_files, test_size=test_size, random_state=42)
train, val = train_test_split(train, test_size=val_size/(1-test_size), random_state=42)

# 复制文件到对应目录
for split, files in [('train', train), ('val', val), ('test', test)]:
    for f in files:
        # 复制图片
        shutil.copy(f'{img_path}/{f}', f'{output_dir}/images/{split}/{f}')
        # 复制标签
        label_file = f.replace('.jpg', '.txt')
        shutil.copy(f'{label_path}/{label_file}', f'{output_dir}/labels/{split}/{label_file}')

这个脚本会将原始数据集按比例划分到train/val/test子目录中

五、不同YOLO版本的注意事项

  1. YOLOv5

    • 支持上述两种划分方式
    • 推荐使用文件夹划分
  2. YOLOv8

    • 新增对OBB(旋转框)的支持
    • 需要额外配置角度参数
  3. YOLOv7/YOLOv6

    • 基本配置与YOLOv5类似
    • 注意模型配置文件差异

总结

YOLO数据集目录划分主要有文件夹划分和txt索引文件划分两种方式,对应的data.yaml配置有所不同。实际应用中,建议:

  1. 对于正式项目,使用文件夹划分方式,结构更清晰
  2. 对于快速实验,可以使用txt索引文件方式
  3. 始终验证数据集路径和标签文件是否正确
  4. 注意不同YOLO版本的特殊配置要求

通过合理的数据集划分和正确的data.yaml配置,可以确保YOLO模型训练过程顺利进行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值