VOC格式数据集转yolo格式数据集

yolo数据集格式

YOLO数据集的格式是txt文件,每个txt文件对应一个图像,文件名与图像名相同(例如:image1.jpg对应的txt文件为image1.txt)。

每个txt文件包含了该图像中所有目标的标注信息,每一行代表一个目标。每个目标行包含了以下信息:

<object-class> <x> <y> <width> <height>

其中,<object-class>是目标类别的整数标识,<x><y>是目标边界框的中心点在图像中的坐标(范围为0到1),<width><height>是目标边界框的宽度和高度(同样是相对于图像尺寸的比例,范围也是0到1)。

下面是一个示例txt文件的内容:

0 0.35 0.50 0.20 0.30
1 0.60 0.70 0.25 0.40

以上内容表示该图像中包含两个目标,第一个目标的类别是0,边界框中心点的x坐标为0.35,y坐标为0.50,宽度为0.20,高度为0.30;第二个目标的类别是1,边界框中心点的x坐标为0.60,y坐标为0.70,宽度为0.25,高度为0.40。

YOLO系列目标检测数据集大全

coco数据集格式

COCO数据集最初是在2014年由微软研究院提出的。

COCO(Common Objects in Context)是一个广泛使用的图像识别、目标检测和分割数据集,它包含了超过33万张图像和超过200万个物体的标注信息,涵盖了80个常见的目标类别。COCO数据集的目标是提供一个大规模、丰富多样、高质量的图像标注数据集,以推动计算机视觉领域的研究和发展。

COCO数据集的标注信息包括物体的类别、边界框、关键点、实例分割等,其中边界框是最基本的标注信息,用于目标检测任务。

VOC数据集格式

VOC(Visual Object Classes)数据集是由英国牛津大学计算机视觉组(Oxford University Computer Vision Group)提出的。2005年,该组织发布了VOC2005数据集,这是一个包含了多个物体类别的图像数据集,并提供了物体检测、分类、定位等多种任务的标注信息。自此之后,每年该组织都会发布一版新的VOC数据集,如VOC2006、VOC2007、VOC2008等,直到2012年停止更新。VOC数据集成为了计算机视觉领域中目标检测和分割任务的经典数据集之一,被广泛应用于算法的研究和评估。

VOC(Visual Object Classes)数据集格式是一种常用的数据集格式,用于目标检测和图像分割任务的标注。VOC数据集格式包括了三个主要部分:图像文件、标注文件和类别文件。

  1. 图像文件:VOC数据集的图像文件可以是JPEG、PNG等格式,文件名必须唯一,并以.jpg或.png为后缀。

  2. 标注文件:VOC数据集的标注文件是一个XML文件,包含了对应图像中所有目标的位置、类别、难度等信息。

  3. 类别文件:VOC数据集的类别文件定义了所有物体类别的名称和编号

yolo2voc代码

import os
import xml.etree.ElementTree as ET
import cv2
# 读取YOLO格式标注文件
path = "./data/"
files = os.listdir(path)
files.sort(key=lambda x:int(x.split('.')[0]))
files = [f for f in files if f.endswith(".txt")]

# 遍历每个目标,将其转换为VOC格式
for file in files:
    # 解析YOLO格式的目标信息
    with open(path+file,'r') as f:
        line=f.readline().strip()
    line = line.strip().split()
    cls_name = line[0]
    x_center = float(line[1])
    y_center = float(line[2])
    w = float(line[3])
    h = float(line[4])
    image=cv2.imread('./JPEGImages/'+file.strip(".")[0]+'.jpg')
    img_height,img_width,img_channel=image.shape
    # 计算出左上角坐标和右下角坐标
    x_min = int((x_center - w / 2) * img_width)
    y_min = int((y_center - h / 2) * img_height)
    x_max = int((x_center + w / 2) * img_width)
    y_max = int((y_center + h / 2) * img_height)
    cv2.rectangle(image,(x_min,y_min),(x_max,y_max),(0,0,255))
    cv2.imshow('image',image)
    cv2.waitKey()

voc2yolo代码

import os
import xml.etree.ElementTree as ET

def convert(size, box):
    """将边界框坐标从VOC格式转换为YOLO格式"""
    dw = 1. / size[0]
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)

# 读取文件夹下所有xml文件
xml_path = "./Annotations/"
files = os.listdir(xml_path)
files.sort(key=lambda x:int(x.split('.')[0]))
files = [f for f in files if f.endswith(".xml")]

for file in files:
    # 解析XML文件
    tree = ET.parse(xml_path + file)
    root = tree.getroot()

    # 获取图像宽度和高度
    size = root.find("size")
    w = int(size.find("width").text)
    h = int(size.find("height").text)
    c=int(size.find("depth").text)

    # 遍历XML文件中的每个目标
    for obj in root.iter("object"):
        cls = 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 = convert((w, h), b)

        # 写入YOLO格式标注文件
        hh=file[:-4]
        with open('./data/' + file[:-4] + ".txt", "a") as f:
            f.write(f"{cls} {bb[0]} {bb[1]} {bb[2]} {bb[3]}\n")

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一壶浊酒..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值