0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个工具搞定标注数据格式转换

英特尔物联网 来源:英特尔物联网 2023-05-26 10:28 次阅读

作者:杨亦诚

前言

通常情况下,新模型发布后,其对应的 github 仓库中都会有提供自定数据集训练的任务脚本,开发者可以基于自己的数据集,快速实现对该模型结构的训练与验证。但往往这些训练脚本仅支持部分的数据集格式,例如 YOLOv8 的官方仓库,就是需要开发者的数据集格式满足 Ultralytics 标准,或是手动编写脚本进行,将原本的数据集格式转化为 Ultralytics 格式,但这部分工作其实并不影响模型训练后的部署效果,因此如果有一个工具帮助我们非常便捷地进行训练数据的管理与格式转换,将大大提升模型训练的生产效率。

Datumaro 套件介绍

项目地址:

https://github.com/openvinotoolkit/datumaro

Datumaro 是一个支持 Python 和命令行调用两种调用方式的标注数据管理工具。它可以支持以下功能:

1. 标注数据格式双向转换

可以适用于分类,分割,检测,关键点检测,文本定位,文本识别、重识别以及点云任务的数据处理,支持以下标注数据格式的互相转换:

CIFAR-10/100(classification)

Cityscapes

COCO(image_info,instances,person_keypoints,captions,labels,panoptic,stuff)

CVAT

ImageNet

Kitti(segmentation,detection,3D raw/velodyne points)

LabelMe

LFW(classification,person re-identification,landmarks)

MNIST(classification)

Open Images

PASCALVOC(classification,detection,segmentation,action_classification,person_layout)

TF Detection API(bboxes,masks)

YOLO(bboxes)

2. 构建并修改数据集

多个数据集合并

数据集标签过滤,例如删除特定标签的图片

修改数据集标签

数据集分割,例如训练集、验证集与测试集

数据集采样,例如基于 Entropy 的方法筛选合适的训练集样本

Datumaro 套件实践

Datumaro 是支持命令行调用的模式,因此我们可以非常方便地使用 1 行命令完成 2 种不同格式数据的转换,下面我将基于命令行模式,演示一下 Datumaro 处理标注数据格式转化时的基本方法。

1Datumaro 安装与基本使用方法

Datumaro 支持基于 PyPI 的安装方式,如果想在第一时间体验最新的功能也可以基于 github 仓库直接安装:

 # From PyPI:
$ pip install datumaro[default] 
$ pip install 'git+https://github.com/openvinotoolkit/datumaro[default]' 

向右滑动查看完整代码

Datumaro 的命令行调用方法非常简单,如果你已经有了一组标准格式的数据集,只需要在命令行中定于原始数据格式和路径,以及转换后的数据格式及路径即可:

 $ datum convert -if voc -i -f coco -o

向右滑动查看完整代码

2YOLOv8 目标检测数据集实战

正好最近在准备表计识别的项目,这里借用一下飞桨提供的表计检测数据集,目标是使用 YOLOv8 模型构建表盘目标检测任务。

数据集下载地址:

https://bj.bcebos.com/paddlex/examples/meter_reader/datasets/meter_det.tar.gz

下载数据集后可以看到文件目录结构如下:

├── meter_det
│  ├── annotations
│      ├── instance_train.json
│      └── instance_test.json
│  ├── test
│  └── train

向右滑动查看完整代码

其实中 train 和 test 目录下分别保存了图片格式的训练数据和验证数据:

├── test
│  ├── 20190822_105.jpg
│  ├── 20190822_110.jpg
│  ├── 20190822_123.jpg
│  ├── 20190822_124.jpg
│  ├── 20190822_127.jpg
│  ├── …

向右滑动查看完整代码

第一步我们可先先使用 datum 命令自动识别一下该数据集的格式:

$ datum detect './meter_det'  
输出:Detected format: image_dir

向右滑动查看完整代码

可以看到由于该数据集并没有符合某类标准的格式规范,因此 Datumaro 将其判断为普通的图片文件夹。这里我可以手动查询几种数据集的标准格式,找到和原始数据集最相似的一种,然后进行手动修改。通过对于 Datumaro 支持的几种数据格式标准进行查询:

https://openvinotoolkit.github.io/datumaro/latest/docs/data-formats/supported_formats.html

我们发现原始数据的格式和COCO最为类似:

└─ Dataset/
  ├── dataset_meta.json # a list of custom labels (optional)
  ├── images/
  │  ├── train/
  │  │  ├──
  │  │  ├──
  │  │  └── ...
  │  └── val/
  │    ├──
  │    ├──
  │    └── ...
  └── annotations/
    ├── _.json
    └── ...

向右滑动查看完整代码

所以我们手动对原始目录进行略微改造,增加一个images目录用于单独存放图片数据,改造结果如下:

├── meter_det_coco
│  ├── annotations
│      ├── instances_train.json
│      └── instances_val.json
│  └── images
  ├── train
└── val

向右滑动查看完整代码

这里有个容易被忽略的点,因为 Datumaro 会根据 .json 标签文件的文件名来判断该数据集的用途,例如检测或者分割,所以我们一定要将示例中 部分的名字改为 “instances”,接下来我们再使用 detect 方法检测下修改后的数据集类型:

$ datum detect './meter_det_coco' 
输出:Detected format: coco

向右滑动查看完整代码

可以看到 Datumaro 已经将其识别为标准的 COCO 格式类型。最后我们就可以调用之前提到的命令一键完成对数据集从 COCO 到 Ultralytics 标准的转换:

