当前位置:网站首页 > 技术博客 > 正文

xmlserializer转换json



我们先来看看voc和coco数据集的目录结构:
以VOC2012数据集为例,下载下来有如下五个文件夹:
在这里插入图片描述
Annotations文件夹是存放图片对应的xml文件,比如“2007_000027.xml"存放的是图片2007_000027.jpg对应的信息,用记事本打开可以看到,这是xml格式的数据。
ImageSets文件夹里存放了官方为我们划分好的训练集和验证集的txt文件。我们主要使用“ImageSets/Main/"文件夹下的train.txt和val.txt文件,train.txt文件存放了官方划分的训练集的图片名称,val.txt文件存放了验证集图片的名称。
还有一个需要关注的文件夹就是JEPGImages,里面存放了对应图片名称的原始图片。剩下的两个文件夹我们就不需要特别关注了。

接下来我们来看看voc数据集的xml文件里面都有哪些信息。

 

可以看到一个xml文件包含如下信息:

  • folder: 文件夹
  • filename:文件名
  • path:路径
  • source:来源
  • size:图片大小
  • segmented:图像分割会用到,本文仅以目标检测(bounding box为例进行介绍)
  • object:一个xml文件可以有多个object,每个object表示一个box,每个box有如下信息组成:
  • name:改box框出来的object属于哪一类,例如Apple
  • bndbox:给出左上角和右下角的坐标
  • truncated:是否被截
  • difficult:是否为检测困难物体

不同于VOC,一张图片对应一个xml文件,coco是直接将所有图片以及对应的box信息写在了一个json文件里。通常整个coco目录长这样:

 

一个标准的json文件包含如下信息:

 

(1)images字段列表元素的长度 = 划入训练集(或者测试集)的图片的数量;
(2)annotations字段列表元素的数量 = 训练集(或者测试集)中bounding box的数量;
(3)categories字段列表元素的数量 = 类别的数量

接下来我们看每个key对应的内容:

(1)info

 

(2)images

 

(3)licenses

 

(4)annotations

 

"bbox"里[x, y, width, height]x, y代表的是物体的左上角的x, y的坐标值。

"segmentation"里[x1, y1, x2, y2, x3, y3, x4, y4]是以左上角坐标为起始,顺时针依次选取的另外三个坐标点。及[左上x, 左上y, 右上x,右上y,右下x,右下y,左下x,左下y]。

(5)categories

 

GitHub开源项目地址

开始转换前,得先将要转化的所有.xml文件名保存在xml_list.txt列表中。如果是自己制作的voc数据集,在输入标签名的时候记得不要把类别名name打错了。

 

执行即可将xml转化为一个.json文件。

 

注意这里的image_id用的是图片名称去掉.jpg,所以图片名必须是数字,如果不是,先将所有图片和label名称改成数字,再转coco。

 

如果报错,原因是我们的坐标值是浮点数字符串,而int只能转化整型字符串,这时坐标值得先用float将浮点数字符串转成浮点数,再用int将浮点数转成整数。

 

如果是要将COCO格式的json文件转化为VOC格式的xml文件,将anno和xml_dir改成json文件路径和转化后的xml文件保存路径,执行下面代码即可完成转化。

 

比如从OpenImageV5下载下来的BIllboard数据集,目录如下:

 

每一副图像所对应的txt里面的内容对应目标的坐标信息。这里0后面四个值为用长宽归一化了的x1,x2,y1,y2。如下图所示,0表示只有billboard一个类别。
在这里插入图片描述

将 txt 文件转换为 Pascal VOC 的 XML 格式的代码如下:

 

至此,我们基本能够应对目标检测常用到的数据转化了,不管我们拿到的是什么数据集,VOC也好,COCO也罢,亦或是各种txt格式,我们都可以用上面的方法转成我们所需要的数据集。至于自己制作数据集,也很简单,篇幅有限,下一篇再总结了。。。

版权声明


相关文章:

  • 使用fdisk命令后,什么命令可以查看分区信息?2024-12-11 13:01:01
  • .so文件怎么执行2024-12-11 13:01:01
  • 常用虚拟机软件有哪些?2024-12-11 13:01:01
  • 高并发会带来哪些问题2024-12-11 13:01:01
  • 计算机网络常见的硬件设备有哪些2024-12-11 13:01:01
  • 异或和怎么算2024-12-11 13:01:01
  • linux重复运行shell命令2024-12-11 13:01:01
  • 键值对是什么意思2024-12-11 13:01:01
  • jvm调优实战简书2024-12-11 13:01:01
  • dmi linux2024-12-11 13:01:01