VOC数据格式介绍

news/2024/11/28 6:00:20/

        我们经常需要使用自己通过标注工具(如LabelImg、LabelMe等)生成的数据集或者一些开源数据集进行目标检测模型的训练,这些自定义数据集格式多样且不具有一致性,而目标检测的数据格式相比于其他任务又复杂很多,因此,为了兼容一些框架和源码,我们一般需要将自定义数据集转换为标准格式,这种标准格式指的一般是COCO格式VOC格式,因为它们非常出名,有一些针对的解析库,转换为COCO格式和VOC格式的数据集可以很方便地读取并用于训练。开源数据集一般都会有格式转换的tool使用主流的标注工具自行标注的数据集也已经有很多成熟的开源转换代码了,本文主要来介绍VOC和COCO数据集的格式究竟是怎样的,我们应该如何组织数据集的目录结构来契合标准格式以方便转换。

VOC数据集格式

PASCAL VOC数据集来源于同名的竞赛,开始于2005年,结束于2012年最后一届。VOC并不是一个非常大型的目标检测数据集,但是在COCO诞生之前,它是非常主流的目标检测任务基准数据集,主要数据集为VOC2007和VOC2012,它们的格式是一样的,下面以VOC2007为例展开叙述。

首先看目录结构,根级目录下有5个目录,分别如下所示。

  • └─VOC2007├─JPEGImages│  ├─1.jpg│  ├─2.jpg│  └─3.jpg├─Annotations│  ├─1.xml│  ├─2.xml│  └─3.xml├─ImageSets│  ├─Layout│  │  ├─train.txt│  │  ├─trainva.txt│  │  ├─test.txt│  │  └─val.txt│  ├─Main│  │  ├─*_train.txt│  │  ├─*_trainva.txt│  │  ├─*_test.txt│  │  └─*_val.txt│  ├─Action│  │  ├─*_train.txt│  │  ├─*_trainva.txt│  │  ├─*_test.txt│  │  └─*_val.txt│  └─Segmentation│     ├─train.txt│     ├─trainva.txt│     ├─test.txt│     └─val.txt├─SegmentationClass└─SegmentationObject

其中JPEGImages目录下放的是所有的图片,这里只是叫这个名字,可以是非JPG格式的图片,而Annotations则存放的是和上述图片同名的所有XML格式的标注文件(所以xml标注和jpg图片一一对应),这个标注文件的具体解析后面会讲到。ImageSets文件夹下的则是数据集划分的txt文件,Segmentation存放的是分割用数据集的划分。

对这四个文件夹而言,它们下面加*号的表示按类别存在多个划分文件,但是对于通用目标检测而言则是只需要train.txt等文件。这些文本文件每一行有一个图片编号,整个文件其实组成文件名列表,依此就能完成数据集的划分。

所以,对于通用目标检测任务(针对对象类别)而言,我们一般只需要关注Main文件夹下的四个总体划分的文件即可。 至于SegmentationClassSegmentationObject两个文件夹包含JPEGImages文件夹下图片一一对应的语义分割图和实力分割图,由于目标检测不使用,所以我这里就不介绍了。

最后,具体来看VOC数据集的标注格式,这里选取任意的一个xml文件打开,可以看到,最外层是annotation标签,其内部都是标注信息,包括该图所在文件夹、该图文件名、该图来源、图像尺寸等信息,其中会有多个object标签,每个object标签内为一个目标对象的信息,具体如下面的代码标注。

最后,具体来看VOC数据集的标注格式,这里选取任意的一个xml文件打开,可以看到,最外层是annotation标签,其内部都是标注信息,包括该图所在文件夹、该图文件名、该图来源、图像尺寸等信息,其中会有多个object标签,每个object标签内为一个目标对象的信息,具体如下面的代码标注。

