voc数据集格式与yolo数据集格式的区别及相互转化

news2024/10/1 1:28:30

Pascal VOC数据集是目标检测领域最常用的标准数据集之一,几乎所有检测方向的论文都会给出其在VOC数据集上训练并评测的效果。VOC数据集包含的信息非常全,它不仅被拿来做目标检测,也可以拿来做分割等任务,因此除了目标检测所需的文件之外,还包含分割任务所需的文件,比如 SegmentationClass, SegmentationObject等

下面我们来认识一下Pascal voc数据集的文件目录结构,Pascal VOC数据主要有2007和2012两年的数据,其中2007有train,val,test,而2012只有train和val

#第一级
VOCdevkit
├── VOC2007
└── VOC2012
#第二级
VOCdevkit/VOC2007
├── Annotations
├── ImageSets
├── JPEGImages
├── SegmentationClass
└── SegmentationObject

VOCdevkit/VOC2012
├── Annotations
├── ImageSets
├── JPEGImages
├── SegmentationClass
└── SegmentationObject
#以VOC2007为例,第三级
## Annotations
VOCdevkit/VOC2007/Annotations/
├── 000001.xml
├── 000002.xml
├── 000003.xml
├── 000004.xml
├── 000005.xml
├── 000006.xml
├── 000007.xml
├── 000008.xml
├── 000009.xml
├── 000010.xml
...
## JPEGImages
VOCdevkit/VOC2007/JPEGImages/
├── 000001.jpg
├── 000002.jpg
├── 000003.jpg
├── 000004.jpg
├── 000005.jpg
├── 000006.jpg
├── 000007.jpg
├── 000008.jpg
├── 000009.jpg
├── 000010.jpg
├── 000011.jpg
├── 000012.jpg
├── 000013.jpg

##ImageSets
VOCdevkit/VOC2007/ImageSets/
├── Layout
├── Main
└── Segmentation

#ImageSets第四级
VOCdevkit/VOC2007/ImageSets/
├── Layout
│   ├── test.txt
│   ├── train.txt
│   ├── trainval.txt
│   └── val.txt
├── Main
│   ├── aeroplane_test.txt
│   ├── aeroplane_train.txt
│   ├── aeroplane_trainval.txt
│   ├── aeroplane_val.txt
│   ├── bicycle_test.txt
│   ├── bicycle_train.txt
│   ├── bicycle_trainval.txt
│   ├── bicycle_val.txt
│   ├── bird_test.txt
│   ├── bird_train.txt
│   ├── bird_trainval.txt
│   ├── bird_val.txt
│   ├── boat_test.txt
│   ├── boat_train.txt
│   ├── boat_trainval.txt
│   ├── boat_val.txt
│   ├── bottle_test.txt
│   ├── bottle_train.txt
│   ├── bottle_trainval.txt
│   ├── bottle_val.txt
│   ├── bus_test.txt
│   ├── bus_train.txt
│   ├── bus_trainval.txt
│   ├── bus_val.txt
│   ├── car_test.txt
│   ├── car_train.txt
│   ├── car_trainval.txt
│   ├── car_val.txt
│   ├── cat_test.txt
│   ├── cat_train.txt
│   ├── cat_trainval.txt
│   ├── cat_val.txt
│   ├── chair_test.txt
│   ├── chair_train.txt
│   ├── chair_trainval.txt
│   ├── chair_val.txt
│   ├── cow_test.txt
│   ├── cow_train.txt
│   ├── cow_trainval.txt
│   ├── cow_val.txt
│   ├── diningtable_test.txt
│   ├── diningtable_train.txt
│   ├── diningtable_trainval.tx
│   ├── diningtable_val.txt
│   ├── dog_test.txt
│   ├── dog_train.txt
│   ├── dog_trainval.txt
│   ├── dog_val.txt
│   ├── horse_test.txt
│   ├── horse_train.txt
│   ├── horse_trainval.txt
│   ├── horse_val.txt
│   ├── motorbike_test.txt
│   ├── motorbike_train.txt
│   ├── motorbike_trainval.txt
│   ├── motorbike_val.txt
│   ├── person_test.txt
│   ├── person_train.txt
│   ├── person_trainval.txt
│   ├── person_val.txt
│   ├── pottedplant_test.txt
│   ├── pottedplant_train.txt
│   ├── pottedplant_trainval.tx
│   ├── pottedplant_val.txt
│   ├── sheep_test.txt
│   ├── sheep_train.txt
│   ├── sheep_trainval.txt
│   ├── sheep_val.txt
│   ├── sofa_test.txt
│   ├── sofa_train.txt
│   ├── sofa_trainval.txt
│   ├── sofa_val.txt
│   ├── test.txt
│   ├── train_test.txt
│   ├── train_train.txt
│   ├── train_trainval.txt
│   ├── train.txt
│   ├── train_val.txt
│   ├── trainval.txt
│   ├── tvmonitor_test.txt
│   ├── tvmonitor_train.txt
│   ├── tvmonitor_trainval.txt
│   ├── tvmonitor_val.txt
│   └── val.txt
└── Segmentation
    ├── test.txt
    ├── train.txt
    ├── trainval.txt
    └── val.txt
 

