码力全开 / YOLO数据集格式简述

Created Sat, 28 Jun 2025 16:21:52 +0800 Modified Sat, 28 Jun 2025 16:44:16 +0800
563 Words 1 min

下面的内容实际上非常简单和基础,不涉及太高深的知识点。

之前介绍了YOLOv5训练的代码,下面介绍下YOLO数据集的格式,方便在自己训练自定义数据集时游刃有余。YOLO数据集由图像文件夹及对应标签文件夹组成,其中标签文件每行描述1个目标,格式为:

[类别索引] [x_center] [y_center] [width] [height]

其中后面4个值是归一化数值,取值在0-1之间。而x_center是边界框中心点x坐标,y_center是边界框中心点y坐标。而width是边界框宽度,height是边界框高度。

要使用OpenCV将其绘制出来,可以使用rectangle函数,由于该函数需要传入左上角坐标及右下角坐标。因此,其计算代码类似如下:

image_filename = "images/train2017/000000000520.jpg"

img = cv2.imread(image_filename)

height,width = img.shape[:2]

for label in labels:
	x,y,w,h = label[1:]
	width1 = int(width * x)
	width2 = int(width * w)
	height1 = int(height * y)
	height2 = int(height * h)
	x1 = width1 - width2 // 2
	y1 = height1 - height2 // 2
	x2 = width1 + width2 // 2
	y2 = height1 + height2 // 2
	cv2.rectangle(img,(x1,y1),(x2,y2),(0,0,255),1)

我们需要分别计算出其边界框中心点坐标及边界框的大小。我们用边界框中心点坐标减去边界框一半的大小得到其左上角坐标,而加上边界框一般的大小得到右下角坐标。

这里使用COCO128数据集中000000000520.jpg图片进行介绍,其结果如下:

image

在YOLOv5的实现代码中,其中utils/general.py模块中的xywh2xyxyxyxy2xywh函数分别用于将YOLO格式转换为标注的边界框和标注数据集转换为YOLO格式。

如果喜欢这篇文章或对您有帮助,可以:[☕] 请我喝杯咖啡 | [💓] 小额赞助