目标检测数据集格式转换 : 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,然后直接在图形界面进行操作
在这里插入图片描述

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

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

版权声明:本文为CSDN博主「流觞时光」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38574198/article/details/122057867

流觞时光

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

YOLO-V3-SPP详细解析

YOLO-V3-SPP 继前两篇简单的YOLO博文 YOLO-V1 论文理解《You Only Look Once: Unified, Real-Time Object Detection》YOLO-V2论文理解《YOLO9000: Bet

目标检测部署(卡牌识别)

最近在折腾yolov5,训练了一个识别纸牌的模型,最后使用onnxruntime进行部署,感兴趣的可以上github上clone下来玩玩,模型的权重文件上传到了百度网盘,链接

Yolo(3)(项目)Yolo v3 目标检测(85分类)

目录 基础理论 一、 读取文件 二、神经网络初始化 1、搭建神经网络 2、GPU加速 三、打开摄像头、按帧读取图像 四、向神经网络输入 五、获取神经网络输出 1、获取各层名称 2、获取输出层名称 3、获取输出层图像&#xff

基于YOLOv5的垃圾目标检测

使用yolov5实现垃圾目标检测(有图形化界面,webapp)。 计算机视觉爱好者,有自己的算力(8块2080Ti),熟练运用pytorch深度学习框架&#x