1.JPEGImages

这个文件夹中存放所有的图片,包括训练验证测试用到的所有图片。

2.ImageSets

这个文件夹中包含三个子文件夹,Layout、Main、Segmentation

  • Layout 文件夹中存放的是 train,valid,test 或者 train+valid 数据集的文件名
  • Segmentation文件夹中存放的是分割所用train,valid,test 或者 train+valid 数据集的文件名
  • Main 文件夹中存放的是各个类别所在图片的文件名,比如 cow_val,表示valid数据集中,包含有cow类别目标的图片名称。

3.Annotations

Annotation文件夹中存放着每张图片相关的标注信息,以xml格式的文件存储,标注文件中各个属性的含义,见下图。

红框区域内的内容是我们真正需要关注的,它包含。

  • filename:图片名称
  • size:图片宽高,
  • depth:表示图片通道数
  • object:表示目标,包含下面两部分内容。
    • 首先是目标的类别 name 为dog。pose表示目标姿势为left,truncated 表示是否是一个被截断的目标,1表示是,0表示不是,在这个例子中,只露出狗头部分,所以 truncated 为1。difficult 为 0 表示此目标不是一个难以识别的目标。
    • 然后是目标的 bbox 信息,可以看到,这里是以 [xmin,ymin,xmax,ymax] 格式进行标注的,分别表示dog目标的左上角和右下角坐标。xmin ,ymin ,xmax, ymax    bbox的坐标格式是box的左上角和右下角的坐标,坐标的方式是在第四象限,且x越往右越大,y越往下越大。

一张图片中有多少需要识别的目标,其 xml 文件中就有多少个 object。上面的例子中有两个object,分别对应人和狗。

yolo数据集的格式通常为:

class_id        x                y            w           h

下图为一张图片按照yolo格式进行标注的txt标注文件 

 voc与yolo数据集格式比较如下:

理解了voc格式的数据集以及yolo格式的数据集,那么将两者相互转化就容易多了。下面为voc转yolo格式的案例模板代码:

import xml.etree.ElementTree as ET
import os
 
 
voc_folder = r"E:\Download_Datasets\detection_reflect_clothes\Annotations" #储存voc格式的xml标注文件的文件夹
yolo_folder = r"E:\Download_Datasets\yolo_detection_reflect_clothes\labels" #转换后的yolo格式标注文件的储存文件夹
 
class_id = ["person",'other_clothes','hat','reflective_clothes'] #储存数据集中目标种类名称的列表,接下来的转换函数中会将该列表中种类名称对应的列表索引号作为写入yolo标注文件中该类目标的种类序号
 
