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

点击蓝字

关注我们,让开发变得更有趣

作者 | 杨亦诚

排版 | 李擎

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

前言

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

Datumaro 套件介绍

项目地址:https://github.com/openvinotoolkit/datumaro

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

· 标注数据格式双向转换

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

- CIFAR-10/100 (classification)

https://www.cs.toronto.edu/~kriz/cifar.html

- Cityscapes

https://www.cityscapes-dataset.com/

- COCO 

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

https://cocodataset.org/#format-data

- CVAT

https://openvinotoolkit.github.io/cvat/docs/manual/advanced/xml_format

- ImageNet 

https://image-net.org/

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

https://www.cvlibs.net/datasets/kitti/index.php

-  LabelMe

http://labelme.csail.mit.edu/Release3.0/

-  LFW (classification, person re-identification, landmarks)

http://vis-www.cs.umass.edu/lfw/

- MNIST (classification)

https://yann.lecun.com/exdb/mnist/

- Open Images

https://storage.googleapis.com/openimages/web/download.html

- PASCAL VOC 

(classification, detection, segmentation, action_classification, person_layout)

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/htmldoc/index.html

- TF Detection API (bboxes, masks)

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/using_your_own_dataset.md

- YOLO (bboxes)

https://github.com/AlexeyAB/darknet#how-to-train-pascal-voc-data

·  构建并修改数据集

- 多个数据集合并

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

- 修改数据集标签

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

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

Datumaro 套件实践

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

· Datumaro 安装与基本使用方法

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

# From PyPI:
$ pip install datumaro[default] 


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

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

$ datum convert -if voc -i <path/to/voc> -f coco -o <output/dir>

·  YOLOv8 目标检测数据集实战

正好最近在准备表计识别的项目,这里借用一下飞桨提供的表计检测数据集,目标是使用 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
│   ├── …

我们可以随机打开一张图片验证:

e6fd00177bc468f587c651e3d8a95fb9.jpeg

图:图片数据示例

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

--END--

你也许想了解(点击蓝字查看)⬇️➡️ 以AI作画,祝她节日快乐;简单三步,OpenVINO™ 助你轻松体验AIGC
➡️ 还不知道如何用OpenVINO™作画?点击了解教程。➡️ 如何给开源项目做贡献? | 开发者节日福利➡️ 几行代码轻松实现对于PaddleOCR的实时推理,快来get!➡️ 使用OpenVINO 在“端—边—云”快速实现高性能人工智能推理➡️ 图片提取文字很神奇?试试三步实现OCR!➡️【Notebook系列第六期】基于Pytorch预训练模型,实现语义分割任务➡️使用OpenVINO™ 预处理API进一步提升YOLOv5推理性能
扫描下方二维码立即体验 
OpenVINO™ 工具套件 2022.3

点击 阅读原文 立即体验OpenVINO 2022.3

c2de078fd3acb0578705021dc6daaf7a.png

文章这么精彩,你有没有“在看”?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将F12开发者工具预览的数据格式转换为JSON格式,可以按照以下步骤进行操作: 1. 首先,打开开发者工具选项卡(F12)并启用“覆盖”绘图器。 2. 加载要分析的页面,并在内部覆盖范围绘图器中选择要转换为JSON的数据。 3. 找到并选择你想要转换的数据,在右侧的“Source”选项卡中,找到数据所在的文件。 4. 在右侧的“Response”选项卡中,你将看到该数据的内容。根据具体情况,数据可能以不同的形式呈现,比如Form Data或Request Payload。 5. 如果数据以Form Data的形式呈现,你可以使用原生方法formData()来进行数据组装,并将content-type设置为multipart/form-data。 6. 如果数据以Request Payload的形式呈现,并且content-type为application/json,那么数据已经是JSON格式,不需要进行额外的转换。 请注意,具体的操作步骤可能因浏览器或网页的不同而有所差异。以上步骤是一般的指导,你需要根据实际情况进行调整和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [DisCoverage-crx插件](https://download.csdn.net/download/weixin_38576811/15704126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [chrome F12_Network 开发者工具详解](https://blog.csdn.net/weixin_43820813/article/details/107207035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值