[yolov5] yolo的数据标签格式

本文介绍如何为YOLOv5目标检测模型准备数据集,包括创建dataset.yaml配置文件、使用工具添加并导出YOLO格式的标签,以及如何组织训练和验证图像及其对应的标签文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

yolov5 的标签格式

参考链接:

https://github.com/ultralytics/yolov5/issues/9816

翻译内容

你好!。感谢您询问YOLOv5🚀数据集格式。用于分割的XY坐标与用于长方体中心的标准坐标相同。

为了正确训练,您的数据必须为YOLOv5格式。有关数据集设置的完整文档以及开始培训您的第一个模型所需的所有步骤,请参阅我们的训练定制数据教程。以下是该教程的几个节选:

1.1 创建 dataset.yaml

COCO128是一个示例性的小教程数据集,由COCO train2017中的前128张图像组成。这些相同的128张图像用于训练和验证,以验证我们的训练管道是否会过拟合。data/COCO128.yaml是数据集配置文件(如下面所示),它定义了
1)数据集的根目录路径,train/val/test图像目录(或带有图像路径的*.txt文件)的相对路径

2)类名字典。

data/COCO128.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/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  ...
  77: teddy bear
  78: hair drier
  79: toothbrush

1.2 创建 lables

使用Roboflow Annotate这样的工具为图像添加标签后,将标签导出为YOLO格式,并使用一个*.txt文件(如果图像中没有对象,则不需要*.txt文件)。*.txt文件规格如下:

  • 每个对象一行
  • 每行的格式是:class x_center y_center width height
  • 方框的坐标必须要归一化到(0-1),如果方框以像素为单位,请将x_center和width除以图像宽度,将y_center和height除以图像高度。
  • 类别必须从0开始,。

对应于下面图像的标签文件包含2个人(类别0)和一个领带(类别27):

在这里插入图片描述
在这里插入图片描述

1.3 组织目录

根据以下示例组织您的训练和val图像和标签。YOLOv5假设/coco128位于/YOLOv5目录旁边的/dataset目录中。YOLOv5通过将每个图像路径中/images/的最后一个实例替换为/labels/,自动查找每个图像的标签。例如:

../datasets/coco128/images/im0.jpg  # image
../datasets/coco128/labels/im0.txt  # label

Good luck 🍀 and let us know if you have any other questions!

### YOLO标签格式 YOLO(You Only Look Once)是一种流行的实时目标检测算法,其标签文件通常是一个 `.txt` 文件,每张图像对应一个标签文件。YOLO标签格式由五个数值组成,表示为 `class_id x_center y_center width height`[^1]。 - **class_id**: 表示对象类别的索引编号。 - **x_center, y_center**: 对象边界框中心点相对于整个图像宽度和高度的比例坐标。 - **width, height**: 边界框的宽高相对于整幅图像比例尺寸。 这些值均被归一化到 `[0, 1]` 范围内,因此它们不依赖于具体像素大小,便于不同分辨率下的统一处理。 #### 计算方式 当从其他格式(如 VOC)转换至 YOLO 格式时,需按照如下公式进行计算: 对于一张分辨率为 \(W \times H\) 的图片, \[ x_{center} = (xmin + xmax) / (2 * W),\] \[ y_{center} = (ymin + ymax) / (2 * H),\] \[ width = (xmax - xmin) / W,\] \[ height = (ymax - ymin) / H.\] 其中,\(xmin, ymin, xmax, ymax\) 是原始矩形边界的绝对位置参数。 反之,如果要将 YOLO 数据转回 VOC XML 风格,则通过反向操作实现相应变换。 --- ### 常见标注工具介绍 目前存在多种支持创建或编辑 YOLO 类型数据集的图形界面工具,下面列举几个较为知名的选择及其特点: #### LabelImg 这是最广泛使用的开源标注工具之一,能够快速生成符合 YOLO 或 Pascal VOC 规范的数据集。它基于 PyQt5 构建,在跨平台方面表现出色。尽管如此,部分用户反馈认为它的交互体验不够友好流畅[^2]。 #### JieLabel 作为一款专为 YOLO 设计的强大软件包,JieLabel 不仅提供基础的手动标记功能,还引入了智能化辅助机制来提升效率。比如它可以利用预训练权重完成初步预测从而减少人工干预;另外值得一提的是内置完整的机器学习流水线管理能力,允许开发者轻松调整超参并导出兼容 ONNX Runtime 接口的结果模型[^3]。 以下是简单的 Python 实现片段展示如何批量执行两种常见互换逻辑: ```python import os from xml.etree import ElementTree as ET def convert_voc_to_yolo(voc_file_path, img_width, img_height): tree = ET.parse(voc_file_path) root = tree.getroot() size = root.find('size') w = int(size.find('width').text) h = int(size.find('height').text) objects = [] for obj in root.iter('object'): difficult = obj.find('difficult').text cls_name = obj.find('name').text xmlbox = obj.find('bndbox') b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text)) bb = [(b[0]+b[1])/2/w, (b[2]+b[3])/2/h, (b[1]-b[0])/w, (b[3]-b[2])/h ] class_id = get_class_index(cls_name) # 自定义函数获取类别ID line = f"{class_id} {' '.join([str(a) for a in bb])}\n" objects.append(line) with open(os.path.splitext(voc_file_path)[0] + ".txt", 'w') as out_f: out_f.writelines(objects) def convert_yolo_to_voc(yolo_line, image_size=(640, 480)): dw = 1./image_size[0] dh = 1./image_size[1] parts = yolo_line.strip().split() class_id = int(parts[0]) center_x = float(parts[1])*dw*image_size[0]*2-dw*image_size[0]/2 center_y = float(parts[2])*dh*image_size[1]*2-dh*image_size[1]/2 bbox_w = float(parts[3])*dw*image_size[0] bbox_h = float(parts[4])*dh*image_size[1] half_bbox_w = bbox_w/2. half_bbox_h = bbox_h/2. xmin = max(center_x-half_bbox_w, 0.) xmax = min(center_x+half_bbox_w, image_size[0]) ymin = max(center_y-half_bbox_h, 0.) ymax = min(center_y+half_bbox_h, image_size[1]) return { "class":get_class_name(class_id), "bbox":[int(xmin), int(ymin), int(xmax), int(ymax)] } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值