将Pascal VOC格式数据集转换为YOLO格式数据集

将Pascal VOC格式数据集转换为YOLO格式数据集

介绍

Pascal VOC(Visual Object Classes)是一个广泛使用的图像分类和目标检测数据集。YOLO(You Only Look Once)是一个实时目标检测算法。在某些情况下,可能需要将Pascal VOC格式的数据集转换为YOLO格式,以便在YOLO模型中进行训练。

Pascal VOC格式

Pascal VOC格式的数据集通常包含图像文件和对应的XML文件。XML文件包含每个图像中目标的类别、边界框等信息。

YOLO格式

YOLO格式的数据集要求将每个图像的目标标注信息存储在一个文本文件中,每一行表示一个目标,格式为class x_center y_center width height

转换步骤

  1. 从Pascal VOC的XML文件中解析目标信息,计算出目标的中心坐标、宽度和高度。

  2. 将目标信息格式化为YOLO格式的标注信息。

  3. 将YOLO格式的标注信息写入文本文件。

Python代码示例

import os
import xml.etree.ElementTree as ET

def convert_voc_to_yolo(voc_folder, output_folder):
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    for xml_file in os.listdir(voc_folder):
        if xml_file.endswith('.xml'):
            tree = ET.parse(os.path.join(voc_folder, xml_file))
            root = tree.getroot()

            yolo_file = os.path.splitext(xml_file)[0] + '.txt'
            yolo_path = os.path.join(output_folder, yolo_file)

            with open(yolo_path, 'w') as f:
                for obj in root.findall('object'):
                    cls = obj.find('name').text
                    bbox = obj.find('bndbox')
                    x_center = (float(bbox.find('xmin').text) + float(bbox.find('xmax').text)) / 2
                    y_center = (float(bbox.find('ymin').text) + float(bbox.find('ymax').text)) / 2
                    width = float(bbox.find('xmax').text) - float(bbox.find('xmin').text)
                    height = float(bbox.find('ymax').text) - float(bbox.find('ymin').text)

                    yolo_line = f"{
      
      cls} {
      
      x_center} {
      
      y_center} {
      
      width} {
      
      height}\n"
                    f.write(yolo_line)

voc_folder = 'path_to_voc_data'
output_folder = 'path_to_output_folder'
convert_voc_to_yolo(voc_folder, output_folder)

结论

本文介绍了如何将Pascal VOC格式的数据集转换为YOLO格式,以便在YOLO模型中进行训练。通过解析XML文件并计算目标的坐标和尺寸,我们可以生成适用于YOLO模型的标注文件。

猜你喜欢

转载自blog.csdn.net/Silver__Wolf/article/details/132346930