Labelbox連携#
Ultralytics PlatformはLabelboxのNDJSONエクスポートを直接読み込みます。貼り付けるキーも、維持すべき接続も、保守する変換スクリプトも必要ありません。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タスクタイプにマッピングします。
各オブジェクトのnameがクラス名になります。そのため、"name": "Dog"アノテーションは小文字のvalueではなく、クラスDogとしてインポートされます。また、ピクセル座標はエクスポート内のmedia_attributesのサイズに対して正規化されます。各画像はdata_row.external_idに基づいて命名されます。エクスポートに外部IDがない場合は、署名付きURLのファイル名にフォールバックします。アノテーションのないカタログエクスポートは、ラベルのない画像データセットとしてインポートされ、Platformのアノテーションエディターですぐにラベリングできます。
1つのデータ行は、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)は無視されます。エクスポート時には埋め込みを選択解除することをおすすめします。サンプルエクスポートでは、埋め込みがファイルの約5分の4を占め、Platformが実際に読み取るフィールドは5分の1でした。
現在読み取られるのはバウンディングボックスとポリゴンのみで、しかもオブジェクトアノテーションからのみです。画像レベルの分類はエクスポート内の別の場所に保存され、スキップされます。セグメンテーションマスク(ブラシ)ツール、ポイント、ポリライン、または分類だけでラベリングされたプロジェクトでは、画像はインポートされますがアノテーションはインポートされず、エラーも発生しません。データセットページで確認できます。ラベルが保持されたインポート済みデータセットでは、画像数の横にラベル数とアノテーション数が表示され、ラベルが失われたデータセットではどちらも表示されません。
Labelboxのエクスポートでは、各画像がピクセルデータとして埋め込まれるのではなく、署名付きURLで参照されます。この署名には有効期限があります。Platformは処理を開始する前にサンプルを確認し、これらのURLから画像をダウンロードします。そのため、リンクがすべて期限切れになったエクスポートは直ちに失敗し、理由が表示されます。Labelboxから再度エクスポートして、新しいファイルをアップロードしてください。一部だけ期限切れになったエクスポートでは、まだアクセスできる画像がインポートされ、残りはスキップされます。そのため、エクスポート後すぐにアップロードしてください。
バウンディングボックスとポリゴンの両方を含むエクスポートは、セグメントデータセットとしてインポートされます。セグメントデータセットにはポリゴンジオメトリのみが含まれるため、ボックスアノテーションはトレーニングに使用されず、バージョンエクスポートにも含まれません。両方が必要な場合は、ボックスとポリゴンを別々のLabelboxプロジェクトとしてエクスポートしてください。ポリゴンを読み取るには、少なくとも3つのポイントも必要です。