不同格式数据集的转换——“图形码检测”项目笔记
三大类型:COCO,VOC,YOLO
COCO
- COCO数据集现在有3种标注类型,分别是:
- object instances(目标实例)
- object keypoints(目标上的关键点)
- image captions(看图说话)
- 这3种类型共享这些基本类型:info、image、license,使用JSON文件存储。
以 object instances 为例,COCO 格式将会如此进行标注:
1 | { |
VOC
- VOC 类数据集由以下 5 个部分构成
- JPEGImages: 存放的是训练与测试的所有图片。
- Annotations: 里面存放的是每张图片打完标签所对应的
XML
文件。 - ImageSets: ImageSets 文件夹下本次讨论的只有
Main
文件夹,此文件夹中存放的主要又有四个文本文件test.txt
、train.txt
、trainval.txt
、val.txt
, 其中分别存放的是测试集图片的文件名、训练集图片的文件名、训练验证集图片的文件名、验证集图片的文件名。 - SegmentationClass/SegmentationObject: 存放的都是图片,且都是图像分割结果图,对目标检测任务来说没有用
- ObjectSegmentation: 标注出每一个像素属于哪一个物体。
An example:
1 | <annotation> |
YOLO
- 使用
TXT
文件进行保存,对每个图片编写一个同名文本文件
假设对于图片
7758258.jpg
,在同目录下创建7758258.txt
:
1 | <object-class> <x> <y> <width> <height> |
如何转换?
首先我们关注到 COCO 是对整个数据集建立 JSON 文件,而 VOC 和 YOLO 都是对单张图片建立文件。
- 关于从 COCO 数据集中读写数据(JSON I/O)
1 | # 读操作 |
- 关于从 VOC 数据集中读写数据 (XML I/O)
1 | # 读操作 |
- 关于从 YOLO 数据集中读写数据 (TXT I/O)
YOLO 的数据集转换相对简单,因此代码略过。
但是值得注意的是 YOLO 的格式是相对简单的文本格式,每一行代表一个目标,格式如下:
<object-class>
是目标的类别,<x>
和<y>
是目标中心点的坐标,<width>
和<height>
是目标的宽度和高度,所有值都是相对于图片宽高的比例(0到1之间的小数)。

关于我们所需的 YuNet 数据集格式说明
为了适应 YuNet 用于训练人脸检测任务的训练脚本,我们需要把数据集转为另一种格式存储,格式如下:
1 | # <image_path> <width> <height> <obj_class> |
- 目前尚未完成:
- ✅ 将人脸检测中所用的“关键点”数据删除(因此可以看到目标坐标数据后有 3 个关键点数据)
- ❌ 目标类型目前作为图片属性而不是目标属性,因此只支持单图单目标训练(但因为这样训练出的模型也支持多目标多类检测,因此不打算修改)
------------- 本文结束 感谢阅读 -------------