Link to this sectionLabelbox インテグレーション#
Ultralytics Platform は Labelbox の NDJSON エクスポートを直接読み込みます。貼り付けるべきキーや、維持すべき接続、保守すべき変換スクリプトはありません。Labelbox からエクスポートしてファイルをアップロードするだけで、ラベルが通常の Platform データセットとして取り込まれます。
Link to this sectionLabelbox からのインポート#
- Labelbox からエクスポートします。 取り込みたいラベリングプロジェクトまたはカタログを開き、Data Rows タブに移動します。All を選択し、Export data をクリックして含めるフィールドを選択し、確認します。プロジェクトではなくカタログからエクスポートしていますか?Export labels from project を有効にしてプロジェクトを選択してください。そうしないと、アノテーションが一切含まれないファイルとして到着します。
- ファイルをダウンロードします。 Labelbox はエクスポートをバックグラウンドジョブとして実行します。Notifications で完了を確認し、完了したら Download をクリックして
.ndjsonファイルを保存します。 - Platform にアップロードします。 新しいデータセットを作成して
.ndjsonファイルをアップロードするか、ファイルへの直リンクを貼り付けます。Settings > Integrations > Labelbox から開始することもできます。 - トレーニングを行います。 処理が完了したら、他の Platform データセットと全く同様にアノテーションを編集し、トレーニングを実行します。
CVAT や Label Studio と異なり、選択すべきフォーマットはありません。Labelbox 独自の出力形式がそのままサポートされています。
Link to this sectionSDK を使用したエクスポート#
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) を使用してください。
Link to this sectionインポート対象#
Platform は独自に Labelbox フォーマットを認識し、バウンディングボックスとポリゴンを対応する YOLO タスクタイプにマッピングします:
Each object's name becomes the class name — so a "name": "Dog" annotation imports as the class Dog, not its lowercase value — and pixel coordinates are normalized against the media_attributes dimensions in the export. A catalog export with no annotations imports as an unlabeled image dataset, ready to label in Platform's annotation editor.
単一のデータ行は、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 つのポイントが必要です。