概述
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 使用归一化的边界框格式,每行代表一个目标:
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
| 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 目标检测的数据准备环节。掌握正确的数据集组织和标签格式是成功训练模型的基础。