下面的内容实际上非常简单和基础,不涉及太高深的知识点。
之前介绍了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
图片进行介绍,其结果如下:
在YOLOv5的实现代码中,其中utils/general.py
模块中的xywh2xyxy
及xyxy2xywh
函数分别用于将YOLO格式转换为标注的边界框和标注数据集转换为YOLO格式。
如果喜欢这篇文章或对您有帮助,可以:[☕] 请我喝杯咖啡 | [💓] 小额赞助


