Labelbox インテグレーション#
Ultralytics Platformは、LabelboxのNDJSONエクスポートを直接読み込みます。APIキーの貼り付け、接続の維持、変換スクリプトの管理は不要です。Labelboxからエクスポートしてファイルをアップロードするだけで、ラベルが通常のPlatformデータセットとして反映されます。
Labelbox からのインポート#
- Labelboxからエクスポートする。 取り込みたいラベリングプロジェクトまたはカタログを開き、Data Rowsタブに移動します。Allを選択し、Export dataをクリックして含めるフィールドを選択し、確認します。プロジェクトではなくカタログからエクスポートする場合:Export labels from projectを有効にしてプロジェクトを選択してください。そうしないと、ファイルにアノテーションがまったく含まれない状態で保存されます。
- ファイルをダウンロードする。 Labelboxはエクスポートをバックグラウンドジョブとして実行します。Notificationsで処理状況を確認し、完了したらDownloadをクリックして
.ndjsonファイルを保存します。 - Platformにアップロードする。 新しいデータセットを作成し、
.ndjsonファイルをアップロードするか、ファイルへの直リンクを貼り付けます。Settings > Integrations > Labelboxから開始することも可能です。 - トレーニングを行う。 処理が完了したら、他のPlatformデータセットとまったく同じようにアノテーションを編集し、トレーニングを行います。

CVATやLabel Studioとは異なり、形式を選択する必要はありません。Labelbox独自のエクスポート形式がそのままサポートされています。
SDK を使用したエクスポート#
Labelbox は Python SDK でもエクスポートタスクを提供しており、反復可能なパイプラインにとってはより簡単な手段となります。タスクをストリーミングし、1 行に 1 つの 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は1行につき1つのJSONオブジェクトです。json.dump(list_of_rows, f)は代わりに単一の配列を書き込むため、PlatformはJSONオブジェクトではない行をスキップしてしまい、インポート時にデータ行が全く検出されません。上記の手順を使用するか、"\n".join(json.dumps(r) for r in rows)を使用してください。
インポート対象#
PlatformはLabelboxの形式を自動で認識し、バウンディングボックスやポリゴンを対応するYOLO task typeにマッピングします。
| Labelbox のアノテーション | インポート済み |
|---|---|
| バウンディングボックス | 検出 (Detect) |
| ポリゴン | Segment |
| セグメンテーションマスク、ポイント、ポリライン、リレーションシップ、分類 | 未対応 |
各オブジェクトの name がクラス名になります。そのため、"name": "Dog" アノテーションは小文字の value ではなく、クラス Dog としてインポートされ、ピクセル座標はエクスポート内の 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 }
}
]
}
}
]
}
}
}エクスポートに含まれるその他の要素(embeddings、metadata_fields、attachments、project_details)は無視されます。エクスポート時に埋め込み(embeddings)の選択を解除することをお勧めします。サンプルエクスポートでは、Platformが実際に読み取るフィールドが約5分の1であるのに対し、埋め込みは約5分の4を占めていました。
現在読み取られるのはバウンディングボックスとポリゴンのみであり、それもオブジェクトアノテーションからのものに限られます。画像レベルの分類はエクスポートの別の場所に存在するためスキップされます。セグメンテーションマスク(ブラシ)ツール、ポイント、ポリライン、または分類のみでラベル付けされたプロジェクトでは、画像はインポートされますがアノテーションは含まれず、エラーも発生しません。これはデータセットページで確認できます。ラベルが維持されたインポート済みデータセットには画像数の横にラベル数とアノテーション数が表示されますが、失われたデータセットにはどちらも表示されません。
Labelbox のエクスポートはピクセルを埋め込むのではなく署名付き URL によって各画像を参照するため、それらの署名は期限切れになります。Platform はそれらの URL から画像をダウンロードし、開始前にサンプルを検証するため、すべてのリンクの有効期限が切れたエクスポートは直ちに失敗しその理由を伝えます。Labelbox から再エクスポートして新しいファイルをアップロードしてください。一部のみ有効期限が切れたエクスポートは、まだアクセスできる画像のみをインポートして残りをスキップするため、エクスポート後速やかにアップロードしてください。
バウンディングボックスとポリゴンの両方を含むエクスポートはセグメントデータセットとしてインポートされますが、セグメントデータセットにはポリゴンジオメトリのみが含まれるため、ボックスアノテーションはトレーニングに使用されず、バージョンエクスポートにも含まれません。両方が必要な場合は、ボックスとポリゴンを別々の Labelbox プロジェクトとしてエクスポートしてください。また、ポリゴンを読み取るには少なくとも 3 つのポイントが必要です。