企业级安全: 符合 ISO 27001 及 SOC 2 Type I 标准。

Link to this sectionLabelbox 集成#

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

Link to this section从 Labelbox 导入#

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

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

Link to this section使用 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)

Link to this section导入内容说明#

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

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

每个对象的 name 会成为类名——因此 "name": "Dog" 标注会导入为类 Dog,而不是其小写的 value——像素坐标会根据导出文件中的 media_attributes 维度进行归一化。没有标注的目录导出将作为未标记的图像数据集导入,随时准备在 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——都会被忽略。导出时建议取消选中 embeddings:在示例导出中,它们大约占了文件的大约五分之四,而 Platform 实际读取的字段只占五分之一。

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

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

趁链接有效时上传导出文件

Labelbox 导出是通过签名 URL 而不是嵌入像素来引用每个图像的,这些签名会过期。Platform 会从这些 URL 下载图像,并在开始前对样本进行探测,因此如果链接全部失效的导出文件会立即失败并告诉你原因——请从 Labelbox 重新导出并上传新文件。仅部分过期的导出可以导入仍然能够访问的图像并跳过其余部分,因此请在导出后尽快上传。

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

包含边界框和多边形的导出将作为分段数据集导入,而分段数据集仅承载多边形几何图形——框标注不用于训练,也不包含在版本导出的文件中。如果两者都需要,请将框和多边形作为单独的 Labelbox 项目导出。多边形还需要至少三个点才能被读取。

评论