Link to this sectionLabelbox 集成#
Ultralytics Platform 可直接读取 Labelbox NDJSON 导出文件。无需粘贴密钥、无需维护长连接、也无需维护转换脚本——只需从 Labelbox 导出、上传文件,你的标签就会作为正常的 Platform 数据集导入。
Link to this section从 Labelbox 导入#
- 从 Labelbox 导出。 打开你要迁移的标注项目或目录,然后转到 Data Rows 标签页。选择 All,点击 Export data,选择要包含的字段并确认。从目录而非项目导出?请启用 Export labels from project 并选择项目,否则导出的文件将完全不包含任何注释。
- 下载文件。 Labelbox 会将导出作为后台任务运行。留意通知中的进度,并在任务完成后点击 Download 以保存
.ndjson文件。 - 上传至 Platform。 创建一个新数据集并上传
.ndjson文件,或者粘贴文件的直接链接。你也可以从 Settings > Integrations > Labelbox 开始。 - 训练。 处理完成后,就像任何其他 Platform 数据集一样编辑标注并进行训练。
与 CVAT 和 Label 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 对象。json.dump(list_of_rows, f) 写入的是一个单一数组,而 Platform 会跳过任何不是 JSON 对象的行——这样导入将找不到任何数据行。请使用上面的循环,或者 "\n".join(json.dumps(r) for r in rows)。
Link to this section导入内容说明#
Platform 会自动识别 Labelbox 格式,并将边界框和多边形映射到匹配的 YOLO 任务类型:
每个对象的 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 }
}
]
}
}
]
}
}
}导出内容中的其他所有内容——embeddings、metadata_fields、attachments、project_details——都会被忽略。导出时建议取消选中 embeddings:在示例导出中,它们大约占了文件的大约五分之四,而 Platform 实际读取的字段只占五分之一。
目前只读取边界框和多边形,并且仅从对象标注中读取——图像级别的分类存在于导出的其他位置并会被跳过。完全使用分割掩码(画笔)工具、点、折线或分类标记的项目会导入其图像但没有标注,并且不会引发错误。你可以在数据集页面上发现这一点:保留了标签的导入数据集会在图像计数旁边显示已标记和标注计数,而丢失了标签的数据集则两者都不显示。
Labelbox 导出是通过签名 URL 而不是嵌入像素来引用每个图像的,这些签名会过期。Platform 会从这些 URL 下载图像,并在开始前对样本进行探测,因此如果链接全部失效的导出文件会立即失败并告诉你原因——请从 Labelbox 重新导出并上传新文件。仅部分过期的导出可以导入仍然能够访问的图像并跳过其余部分,因此请在导出后尽快上传。
包含边界框和多边形的导出将作为分段数据集导入,而分段数据集仅承载多边形几何图形——框标注不用于训练,也不包含在版本导出的文件中。如果两者都需要,请将框和多边形作为单独的 Labelbox 项目导出。多边形还需要至少三个点才能被读取。