1. 引言

YOLO(You Only Look Once)系列算法是目前目标检测领域应用最广泛的模型之一。无论是训练、验证还是部署,理解 YOLO 标准数据集的格式都是第一步。本文将从目录结构、标注文件、类别文件、配置文件等几个方面,系统梳理 YOLO 标准数据集的格式规范。

2. 数据集目录结构

YOLO 标准数据集通常采用以下目录结构,将图片和标注文件按训练集、验证集、测试集分开存放:

dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels/
│   ├── train/
│   ├── val/
│   └── test/
├── classes.txt
└── data.yaml

其中 images 目录存放原始图片,labels 目录存放与图片一一对应的标注文件,classes.txt 记录类别名称,data.yaml 是数据集配置文件。

3. 图片文件

YOLO 对图片格式没有严格限制,常见的 .jpg.png.bmp 等格式均可使用。图片文件名与对应的标注文件名必须保持一致(仅扩展名不同),例如:

images/train/000001.jpg
labels/train/000001.txt

4. 标注文件格式

YOLO 的标注文件是纯文本文件,每一行代表一个目标对象,格式为:

class_id x_center y_center width height

其中各字段含义如下:

  • class_id:目标所属类别的编号,从 0 开始,对应 classes.txt 中的类别顺序。
  • x_center:目标中心点的 x 坐标,归一化到 0~1 之间。
  • y_center:目标中心点的 y 坐标,归一化到 0~1 之间。
  • width:目标的宽度,归一化到 0~1 之间。
  • height:目标的高度,归一化到 0~1 之间。

归一化公式为:

x_center = (x_min + x_max) / 2 / image_width
y_center = (y_min + y_max) / 2 / image_height
width = (x_max - x_min) / image_width
height = (y_max - y_min) / image_height

5. 标注文件示例

假设一张 640×480 的图片中包含一个类别编号为 0 的目标,其边界框左上角坐标为 (100, 80),右下角坐标为 (300, 240),则标注文件内容为:

0 0.3125 0.3333 0.3125 0.3333

计算过程如下:

x_center = (100 + 300) / 2 / 640 = 0.3125
y_center = (80 + 240) / 2 / 480 = 0.3333
width = (300 - 100) / 640 = 0.3125
height = (240 - 80) / 480 = 0.3333

6. 类别文件 classes.txt

classes.txt 是一个纯文本文件,每行一个类别名称,行号即类别编号(从 0 开始)。例如:

person
car
bicycle

上述文件中,person 的编号为 0,car 的编号为 1,bicycle 的编号为 2。

7. 配置文件 data.yaml

YOLO 训练时通常使用一个 YAML 配置文件来指定数据集路径和类别信息,内容示例如下:

train: dataset/images/train
val: dataset/images/val
test: dataset/images/test

nc: 3
names: ['person', 'car', 'bicycle']

其中 trainvaltest 分别指定训练集、验证集、测试集的图片路径,nc 表示类别总数,names 是类别名称列表。

8. 常见注意事项

  • 标注文件中的坐标必须归一化到 0~1 之间,不能使用像素坐标。
  • 如果图片中没有目标对象,对应的标注文件应为空文件。
  • 类别编号必须从 0 开始连续编号,不能跳号。
  • 图片与标注文件的文件名必须完全一致(仅扩展名不同)。
  • 训练集、验证集、测试集的图片和标注文件要分别放在对应的子目录中。

9. 总结

YOLO 标准数据集的格式核心在于:图片与标注文件一一对应,标注文件采用归一化的中心点坐标和宽高表示边界框,类别通过编号映射到类别文件。掌握这一格式规范,是顺利进行 YOLO 模型训练和数据预处理的基础。

Logo

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

更多推荐