LuxonisDataset
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 的数据集,它将被自动加载,而不是初始化新的数据集。因此,请为每个新数据集使用唯一的名称,或者将 delete_local=True 传递给 LuxonisDataset 构造函数以覆盖现有数据集。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# 原地合并
2dataset1.merge_with(dataset2, inplace=True)
3# 或非原地合并
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 标志传递给上述任何命令。