<annotation><folder>VOC2012</folder>  # 图像所在文件夹<filename>2007_000032.jpg</filename>  # 图像文件名<source>  # 图像源<database>The VOC2007 Database</database><annotation>PASCAL VOC2007</annotation><image>flickr</image></source><size>  # 图像尺寸信息<width>500</width>  # 图像宽度<height>281</height>  # 图像高度<depth>3</depth>  # 图像深度,也就是通道数</size><segmented>1</segmented>  # 图像是否用于分割,对目标检测而言没关系<object>  # 一个目标对象的信息<name>aeroplane</name>  # 目标的类别名<pose>Frontal</pose>  # 拍摄角度,自己的数据集这里是Unspecified<truncated>0</truncated>  # 是否被截断,0表示完整未截断<difficult>0</difficult>  # 是否难以识别,0表示不难识别<bndbox>  # 边界框信息<xmin>104</xmin>  # 左上角x<ymin>78</ymin>  # 左上角y<xmax>375</xmax>  # 右下角x<ymax>183</ymax>  # 右下角y</bndbox></object># 下面是其他目标的信息,这里略掉<object>其他object信息,这里省略</object>
</annotation>

所以,如果要制作xml标注的自定义VOC格式的数据集,只需要构建三个文件夹,分别是JPEGImages用于存放所有原始图像、Annotations存放所有的和原始图像名称一一对应的xml标注文件和ImageSets/Main,其中存放train.txt、val.txt和test.txt等用来进行数据集划分,这些txt文件可以手动划分好,也可以使用代码随机划分,需要注意的是txt文件内容一行为一个不加拓展名的文件名即可。构建VOC格式的数据集还是很简单的,因为LabelImg等工具生成的xml标注就是VOC格式需要的。


http://www.ppmy.cn/news/46276.html

相关文章

ASIC-WORLD Verilog(6)运算符

写在前面 在自己准备写一些简单的verilog教程之前&#xff0c;参考了许多资料----asic-world网站的这套verilog教程即是其一。这套教程写得极好&#xff0c;奈何没有中文&#xff0c;在下只好斗胆翻译过来&#xff08;加了自己的理解&#xff09;分享给大家。 这是网站原文&…

C#程序设计——面向对象编程基础,设计一个Windows应用程序,模拟一个简单的银行账户管理系统。实现创建账户、取款、存款和查询余额的模拟操作。

一、实验目的 1、理解简单程序中的面向对象思想的应用 2、掌握C#的定义类和创建对象的方法 3、理解方法中参数的传递 二、实验内容 1、设计一个Windows应用程序&#xff0c;模拟一个简单的银行账户管理系统。实现创建账户、取款、存款和查询余额的模拟操…

索引失效了?看看这几个常见的原因!

索引是 MySQL 数据库中优化查询性能的重要工具&#xff0c;通过对查询条件和表数据的索引&#xff0c;MySQL可以快速定位数据&#xff0c;提高查询效率。但是&#xff0c;在实际的数据库开发和维护中&#xff0c;我们经常会遇到一些情况&#xff0c;导致索引失效&#xff0c;从…

( “树” 之 DFS) 337. 打家劫舍 III ——【Leetcode每日一题】

337. 打家劫舍 III 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。…

gRPC-Go源码解读一 客户端请求链路分析

最近在学习gRPC相关的知识&#xff0c;为啥要学呢&#xff1f;因为一直在用&#xff0c;古人云&#xff0c;“工欲善其事&#xff0c;必先利其器”。为此&#xff0c;花了不少时间阅读gRPC-Go的源码&#xff0c;收货甚多&#xff0c;比如透过服务发现和负载均衡这俩组件来学习复…

【无人机】采用最基本的自由空间路损模型并且不考虑小尺度衰落(多径多普勒)固定翼无人机轨迹规划(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

助力工业物联网,工业大数据之ODS层构建:需求分析【八】

文章目录 01&#xff1a;ODS层构建&#xff1a;需求分析02&#xff1a;ODS层构建&#xff1a;创建项目环境03&#xff1a;ODS层构建&#xff1a;代码导入 01&#xff1a;ODS层构建&#xff1a;需求分析 目标&#xff1a;掌握ODS层构建的实现需求 路径 step1&#xff1a;目标st…

零入门kubernetes网络实战-29->在同一个宿主机上基于虚拟网桥bridge链接不同网段的不同网络命名空间的通信方案

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 上一篇文章&#xff0c;我们分享了使用虚拟网桥来连接同网段的不同网络命名空间下的通信情况。 那么&#xff0c;本篇文章&#xff0c; 我们想测试一下&…