YOLO Vision 2026:

Labelbox 集成#

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

从 Labelbox 导入#

  1. 从 Labelbox 导出。 打开你要导入的标注项目目录,转到 Data Rows 标签页。选择 All,点击 Export data,选择要包含的字段并确认。从目录而非项目导出?请启用 Export labels from project 并选择项目,否则下载的文件将完全不包含任何注释。
  2. 下载文件。 Labelbox 会在后台运行导出作业。请留意通知,在完成后点击 Download 来保存 .ndjson 文件。
  3. 上传至 Platform。 创建一个新数据集并上传 .ndjson 文件,或者粘贴它的直连。你也可以从 Settings > Integrations > Labelbox 开始。
  4. 训练。 处理完成后,就像对待其他任何 Platform 数据集一样,直接编辑注释训练

Ultralytics Platform Labelbox Dataset Import

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 项目导出。多边形还需要至少三个点才能被读取。

评论