#voc标注的目标框坐标值转换到yolo标注的目标框坐标值的函数
#按照上图复现计算过程
def convert(size, box):
    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)
 
#对单个voc标注文件进行转换成其对应的yolo文件的函数
def convert_annotation(xml_file):
    file_name = xml_file.strip(".xml")  # 这一步将所有voc格式标注文件取出后缀名“.xml”,方便接下来作为yolo格式标注文件的名称
    in_file = open(os.path.join(voc_folder,xml_file)) #打开当前转换的voc标注文件
    out_file = open(os.path.join(yolo_folder,file_name + ".txt",),'w') #创建并打开要转换成的yolo格式标注文件
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        cls = obj.find('name').text
        cls_id = class_id.index(cls)
        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)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
 
 
 
xml_fileList = os.listdir(voc_folder) #将所有voc格式的标注文件的名称取出存放到列表xml_fileList中
for xml_file in xml_fileList: #这里的for循环开始依次对所有voc格式标注文件生成其对应的yolo格式的标注文件
    convert_annotation(xml_file)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1072687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka与zookeeper的集群

基础配置 systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/configvi /etc/hosts ip1 node1 ip2 node2 ip3 node3zookeeper介绍 zookeeper是一个分布式的协调服务,主要用…

【广州华锐互动】车辆零部件检修AR远程指导系统有效提高维修效率和准确性

在快速发展的科技时代,我们的生活和工作方式正在被重新定义。这种变化在许多领域都有所体现,尤其是在汽车维修行业。近年来,AR(增强现实)技术的进步为这个行业带来了前所未有的可能性。通过将AR技术与远程协助系统相结…

无为WiFi的一批服务器

我们在多个地区拥有高速服务器&#xff0c;保证网速给力&#xff0c;刷片无压力 嘿嘿 <?phpinclude("./includes/common.php"); $actisset($_GET[act])?daddslashes($_GET[act]):null; $urldaddslashes($_GET[url]); $authcodedaddslashes($_GET[authcode]);he…

NPDP和PMP,产品经理应该考哪个?

PMP教的是如何做一个项目&#xff0c;NPDP教的是如何做一个产品。 而在一个产品开发过程中&#xff0c;PMP知识体系讲述的是如何给出一个“产品”&#xff0c;NPDP知识体系讲述的是产品开始到结束的过程。虽然产品的生命周期比项目的生命周期长&#xff0c;但从知识体系看&…

考研是为了逃避找工作的压力吗?

如果逃避眼前的现实&#xff0c; 越是逃就越是会陷入痛苦的境地&#xff0c;要有面对问题的勇气&#xff0c;渡过这个困境的话&#xff0c;应该就能一点点地解决问题。 众所周知&#xff0c;考研初试在大四上学期的十二月份&#xff0c;通常最晚的开始准备时间是大三暑假&…

深入了解 GPU 互联技术——NVLINK

随着人工智能和图形处理需求的不断增长&#xff0c;多 GPU 并行计算已成为一种趋势。对于多 GPU 系统而言&#xff0c;一个关键的挑战是如何实现 GPU 之间的高速数据传输和协同工作。然而&#xff0c;传统的 PCIe 总线由于带宽限制和延迟问题&#xff0c;已无法满足 GPU 之间通…

大数据软件开发的数据队列框架

在软件开发中&#xff0c;数据队列框架用于实现消息传递、异步通信和事件驱动的系统。以下是一些常见的数据队列框架和消息中间件&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Apache Kafka&…

小文的美丽转型:从美业学徒到皇嘉集团销售冠军

"" 小文来自山东菏泽的一个农村家庭&#xff0c;她为了供弟弟考上大学&#xff0c;家庭的负担很重&#xff0c;父母收入也不高。因此&#xff0c;小文只读到高一就来到省城的一家综合美容院&#xff0c;学习美甲和美容技术。每天早上起床后&#xff0c;她要打扫卫生&…

桌面文件不见了怎么恢复?4招轻松找回!