$ datum convert -if coco -i '/home/ethan/intel/data/meter_det_coco' -f yolo_ultralytics -o '/home/ethan/intel/data/meter_det_yolo' -- --save-media

向右滑动查看完整代码

P.S: --save-media 自动将图片文件复制到新的数据集目录下

转换后的数据集目录如下:

├── meter_det_yolo
│  ├── data.yaml
│  ├── images
│  │  ├── train
│  │  └── val
│  ├── labels
│  │  ├── train
│  │  └── val
│  ├── train.txt
│  └── val.txt
└── table.jpg

向右滑动查看完整代码

有了这样一个 Ultralytics 标准数据集后,我们就可以直接将其对应的路径放到 YOLOv8 仓库中的配置文件中,然后开启训练脚本进行模型创建。

model.train(data=' data.yaml ', epochs=100, imgsz=640)

向右滑动查看完整代码

总结

Datumaro 是一个非常强大的标注数据管理工具,帮助开发者在各种数据标准间轻松实现格式的互相转换,并实现对这些数据集的有效管理和改造,大大提升了既有数据集的复用性,完成对新模型效果进行快速验证。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    60

    文章

    9413

    浏览量

    168771
  • 数据格式
    +关注

    关注

    0

    文章

    26

    浏览量

    8805
  • 模型
    +关注

    关注

    1

    文章

    2704

    浏览量

    47674
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14629
  • GitHub
    +关注

    关注

    3

    文章

    457

    浏览量

    15916

原文标题:一个工具搞定标注数据格式转换 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【中级】labview每日教【11.21】TDMS数据格式

    1.各种数据格式之间华山论剑2.深入浅出带你了解TDMS数据格式的用法[hide] [/hide]
    发表于 11-21 09:38

    数据格式如何修改

    向大神求助,想问下单片机和计算机通信,数据格式怎么改,是在上位机部分改吗?想实现用单片机按键控制计数器,将数值发给计算机,然后上位机编写的窗口上能显示十进制数现在能够实现的是,发送数据0x01,接收显示的是81,发送
    发表于 12-24 22:58

    标准测试数据格式STDF你了解多少

    STDF (标准测试数据格式) 是我们半导体测试行业的最主要的数据格式,包含了summary信息和所有测试项的测试结果。泰瑞达的Image测试机上都自带了很多stdf工具,让你可以读取和分析stdf
    发表于 06-18 10:41

    常用的3D模型格式转换工具

    。 3DTransVidia是款功能强大的三维CAD模型数据格式转换与模型错误修复软件,可以针对几乎所有格式的三维模型进行数据格式间的
    发表于 08-08 16:56

    JSON 数据格式

    JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。将 JSON 数据赋值给变量例如,可以创建新的 Jav
    发表于 03-30 14:48

    数据格式不同,如何在转换求均值

    在图1中,可读取wav格式的文件,亦可播放,在后续的求均值中便会出错,是否因为数据格式不对?或者是wav格式的文件用不用先用MATLAB转成txt的数据然后再求,如果是那样的话还能播放
    发表于 03-10 10:19

    求助,这个数据格式怎么解读出来

    这是触摸板芯片发来的数据格式。当触摸板有数据的时候INT脚会拉低,来通知MCU来读取数据数据格式如下:我现在要怎么读取?接到mcu的引脚有sda,scl,int三
    发表于 09-05 14:55

    标准数据格式实用程序

    标准数据格式实用程序
    发表于 01-23 17:02

    串口的数据格式

    文章目录.前言二.串口数据的发送与接收三.串口波特率四.串口的数据格式(1)起始位(2)数据位(1)奇偶检验位(1)停止位五.物理接口的形式六.TTL、RS232、RS485电平标准
    发表于 08-06 07:28

    如何使用串口产生9位数据格式

    在UA_LCR寄存器的SPE位、EPE位及PBE位,并且写入一个字节到UA_THR寄存器,串口就会传送9位数据格式
    发表于 06-15 10:17

    数据格式,计算机中数据格式详细介绍

    数据格式,计算机中数据格式详细介绍    计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式
    发表于 04-13 11:36 3280次阅读

    新型数据格式转换的FPGA实现

    提出了一种数据格式转换方法。使用VHDL语言,采用流水线处理方式将ASCII码所表示的一定范围内的实数转换为单精度浮点数。
    发表于 11-18 15:39 744次阅读
    新型<b class='flag-5'>数据格式</b><b class='flag-5'>转换</b>的FPGA实现

    gps数据格式含义说明

    本内容介绍了gps数据格式的含义,给出了GPS输出的是NMEA-0183的数据格式,GPS固定数据输出语句($GPGGA)
    发表于 12-19 14:57 1.2w次阅读

    串口通讯的基本概念、数据格式

    本文介绍了串口通讯的基本概念、数据格式、通讯方式、典型的串口通讯标准等内容。
    的头像 发表于 04-23 11:13 4615次阅读
    串口通讯的基本概念、<b class='flag-5'>数据格式</b>

    一个工具搞定标注数据格式转换

    Datumaro 是支持命令行调用的模式,因此我们可以非常方便地使用 1 行命令完成 2 种不同格式数据转换,下面我将基于命令行模式,演示一下 Datumaro 处理标注
    的头像 发表于 06-13 17:00 598次阅读
    一个<b class='flag-5'>工具</b><b class='flag-5'>搞定标注</b><b class='flag-5'>数据格式</b><b class='flag-5'>转换</b>