提示信息

Python:VOC 格式数据集转换为 YOLO 数据集格式

视而 已关注

要将数据集从 VOC 格式转换为 YOLO 格式,你需要进行几个步骤。VOC(PASCAL Visual Object Classes)格式使用 XML 文件来存储图像的注释信息,而 YOLO(You Only Look Once)格式则采用文本文件存储注释信息。以下是一个简单的转换程序流程:

  1. 提取信息
    读取 VOC XML 文件,提取出图像的宽、高及每个边界框(Bounding Box)的类别、xmin、ymin、xmax、ymax。

  2. 转换为 YOLO 格式
    YOLO 格式使用归一化的坐标,形式为 (class_id, x_center, y_center, width, height),其中坐标和尺寸都是相对于图像的宽和高进行归一化的。

    转换公式为:

    • x_center = (xmin + xmax) / 2 / image_width
    • y_center = (ymin + ymax) / 2 / image_height
    • width = (xmax - xmin) / image_width
    • height = (ymax - ymin) / image_height
  3. 保存为文本文件
    对于每个图像,用 YOLO 格式的注释信息创建一个 .txt 文件,文件名与对应的图像名相同。

以下是一个示例 Python 代码,用于实现上述转换过程:

  1. import os
  2. import xml.etree.ElementTree as ET
  3. def voc_to_yolo(xml_file, output_dir, image_width, image_height, class_names):
  4. tree = ET.parse(xml_file)
  5. root = tree.getroot()
  6. yolo_annotations = []
  7. for obj in root.findall('object'):
  8. class_name = obj.find('name').text
  9. class_id = class_names.index(class_name) if class_name in class_names else -1
  10. if class_id == -1:
  11. continue
  12. bndbox = obj.find('bndbox')
  13. xmin = int(bndbox.find('xmin').text)
  14. ymin = int(bndbox.find('ymin').text)
  15. xmax = int(bndbox.find('xmax').text)
  16. ymax = int(bndbox.find('ymax').text)
  17. # Convert to YOLO format
  18. x_center = (xmin + xmax) / 2 / image_width
  19. y_center = (ymin + ymax) / 2 / image_height
  20. width = (xmax - xmin) / image_width
  21. height = (ymax - ymin) / image_height
  22. yolo_annotations.append(f"{class_id} {x_center} {y_center} {width} {height}")
  23. base_name = os.path.basename(xml_file).replace('.xml', '.txt')
  24. with open(os.path.join(output_dir, base_name), 'w') as f:
  25. f.write("\n".join(yolo_annotations))
  26. # 示例参数
  27. vocs_dir = '/path/to/voc/xmls'
  28. output_dir = '/path/to/yolo/labels'
  29. image_width = 1920 # 图像宽度
  30. image_height = 1080 # 图像高度
  31. class_names = ['person', 'car', 'bicycle'] # 根据你的数据集调整类别名称
  32. if not os.path.exists(output_dir):
  33. os.makedirs(output_dir)
  34. for xml_file in os.listdir(vocs_dir):
  35. if xml_file.endswith('.xml'):
  36. voc_to_yolo(os.path.join(vocs_dir, xml_file), output_dir, image_width, image_height, class_names)

请确保在运行此脚本之前,根据实际的数据集设置图像的宽度、高度以及类别名称列表 class_names。此外,确保输入路径和输出路径均正确设置。运行脚本后,你将在 output_dir 指定的目录中找到转换后的 YOLO 格式的注释文件。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
视而 关注 已关注

最近一次登录:2024-11-21 01:13:17   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图