使用YOLOv8训练自定义数据集之二(数据集准备)
使用YOLOv8训练自定义数据集之二(数据集准备)
YOLO(You Only Look Once)系列算法是当前最流行的实时目标检测算法之一。本文将介绍如何为YOLOv8训练准备自定义数据集,包括数据标注工具的选择、数据格式以及训练模型的建议。
0x01 准备数据集
1. 图像标注工具
数据集是训练模型的基础素材。对于初学者来说,可以从一些开放网站中下载现成的数据集使用。官方推荐了一个名为Roboflow的数据集网站。Roboflow是一个免费开源数据集管理平台,它不仅提供免费的数据集,还支持上传自己的数据集并进行格式转换,一键导出VOC、COCO、YOLO、CSV等格式。此外,Kaggle也是一个知名的数据分析竞赛平台,里面会有一些开源的数据集可供使用。
另一种方式是使用离线工具自己标注数据。这里推荐两款工具:LabelImg和Labelme。
LabelImg:虽然在2021年10月份已经停止了GitHub仓库更新,且不支持在Python 3.9以上环境安装,但在conda环境下安装简单,操作易上手。不过需要注意,由于项目已停止更新,未来的发展存在不确定性。
Labelme:这是一款Python的标注工具,项目创建于2019年左右,社区活跃,一直在更新代码,截至2024年9月已发布了200多个版本。支持多种功能,如标注分类、多边形分割等,推荐使用。
2. 标注数据格式
这里着重介绍YOLO的数据格式。在开始标注前,需要了解一些关键的数据格式。
2.1 YOLO 标注格式
- yaml配置文件:在训练模型时需要指定数据集的配置文件,例如
coco.yaml
。配置文件中包含数据集的路径、训练集、验证集、测试集以及分类名称等信息。
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes (80 COCO classes)
names:
0: person
1: bicycle
2: car
# ...
77: teddy bear
78: hair drier
79: toothbrush
dataset数据集目录结构:训练集和验证集的结构相同,包含
images
和labels
两个目录,分别用于存储图片文件和txt标注文件。txt标注文件格式:每个txt文件每行包含一个对象的标注信息,格式为
class x_center y_center width height
,其中坐标和尺寸需要归一化到0到1之间。分类标签号必须从0开始。
2.2 COCO 标注格式
COCO数据集的标注格式是JSON格式,包含图像及其上的对象的详细信息。主要结构包括info
、licenses
、images
、annotations
和categories
。
{
"info": info,
"licenses": [license],
"images": [image],
"annotations": [annotation],
"categories": [category]
}
其中,annotations
记录了每一张图片的标注信息,是JSON中最重要的组成部分。
0x02 标注数据
建议使用标注工具进行数据标注,效率较高。根据经验,每类图片数量建议不少于1500张,每类实例数量不少于10000个。标注时需要确保标签的准确性和一致性,所有图像中所有类别的所有实例都必须贴上标签。
0x03 训练模型的Tips
要训练好一个模型,总会有一些问题,比如数据集大小、框图大小等。根据ultralytics官网的建议:
- 数据集大小:建议每类图片数量≥1500张,每类实例数量≥10000个。
- 图像种类:必须能代表部署环境,包括不同时间、季节、天气、光线、角度、来源等。
- 标签一致性:所有图像中所有类别的所有实例都必须贴上标签。
- 标签准确性:标签必须紧密包围每个对象,对象与边界框之间不得有空隙。
- 背景图像:建议使用约0-10%的背景图像来帮助减少误报率。