桌面文件不见了怎么恢复&#xff1f;4招轻松找回&#xff01; 不知道桌面文件不见了怎么恢复&#xff1f;阅读本文找到答案&#xff0c;这里向你介绍了桌面文件恢复的4种方法&#xff0c;并说明了详细的操作步骤&#xff0c;赶紧来试试&#xff01; 桌面文件突然不见了&…

黑五网一,亚马逊测评系统如何搭建,才能成为重要的运营手段

随着黑五网一购物狂欢节的临近&#xff0c;许多卖家都在积极备货、补单、优化产品&#xff0c;以争取在活动期间获得更好的销售业绩。然而&#xff0c;许多卖家在测评时遭遇了各种问题&#xff0c;例如砍单、掉评以及买卖家账号被封等。 据了解&#xff0c;很多卖家和测评服务…

第八章:关系数据库设计

一、范式 一、BC范式&#xff08;BCNF&#xff09; &#xff08;1&#xff09;定义 BC范式可以消除所有利用函数依赖发现的冗余 范式是对于关系模式而言的&#xff0c;即可以说关系模式R是一个范式。 因此对于BC范式&#xff0c;它需要满足的条件是&#xff0c;对于它的所有函…

网络安全工程师自主学习计划表(具体到阶段目标,保姆级安排,就怕你学不会!)

前言 接下来我将给大家分享一份网络安全工程师自学计划指南&#xff0c;全文将从学习路线、学习规划、学习方法三个方向来讲述零基础小白如何通过自学进阶网络安全工程师&#xff0c;全文篇幅有点长&#xff0c;同学们可以先点个收藏&#xff0c;以免日后错过了。 目录 前言…

Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。

一、执行ls -l /system/bin/ 查看一下用户和权限。 二、这些权限在哪里修改呢? 默认编译system/bin/可执行程序赋予权限的地方system\core\libcutils\fs_config.cpp 文件里面的android_files 三、使用实例,只有root和系统app权限才能执行某个命令,如上面的sn_writer命令,只…

【算法刷题】【链表】链表内指定区间反转:将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度)O(1)。

题目 解题 import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回…

正点原子嵌入式linux驱动开发——Linux内核启动流程

上一篇笔记学习了Linux内核的顶层Makefile&#xff0c;现在来看Linux内核的大致启动流程&#xff0c;Linux内核的启 动流程要比uboot复杂的多&#xff0c;涉及到的内容也更多&#xff0c;因此本章就大致的了解一Linux内核的启动流程。 链接脚本vmlinux.lds 要分析Linux启动流…

2023高交会“创新驱动发展·智慧赋能未来”招商工作已接近尾声

第二十五届中国国际高新技术成果交易会&#xff08;简称“高交会”&#xff09;将于2023年11月15日至19日在深圳会展中心举行。本届高交会以“创新驱动发展智慧赋能未来”为主题&#xff0c;聚焦战略性新兴产业和未来产业&#xff0c;集中展示中国高新技术成果和创新实力。 作为…

什么是基于意图的网络(IBN)

基于意图的网络是一种网络技术&#xff0c;它根据业务意图&#xff08;来自网络管理员的服务请求&#xff09;配置 IT 基础架构&#xff0c;无需任何人工干预&#xff0c;它不断提供关键的网络见解&#xff0c;并不断调整硬件配置以确保满足意图&#xff0c;它将网络从以设备为…

Java练习题-用冒泡排序法实现数组排序

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

超详细!Android Termux上如何安装MySQL,内网穿透实现公网远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

C++游戏后端开发(魔兽世界,MMO,TrinityCore源码拆解) 教程

基于魔兽开源后端框架 TrinityCore 的技术拆解课程 一、TrinityCore CMake项目构建 1.1 CMake的使用 什么是CMake , CMake 的工作流程 CMakeLists.txt的编写规则 静态库生成以及链接 动态库生成以及链接 嵌套CMake 1.2 Windows和Linux下编 译调试环境搭建 cmake和grap…