VOC数据集(xml)标注格式转换为YOLOv5、v7(txt)和COCO2017(json)格式

本文介绍了如何将VOC数据集的XML标注转换为YOLOv5/v7的TXT格式和COCO2017的JSON格式。数据集由三种水果组成,转换过程涉及maketxt.py和voc2txt.py等脚本,用于创建TXT文件和划分训练、验证和测试集。同时,还详细讲述了XML转COCO JSON的步骤,包括使用voc2coco.py生成标注文件。
摘要由CSDN通过智能技术生成

目录

数据集介绍

xml2txt

标注格式介绍

转换步骤

1、maketxt.py

2、voc2txt.py

xml2json

标注格式介绍

转换步骤

1、maketxt.py

2、split_datasets.py

3、voc2coco.py


数据集介绍

本文所使用的数据集为三种水果数据集,下载链接为:https://download.csdn.net/download/weixin_43799388/84425688

  • 数据集文档结构如下:
|——-Fruit
	|---Annotations
		|---001.xml
		|---002.xml
		... ...
		|---340.xml
	|---images
		|---001.jpg
		|---002.jpg
		... ...
		|---340.jpg

数据使用精灵标注助手进行标注,并导出xml格式
若数据集数量巨大,且命名不规范,要按规范批量修改文件名,建议使用菲菲更名宝贝软件进行批量更改文件名,使用方式如下:
从官网下载并安装最新版本软件
打开软件后,点击左上角添加一个文件或文件夹,将要修改的文件导入软件
之后按照下图所示逐步进行修改,最后点击左上角开始更名,完成批量规范重命名操作

在这里插入图片描述

xml2txt


标注格式介绍

xml格式的标注信息中,box坐标信息是以xyxy格式标注的,也就是GT框的左上角坐标(xmin, ymin)和右下角坐标(xmax, ymax)        

YOLOv5中使用的数据标注文件为.txt,GT框坐标信息是以xywh格式标注的,也就是GT框的归一化中心点坐标(x, y)和归一化宽高(width, height),二者的区别去下图所示:

在这里插入图片描述

转换步骤

1、maketxt.py

  • 将原数据集划分为train、val和test三部分,其中train+val(组合成trainval部分)占总数据集90%,test部分占10%,train部分有占trainval部分的90%,因此,train: val: test = 8: 1: 1
  • 程序执行结果如下:
     
|——-Fruit
	|---Annotations
		|---001.xml
		|---002.xml
		... ...
		|---340.xml
	|---images
		|---001.jpg
		|---002.jpg
		... ...
		|---340.jpg
    |---ImageSets
		|---test.txt  # 存放测试集图片名称
		|---train.txt  # 存放训练集图片名称
		|---trainval.txt  # 存放训练验证集图片名称
		|---val.txt  # 存放验证集图片名称
  •  pytorch源码如下:
import os
import random

'''
对图片数据集进行随机分类
以8: 1: 1的比例分为训练数据集,验证数据集和测试数据集
运行后在ImageSets文件夹中会出现四个文件
'''
ROOT = '../datasets/Fruit/'
trainval_percent = 0.9
train_percent = 0.9
xmlfilepath = ROOT + 'Annotations'
txtsavepath = ROOT + 'ImageSets'
# 获取该路径下所有文件的名称,存放在list中
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open(ROOT + 'ImageSets/trainval.txt', 'w')
ftest = open(ROOT + 'ImageSets/test.txt', 'w')
ftrain = open(ROOT + 'ImageSets/train.txt', 'w')
fval = open(ROOT + 'ImageSets/val.txt', 'w')

for i in list:
    # 获取文件名称中.xml之前的序号
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

2、voc2txt.py

  • 将xml文件转化为txt文件,xml文件包含了对应的GT框以及图片长宽大小等信息,通过对其解析,并进行归一化最终读到txt文件中
  • 同时生成train、val和test数据集中图片的绝对路径,用于索引到图片位置
  • 程序执行结果如下:
|——-Fruit
	|---Annotations
		|---001.xml
		|---002.xml
		... ...
		|---340.xml
	|---images
		|---001.jpg
		|---002.jpg
		... ...
		|---340.jpg
    |---ImageSets
		|-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值