YOLO Vision 2026:

Labelbox 集成#

Ultralytics Platform 可直接读取 Labelbox NDJSON 导出文件。无需粘贴密钥,无需维持连接,也无需维护转换脚本——从 Labelbox 导出文件,上传文件,你的标签就会作为普通 Platform 数据集导入。

从 Labelbox 导入#

  1. 从 Labelbox 导出。 打开你想要导入的标注项目目录,然后进入 Data Rows 标签页。选择 All,点击 Export data,选择要包含的字段并确认。要从 Catalog 而不是项目导出?启用 Export labels from project 并选择项目,否则文件中完全不会包含任何标注。
  2. 下载文件。 Labelbox 会将导出作为后台任务运行。在通知中查看任务,完成后点击 Download,保存 .ndjson 文件。
  3. 上传到 Platform。 创建新数据集并上传 .ndjson 文件,或粘贴其直接链接。你也可以从 Settings > Integrations > Labelbox 开始。
  4. 训练。 处理完成后,你可以像处理其他 Platform 数据集一样编辑标注训练

Ultralytics Platform Labelbox 数据集导入

CVATLabel Studio 不同,这里无需选择格式——支持的格式就是 Labelbox 自己的导出格式。

使用 SDK 导出#

Labelbox 还在其 Python SDK 中提供了导出任务,这对于可重复的流水线来说更加方便。以流式方式处理任务,并将每行一个 JSON 对象写入文件:

import json

import labelbox

client = labelbox.Client(api_key="YOUR_LABELBOX_API_KEY")
export_task = labelbox.ExportTask.get_task(client, "YOUR_EXPORT_TASK_ID")
export_task.wait_till_done()  # streaming a task that isn't COMPLETE raises

with open("dataset.ndjson", "w") as f:
    f.writelines(json.dumps(data_row.json) + "\n" for data_row in export_task.get_buffered_stream())
写入 NDJSON,而不是 JSON 数组

NDJSON 每行包含一个 JSON 对象。json.dump(list_of_rows, f) 则会写入单个数组,而 Platform 会跳过所有不是 JSON 对象的行——因此导入时完全找不到数据行。使用上面的循环,或使用 "\n".join(json.dumps(r) for r in rows)

导入内容#

Platform 会自动识别 Labelbox 格式,并将边界框和多边形映射到对应的 YOLO 任务类型

Labelbox 标注已导入
边界框检测
多边形分割
分割掩码、点、折线、关系、分类暂不支持

每个对象的 name 会成为类别名称——因此,"name": "Dog" 标注会作为类别 Dog 导入,而不是其小写形式 value;像素坐标则会根据导出文件中的 media_attributes 尺寸进行归一化。每张图像都以其 data_row.external_id 命名;如果导出文件不包含外部 ID,则回退使用签名 URL 中的文件名。没有标注的目录导出会作为未标注图像数据集导入,你可以在 Platform 的标注编辑器中直接进行标注。

单个数据行如下所示,这里仅保留 Platform 会读取的字段:

{
    "data_row": {
        "external_id": "000000000307.jpg",
        "row_data": "https://storage.labelbox.com/...?Expires=...&Signature=..."
    },
    "media_attributes": { "height": 480, "width": 640, "mime_type": "image/jpeg" },
    "projects": {
        "<project-id>": {
            "labels": [
                {
                    "annotations": {
                        "objects": [
                            {
                                "name": "Dog",
                                "annotation_kind": "ImageBoundingBox",
                                "bounding_box": { "top": 200.0, "left": 407.0, "height": 172.0, "width": 176.0 }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

导出文件中的其他所有内容——embeddingsmetadata_fieldsattachmentsproject_details——都会被忽略。导出时不妨取消选择嵌入数据:在一个示例导出文件中,嵌入数据约占文件的五分之四,而 Platform 实际读取的字段仅占五分之一左右。

掩码和点项目导入后没有标注

目前只读取边界框和多边形,而且仅从对象标注中读取——图像级分类位于导出文件的其他位置,会被跳过。完全使用分割掩码(画笔)工具、点、折线或分类进行标注的项目,其图像会被导入,但不会导入任何标注,也不会报告错误。你可以在数据集页面上发现这一点:保留了标签的已导入数据集会在图像数量旁显示标签数量和标注数量,而丢失标签的数据集两者都不会显示。

请在导出文件中的链接仍然有效时上传

Labelbox 导出文件通过签名 URL 引用每张图像,而不是将像素嵌入文件中,并且这些签名会过期。Platform 会从这些 URL 下载图像,并在开始前先探测一部分链接,因此所有链接都已过期的导出文件会立即失败并说明原因——请从 Labelbox 重新导出并上传新文件。只有部分链接过期的导出文件会导入仍可访问的图像,并跳过其余图像,因此请在导出后尽快上传。

在混合导出中,边界框会被丢弃

同时包含边界框和多边形的导出文件会作为分割数据集导入,而分割数据集只保留多边形几何信息——边界框标注不会用于训练,也不会包含在版本导出文件中。如果两者都需要,请将边界框和多边形分别导出为不同的 Labelbox 项目。多边形还必须至少包含三个点才能被读取。

常见问题#

  • 边界框会导入为 detect 数据集,多边形会导入为 segment 数据集。分割掩码、点、折线、关系和分类目前暂未被读取,因此仅使用这些工具进行标注的项目在导入时将不包含标注。

  • 平台读取 NDJSON 格式,每行一个 JSON 对象。保存为单个 JSON 数组的导出文件会被完全跳过。请使用上述 SDK 循环或 Labelbox 自带的 Export data 下载功能,该功能已经是 NDJSON 格式。

  • Labelbox 导出会通过签名 URL 引用图像,而这些签名会过期。请从 Labelbox 重新导出,并在新文件生成后尽快上传。

  • 不可以。混合导出会作为 segment 数据集导入,且仅使用多边形。如果你需要这两者,请将边界框和多边形作为单独的 Labelbox 项目进行导出。

评论