開發(fā)者實戰(zhàn) | 一個工具搞定標注數(shù)據(jù)格式轉換
前言
?
通常情況下,新模型發(fā)布后,其對應的 github 倉庫中都會有提供自定數(shù)據(jù)集訓練的任務腳本,開發(fā)者可以基于自己的數(shù)據(jù)集,快速實現(xiàn)對該模型結構的訓練與驗證。但往往這些訓練腳本僅支持部分的數(shù)據(jù)集格式,例如 YOLOv8 的官方倉庫,就是需要開發(fā)者的數(shù)據(jù)集格式滿足 Ultralytics 標準,或是手動編寫腳本進行,將原本的數(shù)據(jù)集格式轉化為 Ultralytics 格式,但這部分工作其實并不影響模型訓練后的部署效果,因此如果有一個工具幫助我們非常便捷地進行訓練數(shù)據(jù)的管理與格式轉換,將大大提升模型訓練的生產(chǎn)效率。
?
Datumaro 套件介紹
項目地址:https://github.com/openvinotoolkit/datumaro
Datumaro 是一個支持 Python 和命令行調(diào)用兩種調(diào)用方式的標注數(shù)據(jù)管理工具。它可以支持以下功能:
· 標注數(shù)據(jù)格式雙向轉換
可以適用于分類,分割,檢測,關鍵點檢測,文本定位,文本識別、重識別以及點云任務的數(shù)據(jù)處理,支持以下標注數(shù)據(jù)格式的互相轉換:
- 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
·? 構建并修改數(shù)據(jù)集
- 多個數(shù)據(jù)集合并
- 數(shù)據(jù)集標簽過濾,例如刪除特定標簽的圖片
- 修改數(shù)據(jù)集標簽
- 數(shù)據(jù)集分割,例如訓練集、驗證集與測試集
- 數(shù)據(jù)集采樣,例如基于 Entropy 的方法篩選合適的訓練集樣本
?
?
Datumaro 套件實踐
Datumaro 是支持命令行調(diào)用的模式,因此我們可以非常方便地使用 1 行命令完成 2 種不同格式數(shù)據(jù)的轉換,下面我將基于命令行模式,演示一下 Datumaro 處理標注數(shù)據(jù)格式轉化時的基本方法。
· Datumaro 安裝與基本使用方法
Datumaro 支持基于 PyPI 的安裝方式,如果想在第一時間體驗最新的功能也可以基于 github 倉庫直接安裝

?
Datumaro 的命令行調(diào)用方法非常簡單,如果你已經(jīng)有了一組標準格式的數(shù)據(jù)集,只需要在命令行中定于原始數(shù)據(jù)格式和路徑,以及轉換后的數(shù)據(jù)格式及路徑即可:

?
·? YOLOv8 目標檢測數(shù)據(jù)集實戰(zhàn)
正好最近在準備表計識別的項目,這里借用一下飛槳提供的表計檢測數(shù)據(jù)集,目標是使用 YOLOv8 模型構建表盤目標檢測任務。
數(shù)據(jù)集下載地址:
https://bj.bcebos.com/paddlex/examples/meter_reader/datasets/meter_det.tar.gz
下載數(shù)據(jù)集后可以看到文件目錄結構如下:

?
其實中 train 和 test 目錄下分別保存了圖片格式的訓練數(shù)據(jù)和驗證數(shù)據(jù):

我們可以隨機打開一張圖片驗證:

?
第一步我們可先先使用 datum 命令自動識別一下該數(shù)據(jù)集的格式:

?
可以看到由于該數(shù)據(jù)集并沒有符合某類標準的格式規(guī)范,因此 Datumaro 將其判斷為普通的圖片文件夾。這里我可以手動查詢幾種數(shù)據(jù)集的標準格式,找到和原始數(shù)據(jù)集最相似的一種,然后進行手動修改。通過對于 Datumaro 支持的幾種數(shù)據(jù)格式標準進行查詢https://openvinotoolkit.github.io/datumaro/latest/docs/data-formats/supported_formats.html,我們發(fā)現(xiàn)原始數(shù)據(jù)的格式和COCO最為類似:

?
所以我們手動對原始目錄進行略微改造,增加一個images目錄用于單獨存放圖片數(shù)據(jù),改造結果如下:

?
這里有個容易被忽略的點,因為 ?Datumaro 會根據(jù) .json 標簽文件的文件名來判斷該數(shù)據(jù)集的用途,例如檢測或者分割,所以我們一定要將示例中 部分的名字改為 “instances”,接下來我們再使用 detect 方法檢測下修改后的數(shù)據(jù)集類型:

可以看到 Datumaro 已經(jīng)將其識別為標準的 COCO 格式類型。最后我們就可以調(diào)用之前提到的命令一鍵完成對數(shù)據(jù)集從 COCO 到 Ultralytics 標準的轉換:

P.S: --save-media 自動將圖片文件復制到新的數(shù)據(jù)集目錄下
轉換后的數(shù)據(jù)集目錄如下:

有了這樣一個 Ultralytics 標準數(shù)據(jù)集后,我們就可以直接將其對應的路徑放到 YOLOv8 倉庫中的配置文件中,然后開啟訓練腳本進行模型創(chuàng)建。

?
總結
Datumaro 是一個非常強大的標注數(shù)據(jù)管理工具,幫助開發(fā)者在各種數(shù)據(jù)標準間輕松實現(xiàn)格式的互相轉換,并實現(xiàn)對這些數(shù)據(jù)集的有效管理和改造,大大提升了既有數(shù)據(jù)集的復用性,完成對新模型效果進行快速驗證。