将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的文件夹,该文件夹结构如下:

将VOC数据格式转换为YOLO数据格式(附源码)_第1张图片

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

xml样例如下:



 widerface
 000001.jpg
 
  wider face Database
  PASCAL VOC2007
  -1
 
 
  353
  500
  3
 
 0
 
  dog
  Unspecified
  1
  0
  
   48.0
   240.0
   195.0
   371.0
  
 
 
  person
  Unspecified
  1
  0
  
   8.0
   12.0
   352.0
   498.0
  
 
 
  face
  Unspecified
  1
  0
  
   147.76751708984375
   51.60520935058594
   265.4585266113281
   213.4471435546875
  
  
   170.7704620361328
   127.99724578857422
   220.77003479003906
   117.16474151611328
   191.6404266357422
   153.10772705078125
   177.97305297851562
   184.284912109375
   226.77618408203125
   172.9976348876953
   1
   0.28
  
 

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安装即可使用

  • pybaseutils工具源码: https://github.com/PanJinquan/base-utils
  • 安装:pip install pybaseutils

使用方法特别特别简单,填写好数据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)

可视化效果如下: 

将VOC数据格式转换为YOLO数据格式(附源码)_第2张图片 将VOC数据格式转换为YOLO数据格式(附源码)_第3张图片
将VOC数据格式转换为YOLO数据格式(附源码)_第4张图片 将VOC数据格式转换为YOLO数据格式(附源码)_第5张图片

如果你想挑选其中几个类别进行训练,比如筛选含有["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,VOC格式,YOLO格式,voc格式转yolo格式)