LuxonisParser

概述

LuxonisParser 提供了一个简单的 API,用于从几种常见数据集格式创建数据集。这些格式包括流行的 Roboflow 导出版本、Ultralytics 风格数据集、Luxonis 原生 LDF 数据集,以及一些专用格式(如 SOLO):

- COCO

我们支持两种变体的 COCO JSON 格式:
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── data/
4    │   │   ├── img1.jpg
5    │   │   ├── img2.jpg
6    │   │   └── ...
7    │   └── labels.json
8    ├── validation/
9    │   ├── data/
10    │   └── labels.json
11    └── test/
12        ├── data/
13        └── labels.json
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── img1.jpg
4    │   ├── img2.jpg
5    │   └── ...
6    │   └── _annotations.coco.json
7    ├── valid/
8    └── test/
  • Roboflow 格式(支持 YOLOv8-v12)
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── images/
4    │   │   ├── img1.jpg
5    │   │   ├── img2.jpg
6    │   │   └── ...
7    │   ├── labels/
8    │   │   ├── img1.txt
9    │   │   ├── img2.txt
10    │   │   └── ...
11    ├── valid/
12    ├── test/
13    └── *.yaml
  • Ultralytics 格式
Plain Text
1dataset_dir/
2    ├── images/
3    │   ├── train/
4    │   │   ├── img1.jpg
5    │   │   ├── img2.jpg
6    │   │   └── ...
7    │   ├── val/
8    │   └── test/
9    ├── labels/
10    │   ├── train/
11    │   │   ├── img1.txt
12    │   │   ├── img2.txt
13    │   │   └── ...
14    │   ├── val/
15    │   └── test/
16    └── *.yaml
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── img1.jpg
4    │   ├── img1.xml
5    │   └── ...
6    ├── valid/
7    └── test/
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── img1.jpg
4    │   ├── img1.txt
5    │   ├── ...
6    │   └── _darknet.labels
7    ├── valid/
8    └── test/
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── img1.jpg
4    │   ├── img2.jpg
5    │   ├── ...
6    │   ├── _annotations.txt
7    │   └── _classes.txt
8    ├── valid/
9    └── test/
Plain Text
1dataset_dir/
2    ├── images/
3    │   ├── train/
4    │   │   ├── img1.jpg
5    │   │   ├── img2.jpg
6    │   │   └── ...
7    │   ├── valid/
8    │   └── test/
9    ├── labels/
10    │   ├── train/
11    │   │   ├── img1.txt
12    │   │   ├── img2.txt
13    │   │   └── ...
14    │   ├── valid/
15    │   └── test/
16    └── data.yaml
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── img1.jpg
4    │   ├── img2.jpg
5    │   └── ...
6    │   └── _annotations.createml.json
7    ├── valid/
8    └── test/
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── img1.jpg
4    │   ├── img2.jpg
5    │   ├── ...
6    │   └── _annotations.csv
7    ├── valid/
8    └── test/
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── metadata.json
4    │   ├── sensor_definitions.json
5    │   ├── annotation_definitions.json
6    │   ├── metric_definitions.json
7    │   └── sequence.<SequenceNUM>/
8    │       ├── step<StepNUM>.camera.jpg
9    │       ├── step<StepNUM>.frame_data.json
10    │       └── (可选: step<StepNUM>.camera.semantic segmentation.jpg)
11    ├── valid/
12    └── test/

- 分类目录

一个包含每个类别子目录的目录。支持两种结构:
  • 带 train/valid/test 子目录的分割结构:
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── class1/
4    │   │   ├── img1.jpg
5    │   │   ├── img2.jpg
6    │   │   └── ...
7    │   ├── class2/
8    │   └── ...
9    ├── valid/
10    └── test/
  • 扁平结构(类别子目录直接位于根目录,解析时随机划分):
Plain Text
1dataset_dir/
2    ├── class1/
3    │   ├── img1.jpg
4    │   └── ...
5    ├── class2/
6    │   └── ...
7    └── info.json  (可选的元数据文件)
FiftyOneImageClassificationDataset 格式,图像位于 data/ 文件夹中,标签位于 labels.json 中。支持两种结构:
  • 带训练/验证/测试子目录的分割结构:
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── data/
4    │   │   ├── img1.jpg
5    │   │   └── ...
6    │   └── labels.json
7    ├── validation/
8    │   ├── data/
9    │   └── labels.json
10    └── test/
11        ├── data/
12        └── labels.json
  • 扁平结构(在解析时应用随机分割):
Plain Text
1dataset_dir/
2    ├── data/
3    │   ├── img1.jpg
4    │   └── ...
5    └── labels.json
labels.json 格式:
JSON
1{
2    "classes": ["class1", "class2", ...],
3    "labels": {
4        "image_stem": class_index,
5        ...
6    }
7}

- 原生 LDF

原生 Luxonis 数据集导出,带有分割级别的 annotations.json 文件。
Plain Text
1dataset_dir/
2    ├── train/
3    │   └── annotations.json
4    ├── valid/
5    └── test/

- 分割掩码目录

包含图像及对应掩码的目录。
Plain Text
1dataset_dir/
2    ├── train/
3    │   ├── img1.jpg
4    │   ├── img1_mask.png
5    │   ├── ...
6    │   └── _classes.csv
7    ├── valid/
8    └── test/
掩码存储为灰度 PNG 图像,每个像素值对应一个类别。像素值到类别的映射在 _classes.csv 文件中定义。
Csv
1像素值, 类别
20, background
31, class1
42, class2
53, class3

数据集解析

解析从初始化 LuxonisParser 对象并传入数据集目录路径开始。可选地,可以指定数据集名称、任务名称和类型(即格式)(默认情况下,名称设置为提供的数据集目录名称,类型根据数据集目录结构推断)。数据集目录可以是本地目录路径,也可以是远程数据集标识符。解析器目前接受本地路径、.zip 压缩包、gcs://...s3://...roboflow://workspace/project/version/format 数据集标识符。也可以将数据集目录作为 .zip 文件提供。
Python
1from luxonis_ml.data.parsers import LuxonisParser
2from luxonis_ml.enums import DatasetType
3
4dataset_dir = "roboflow://workspace/project/version/coco"
5
6parser = LuxonisParser(
7    dataset_dir=dataset_dir,
8    dataset_name="my_dataset",
9    dataset_type=DatasetType.COCO,
10    task_name="detection",
11)
初始化 LuxonisParser 对象后,可以通过调用其 .parse() 方法运行解析:
Python
1dataset = parser.parse()
这将创建一个包含所提供数据集数据的 LuxonisDataset 实例,并在源格式定义分割时保持原始分割。如果数据集已以 Luxonis 格式存在,则跳过解析并返回现有数据集。

CLI 参考

可以通过使用 luxonis_ml data parse 命令调用解析功能。
Command Line
1luxonis_ml data parse path/to/dataset --name my_dataset --type coco
有关更多详细信息,请运行 luxonis_ml data parse --help