yolov3 制作voc数据格式:xml转换成txt

本文介绍了如何按照VOC数据集的结构放置图像文件,包括Annotation中的XML文件、ImageSets的train/test.txt文本、JPEGImages的原始图像。使用labelImg进行图像标注并生成XML,然后通过修改并运行voc_label.py脚本,将XML转换为Yolo格式的TXT文件,最终在scripts文件夹下生成labels文件夹。
摘要由CSDN通过智能技术生成

 

按照voc数据集的结构放置图像文件。

1)Annotation中主要存放xml文件,每一个xml对应一张图像,并且每个xml中存放的是标记的各个目标的位置和类别信息,命名通常与对应的原始图像一样;

2)ImageSets我们只需要用到Main文件夹,这里面存放的是一些文本文件,通常为train.txt、test.txt等,该文本文件里面的内容是需要用来训练或测试的图像的名字;

3)JPEGImages文件夹中放我们已按统一规则命名好的原始图像。将新建的voc文件夹放到scripts/VOCdevkit/目录下,若无VOCdevkit文件夹则新建一个。

4)用labelImg标注图像。会自己生成相关标签的xml文件,很好用。

根据自己情况修改/scripts/voc_label.py脚本并运行,将xml文件转换成yolo格式的txt文件。同时会在scripts文件夹下生成labels文件夹。

--VOC  
    --Annotations  
    --ImageSets  
      --Main  
      --Layout  
      --Segmentation  
    --JPEGImages  
    --SegmentationClass//暂时可有可无 
    --SegmentationObject //暂时可有可无



代码:
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

classes = ["red","green","orange","ambiguous"]#红绿灯检测
def convert(s
YOLOv5(You Only Look Once version 5)是一种流行的物体检测算法,它通常需要标注的数据集包括图片文件和与其对应的标签信息。数据集中,图片信息存储为.jpg或.png格式,而标签信息通常是以.txt格式保存的,每个行对应一张图片的一组边界框注解。 将YOLOv5的txt格式数据转换为XML(如Pascal VOC标准),可以分为以下几个步骤: 1. **理解格式**:YOLOv5 txt格式通常是这样的: ``` image_id x_center y_center width height class_name ``` 而VOC XML格式需要包含图像信息、对象信息、类别等详细内容。 2. **创建XML文件**: - 创建一个新的XML文件,例如`image_001.xml` - 标题(`<annotation>`)、源(`<source>`, `<size>`)、主图像(`<folder>`, `<filename>`)和时间戳(可选)作为XML文档的开始。 - 对于每一行数据,解析出图片ID(`<object>`的`@name`)、坐标 (`x`, `y`, `width`, `height`) 和类别(`class`), 添加到相应的元素中。 3. **编写脚本**: - 使用Python或其他编程语言,比如写一个循环遍历txt文件,读取每行数据并生成对应的XML结构。这里可以用正则表达式提取坐标和类别。 - 每次处理一行数据,创建一个新的`<object>`元素,并添加到`<annotation>`下的`<objects>`列表中。 4. **保存文件**: - 将XML数据写入文件,记得关闭文件句柄。 下面是一个简单的Python示例(假设已导入所需的库): ```python import os import xml.etree.ElementTree as ET def convert_yolov5_to_xml(txt_file, output_dir): # 创建根元素 annotation = ET.Element('annotation') # 遍历txt文件 with open(txt_file, 'r') as f: for line in f: # 解析每一行数据 img_id, *coords_and_class = line.strip().split() object_element = ET.SubElement(annotation, 'object') ET.SubElement(object_element, 'name').text = img_id.split('.')[0] # 图片ID bbox = ET.SubElement(object_element, 'bndbox') x, y, w, h = [int(float(coord)) for coord in coords_and_class[::2]] # 提取坐标 ET.SubElement(bbox, 'xmin').text = str(x) ET.SubElement(bbox, 'ymin').text = str(y) ET.SubElement(bbox, 'xmax').text = str(x + w) ET.SubElement(bbox, 'ymax').text = str(y + h) ET.SubElement(object_element, 'difficult').text = '0' # 设置难度为0 ET.SubElement(object_element, 'category').text = coords_and_class[-1] # 类别 # 构建文件路径 output_path = os.path.join(output_dir, f"{img_id}.xml") tree = ET.ElementTree(annotation) tree.write(output_path) # 使用函数 convert_yolov5_to_xml('labels.txt', 'output_voc') ``` 记得替换`labels.txt`为你实际的txt文件路径,以及指定输出目录。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值