将VOC数据格式转换为YOLO数据格式(附源码)

Posted AI吃大瓜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将VOC数据格式转换为YOLO数据格式(附源码)相关的知识,希望对你有一定的参考价值。

将VOC数据格式转换为YOLO数据格式(附源码)

目录

将VOC数据格式转换为YOLO数据格式

1.VOC数据集格式

2.YOLO数据格式

3.将VOC数据格式转换为YOLO数据格式


【尊重原则,转载请注明出处】https://panjinquan.blog.csdn.net/article/details/127879904

1.VOC数据集格式

Pascal VOC数据集下载地址:The PASCAL Visual Object Classes Homepage

数据集下载后解压得到一个名为VOCdevkit的文件夹,该文件夹结构如下:

对于目前检测任务,主要用到JPEGImages和Annotations;其中JPEGImages文件夹存放图片,而Annotations下放的是标注框的信息,格式为xml; Annotations文件夹中存放的是xml格式的标签文件,每一个xml文件都对应于JPEGImages文件夹中的一张图片,包含了图片的标注信息,如图片的名称,图片中object的类别及其bounding box坐标。

xml样例如下:

<?xml version="1.0" ?>
<annotation>
 <folder>widerface</folder>
 <filename>000001.jpg</filename>
 <source>
  <database>wider face Database</database>
  <annotation>PASCAL VOC2007</annotation>
  <flikerid>-1</flikerid>
 </source>
 <size>
  <width>353</width>
  <height>500</height>
  <depth>3</depth>
 </size>
 <segmented>0</segmented>
 <object>
  <name>dog</name>
  <pose>Unspecified</pose>
  <truncated>1</truncated>
  <difficult>0</difficult>
  <bndbox>
   <xmin>48.0</xmin>
   <ymin>240.0</ymin>
   <xmax>195.0</xmax>
   <ymax>371.0</ymax>
  </bndbox>
 </object>
 <object>
  <name>person</name>
  <pose>Unspecified</pose>
  <truncated>1</truncated>
  <difficult>0</difficult>
  <bndbox>
   <xmin>8.0</xmin>
   <ymin>12.0</ymin>
   <xmax>352.0</xmax>
   <ymax>498.0</ymax>
  </bndbox>
 </object>
 <object>
  <name>face</name>
  <pose>Unspecified</pose>
  <truncated>1</truncated>
  <difficult>0</difficult>
  <bndbox>
   <xmin>147.76751708984375</xmin>
   <ymin>51.60520935058594</ymin>
   <xmax>265.4585266113281</xmax>
   <ymax>213.4471435546875</ymax>
  </bndbox>
  <lm>
   <x1>170.7704620361328</x1>
   <y1>127.99724578857422</y1>
   <x2>220.77003479003906</x2>
   <y2>117.16474151611328</y2>
   <x3>191.6404266357422</x3>
   <y3>153.10772705078125</y3>
   <x4>177.97305297851562</x4>
   <y4>184.284912109375</y4>
   <x5>226.77618408203125</x5>
   <y5>172.9976348876953</y5>
   <visible>1</visible>
   <blur>0.28</blur>
  </lm>
 </object>
</annotation>

xm文件中,字段object是物体位置信息,包含了物体名称name,拍摄角度pose,是否截断truncated,难以识别difficult,object对应的bounding box信息 bndbox,格式为[xmin,ymin,xmax,ymax]


2.YOLO数据格式

YOLO系列数据格式都一样的,一张图片对应一个txt文本,内容格式为:[id  x_center  y_center  w  h],且都是标准化(0~1之间)后的值。


3.将VOC数据格式转换为YOLO数据格式

为了方便大家使用,现在已经打包发布了,请使用pip安装即可使用

使用方法特别特别简单,填写好数据data_root和输出路径out_text_dir即可,

特别注意:数据路径只需要保证有JPEGImages和Annotations即可,其余ImageSets和SegmentationClass这些都可以不需要


if __name__ == "__main__":
    from pybaseutils.maker import convert_voc2yolo

    # 定义类别数
    class_name = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat",
                  "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person",
                  "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
    # VOC数据目录
    data_root = "/path/to/VOC2007"
    # 保存输出yolo格式数据目录
    out_text_dir = os.path.join(data_root, "labels")
    # 开始转换,vis=True进行可视化
    convert_voc2yolo.convert_voc2yolo(data_root, out_text_dir, class_name=class_name, vis=True)

可视化效果如下: 

如果你想挑选其中几个类别进行训练,比如筛选含有["car", "dog"]的数据,其余的类别数据不需要,则修改class_name即可,如

if __name__ == "__main__":
    from pybaseutils.maker import convert_voc2yolo

    # 定义类别数
    class_name = ["car", "dog"]
    # VOC数据目录
    data_root = "/path/to/VOC2007"
    # 保存输出yolo格式数据目录
    out_text_dir = os.path.join(data_root, "labels")
    # 开始转换,vis=True进行可视化
    convert_voc2yolo.convert_voc2yolo(data_root, out_text_dir, class_name=class_name, vis=True)

以上是关于将VOC数据格式转换为YOLO数据格式(附源码)的主要内容,如果未能解决你的问题,请参考以下文章

labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

深度学习必备知识——模型数据集Yolo与Voc格式文件相互转化

YOLO-Darknet实战:VOC2007标签格式转换成Darknet标签格式

YOLO-Darknet实战:VOC2007标签格式转换成Darknet标签格式

目标检测---数据集格式转化及训练集和验证集划分

[数据集][VOC][目标检测]西瓜数据集目标检测可用yolo训练-1702张介绍