LuxonisDataset
概述
LuxonisDataset 类提供了一个简单的 API,用于在 Luxonis 数据格式 (LDF) 中创建和管理数据。它充当抽象层,并提供数据集的方法:- 初始化、
- 数据摄取、
- 分割、
- 合并,以及
- 导出、云同步和删除。
数据集初始化
LuxonisDataset 对象开始:Python
1from luxonis_ml.data.datasets import LuxonisDataset
2
3dataset_name: str = ... # 例如 "parking_lot"
4dataset = LuxonisDataset(dataset_name)数据集可以存储在本地,也可以使用受支持的云存储提供商(包括 GCS、S3 和 Azure Blob 存储)进行存储。默认情况下,初始化的数据集存储在本地。
如果已存在名为提供的
dataset_name 的数据集,则会自动加载该数据集,而不是初始化新的数据集。因此,请为每个新数据集使用唯一的名称,或者在 LuxonisDataset 构造函数中传递 delete_local=True 以覆盖现有数据集。team_id、bucket_type、bucket_storage 和 delete_remote 参数。当数据集应存储在共享或远程对象存储中(而非仅存储在本地机器上)时,这些参数非常有用。添加数据
Python
1{
2 "file": str, # 图像文件的路径
3 "annotation": Optional[dict] # 单个图像注释
4}annotation 字段的内容取决于任务类型。支持以下任务类型:下面我们提供一个停车数据集的示例生成器函数,用于生成边界框注释的数据实例。Python
1import json
2from pathlib import Path
3
4# 数据集的路径,请根据您系统上的实际路径进行替换
5dataset_root = Path("data/parking_lot")
6
7def generator():
8 for annotation_dir in dataset_root.iterdir():
9 with open(annotation_dir / "annotations.json") as f:
10 data = json.load(f)
11
12 # 获取图像的宽度和高度
13 W = data["dimensions"]["width"]
14 H = data["dimensions"]["height"]
15
16 image_path = annotation_dir / data["filename"]
17
18 for instance_id, bbox in data["BoundingBoxAnnotation"].items():
19
20 # 获取未归一化的边界框坐标
21 x, y = bbox["origin"]
22 w, h = bbox["dimension"]
23
24 # 获取边界框的类别名称
25 class_ = bbox["labelName"]
26 yield {
27 "file": image_path,
28 "annotation": {
29 "class": class_,
30 # 归一化的边界框
31 "boundingbox": {
32 "x": x / W,
33 "y": y / H,
34 "w": w / W,
35 "h": h / H,
36 },
37 },
38 }add 方法。Python
1dataset.add(generator())add 方法接受任何可迭代对象,而不仅仅是生成器。元数据与来源
- 任务定义与类别映射
- 关键点骨架
- 分类元数据编码
- 数据集来源结构
LuxonisSource 和 LuxonisComponent 表示,使得一个数据集可以描述多组件或多传感器输入。例如,一个来源可以包含多个图像组件,而不仅仅是单个 RGB 图像。有用的元数据相关方法包括:set_tasks(...)用于显式定义任务组set_classes(...)用于注册类别映射get_source_names()用于检查可用的数据集来源update_source(...)用于更新来源/组件元数据
定义划分
train、val 和 test 集合。 划分通过调用 LuxonisDataset 对象的 make_splits 方法并在其参数中传递所需的划分比例来实现 (默认情况下,数据按 80:10:10 的比例划分为 train、val 和 test 集合)。Python
1dataset.make_splits({
2 "train": 0.7,
3 "val": 0.2,
4 "test": 0.1,
5})Python
1dataset.make_splits({
2 "train": ["file1.jpg", "file2.jpg", ...],
3 "val": ["file3.jpg", "file4.jpg", ...],
4 "test": ["file5.jpg", "file6.jpg", ...],
5})make_splits 方法将引发错误。 如果你想重新定义划分,请在方法调用中传递 redefine_splits=True。云同步与数据集发现
LuxonisDataset 还可以:- 使用
LuxonisDataset.list_datasets(...)列出数据集 - 使用
pull_from_cloud(...)将缺失或所有媒体拉取到本地 - 使用
push_to_cloud(...)将本地数据推送到远程对象存储
数据集克隆
LuxonisDataset 对象的 clone 方法并传递新数据集的所需名称来完成。Python
1dataset_clone = dataset.clone(new_dataset_name="dataset_clone")数据集合并
LuxonisDataset 对象的 merge_with 方法并将第二个数据集作为参数传递来完成。 你可以选择两种不同的合并模式:inplace(原地合并):第一个数据集被修改以包含第二个数据集的数据out-of-place(非原地合并):从两个现有数据集的组合中创建一个新数据集
Python
1# inplace merging
2dataset1.merge_with(dataset2, inplace=True)
3# OR out-of-place merging
4dataset_merge = dataset1.merge_with(dataset2, inplace=False, new_dataset_name="dataset_merge")数据集导出
LuxonisDataset 可以将数据从 LDF 导出为常见的数据集格式。 当你希望在 LuxonisML 中准备数据,但在其他工具链中训练或检查数据时,这非常有用。Python
1from luxonis_ml.enums import DatasetType
2
3dataset.export("exports/coco", dataset_type=DatasetType.COCO)CLI 参考
luxonis_ml CLI 提供了一组用于管理数据集的各种有用命令。 这些命令可通过 luxonis_ml data 命令访问。可用的命令有:luxonis_ml data ls- 列出所有数据集luxonis_ml data info <dataset_name>- 打印数据集信息luxonis_ml data inspect <dataset_name>- 使用cv2在屏幕上渲染数据集中的数据luxonis_ml data delete <dataset_name>- 删除数据集
luxonis_ml data --help 或向上述任何命令传递 --help 标志。