目标检测数据集格式转换 : COCO、VOC、YOLO互相转换

当前目标检测领域常用的数据集格式非 COCO、VOC、YOLO莫属,但是很多算法的源码或者框架只支持一种数据格式,数据集格式不匹配的时候就需要自己手动进行转换。


因此我最近整理了一下这三种格式互相转化的代码,并且添加了标签可视化的代码,以后打比赛或者其他情况下能节省部分手动转换的时间。

目录

      • 太长不看直接使用
      • 格式介绍
        • COCO
        • VOC
        • YOLO
      • 代码
      • 使用教程

太长不看直接使用

代码github地址:https://github.com/FireworksFallDown/TypeTotype.git
对于windows用户,我还提供了相应的exe程序,可以直接在图形界面进行操作。

如果github登不上去的话推荐在 码云gitee里创建仓库直接导入github地址,就能够轻松下载了

格式介绍

COCO

Annotations.json
--------------------------------------------------------------------------------------------------
{
    "images": [
        {
            "file_name": "***.jpg", # string
            "height": ***,          # int
            "width": ***,           # int
            "id": *                 # int
        },...]
    "annotations": [
        {
            "iscrowd": 0,           # 0 or 1
            "area": *,              # float or double
            "image_id": 0,          # int
            "bbox": [*, *, *, *],   # list[float], [x,y,w,h]
            "category_id": *,       # int
            "id": *                 # int
        },...]
    "categories": [
        {"id": *, "name": "***"},   # id start from 1
        ...
        ]
}

VOC

VOC type:
Annotations
    |—— ImgName_1.xml
    |—— ImgName_2.xml
    ...

--------------------------------------------------------------------------------------------------
ImgName_1.xml :
--------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<annotation>
    <folder>VOC2007</folder>
    <filename>***.jpeg</filename>
    <size>
        <width>***</width>
        <height>***</height>
        <depth>3</depth>
    </size>
    <object>
        <name>***</name>        # category name
        <bndbox>
            <xmin>*</xmin>
            <xmax>*</xmax>
            <ymin>*</ymin>
            <ymax>*</ymax>
        </bndbox>
        <truncated>0</truncated>
        <difficult>0</difficult>
    </object>
    ...
    <segmented>0</segmented>
</annotation>

YOLO

imgName_1.txt:
--------------------------------------------------------------------------------------------------
cateId  center_x  center_y  w  h  # normalization type, eg: 0 0.473667 0.397000 0.116000 0.337000
...
--------------------------------------------------------------------------------------------------
    

代码

其实挺简单的,就是各个格式的文件读取稍显麻烦,这里不做详细介绍,我直接放在github上了,可以直接使用

其中读取coco格式标注是使用json包,VOC是使用xml.etree.ElementTree的相关api
详情可以见源码

使用教程

代码目前支持VOC,COCO,YOLO这三种任意两种之间的转换(不包含分割信息,仅支持目标检测标注,同时也不包含困难样本等等信息的转换),以及这三种标签的可视化。

support mode:

  1. VOC to COCO
  2. VOC to YOLO
  3. COCO to VOC
  4. COCO to YOLO
  5. YOLO to COCO
  6. YOLO to VOC
  7. COCO label view
  8. VOC label view
  9. YOLO label view

使用

需要保证环境中已安装 opencv-python, numpy, xml, json等包

下载源码后,
① 需要在my_config.py中修改类别名称为你的数据集类别名称

② 在 Type2Type 目录下使用下面的命令行进行转换或者可视化

python main.py --img_path [your path] --mode [your mode] --label_path [your label path] --save_path [your save path]

注意事项
① 运行 python main.py --help 可以查看提示信息

② mode 选项必须是下面各模式中的一个
VOC2COCO, VOC2YOLO, YOLO2COCO, YOLO2VOC, COCO2YOLO, COCO2VOC,LabelView_COCO, LabelView_VOC, LabelView_YOLO

③ 如果只是标签可视化的话可以忽略 --save_path选项

④ 我还提供了windows下的exe程序,可以直接运行目录下的Type2Type.exe,然后直接在图形界面进行操作
目标检测数据集格式转换 : COCO、VOC、YOLO互相转换_第1张图片

文件目录最好保证为全英文路径,否则可能会无法读取导致运行失败

⑥ 可能会存在部分bug, 如果使用过程中发现还请反馈,我会尽快进行优化

你可能感兴趣的:(小技巧,深度学习,目标检测,人工智能,计算机视觉,数据集,格式转换)