D~DIDI~DIDIDI!!!!

0%

yolo

概述

YOLO(You Only Look Once)是目前最流行的实时目标检测算法之一。与传统的两阶段检测器(如 R-CNN 系列)不同,YOLO 将目标检测视为一个单一的回归问题,从图像像素直接预测边界框坐标和类别概率,因此具有极快的推理速度。

本文介绍 YOLO 模型训练中的数据集组织结构标签格式规范,帮助快速准备自定义数据集进行目标检测训练。

数据集目录结构

YOLO 训练数据集需要遵循严格的目录结构规范。以人脸检测数据集 CASIA-FaceV5 为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CASIA-FaceV5/
├── images/ # 图像文件目录
│ ├── train/ # 训练集图像
│ │ ├── 001.png
│ │ ├── 002.png
│ │ └── ...
│ ├── val/ # 验证集图像
│ │ └── ...
│ └── test/ # 测试集图像
│ └── ...
└── labels/ # 标签文件目录(与 images 平行)
├── train/ # 训练集标签(与训练集图像一一对应)
│ ├── 001.txt
│ ├── 002.txt
│ └── ...
├── val/ # 验证集标签
│ └── ...
└── test/ # 测试集标签
└── ...

关键规则

规则 说明
目录对应 images/labels/ 必须平行存在且子目录名称一致
文件对应 每张图像必须有一个同名的 .txt 标签文件
空标签 背景图(无目标)可以保留空的 .txt 文件作为负样本
图像格式 支持 .jpg.png.bmp 等常见格式

标签格式(YOLO Format)

YOLO 使用归一化的边界框格式,每行代表一个目标:

1
<class_id> <x_center> <y_center> <width> <height>

参数说明

参数 说明 取值范围
class_id 类别索引(从 0 开始) 0, 1, 2, …
x_center 边界框中心点 X 坐标(归一化) 0.0 ~ 1.0
y_center 边界框中心点 Y 坐标(归一化) 0.0 ~ 1.0
width 边界框宽度(归一化) 0.0 ~ 1.0
height 边界框高度(归一化) 0.0 ~ 1.0

归一化公式:

  • x_center = (bbox_x + bbox_width / 2) / image_width
  • y_center = (bbox_y + bbox_height / 2) / image_height
  • width = bbox_width / image_width
  • height = bbox_height / image_height

标签示例

假设一张 640×480 的图像中有两个目标:

1
2
0 0.497656 0.437500 0.181250 0.295833
1 0.753125 0.612500 0.120312 0.183333
  • 第一行:类别 0 的目标,中心点 (0.498, 0.438),宽 0.181,高 0.296
  • 第二行:类别 1 的目标,中心点 (0.753, 0.613),宽 0.120,高 0.183

标注工具推荐

工具 特点 输出格式
LabelImg 经典标注工具,支持 YOLO/VOC 格式 YOLO txt / Pascal VOC xml
Labelme 支持多边形标注 JSON(需转换)
CVAT Web 端标注平台,支持团队协作 多种格式
Roboflow 在线标注 + 数据增强 + 模型训练 YOLO / COCO / VOC

数据集配置文件(data.yaml)

训练 YOLO 模型时,需要创建一个 data.yaml 配置文件来描述数据集:

1
2
3
4
5
6
7
8
9
10
# 数据集路径
train: ./CASIA-FaceV5/images/train
val: ./CASIA-FaceV5/images/val
test: ./CASIA-FaceV5/images/test

# 类别数量
nc: 2

# 类别名称列表
names: ['face', 'mask']

YOLO 版本对比

版本 框架 特点
YOLOv3 Darknet (C) 经典版本,多尺度检测
YOLOv4 Darknet (C) CSPDarknet + SPP + PANet
YOLOv5 PyTorch Ultralytics 实现,社区活跃
YOLOv7 PyTorch 训练时优化(BN 重参数化)
YOLOv8 PyTorch Ultralytics 最新版,支持检测/分割/分类

常用训练命令(以 YOLOv5 为例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 克隆 YOLOv5 项目
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt

# 开始训练
python train.py --img 640 --batch 16 --epochs 100 \
--data data.yaml \
--weights yolov5s.pt \
--name face_detection

# 推理测试
python detect.py --weights runs/train/face_detection/weights/best.pt \
--img 640 \
--source test_images/

相关文章

本文聚焦于 YOLO 目标检测的数据准备环节。掌握正确的数据集组织和标签格式是成功训练模型的基础。