YOLO Vision 2026:

Labelbox連携#

Ultralytics PlatformはLabelboxのNDJSONエクスポートを直接読み込みます。貼り付けるキーも、維持すべき接続も、保守する変換スクリプトも必要ありません。Labelboxからエクスポートしてファイルをアップロードするだけで、ラベルが通常のPlatformデータセットとして取り込まれます。

Labelboxからインポート#

  1. **Labelboxからエクスポートします。**取り込みたいラベリングプロジェクトまたはカタログを開き、Data Rowsタブに移動します。Allを選択し、Export dataをクリックして、含めるフィールドを選択し、確定します。プロジェクトではなくカタログからエクスポートしますか?Export labels from projectを有効にしてプロジェクトを選択してください。有効にしないと、アノテーションがまったく含まれないファイルになります。
  2. ファイルをダウンロードします。Labelboxはエクスポートをバックグラウンドジョブとして実行します。Notificationsで完了を確認し、完了したらDownloadをクリックして.ndjsonファイルを保存します。
  3. **Platformにアップロードします。**新しいデータセットを作成して.ndjsonファイルをアップロードするか、ファイルへの直接リンクを貼り付けます。Settings > Integrations > Labelboxから開始することもできます。
  4. **トレーニングします。**処理が完了したら、他のPlatformデータセットと同じようにアノテーションを編集してトレーニングできます。

Ultralytics Platform Labelboxデータセットインポート

CVATLabel 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())
JSON配列ではなくNDJSONを書き込む

NDJSONは1行に1つのJSONオブジェクトを記述します。json.dump(list_of_rows, f)は代わりに単一の配列を書き込み、PlatformはJSONオブジェクトではない行をすべてスキップするため、インポートでデータ行がまったく見つかりません。上記のループまたは"\n".join(json.dumps(r) for r in rows)を使用してください。

インポートされる内容#

PlatformはLabelbox形式を自動的に認識し、バウンディングボックスとポリゴンを対応するYOLOタスクタイプにマッピングします。

Labelboxアノテーションインポート結果
バウンディングボックス検出
ポリゴンセグメンテーション
セグメンテーションマスク、ポイント、ポリライン、リレーションシップ、分類未対応

各オブジェクトの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 }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

エクスポート内のその他すべての要素(embeddingsmetadata_fieldsattachmentsproject_details)は無視されます。エクスポート時には埋め込みを選択解除することをおすすめします。サンプルエクスポートでは、埋め込みがファイルの約5分の4を占め、Platformが実際に読み取るフィールドは5分の1でした。

マスクおよびポイントのプロジェクトはアノテーションなしでインポートされる

現在読み取られるのはバウンディングボックスとポリゴンのみで、しかもオブジェクトアノテーションからのみです。画像レベルの分類はエクスポート内の別の場所に保存され、スキップされます。セグメンテーションマスク(ブラシ)ツール、ポイント、ポリライン、または分類だけでラベリングされたプロジェクトでは、画像はインポートされますがアノテーションはインポートされず、エラーも発生しません。データセットページで確認できます。ラベルが保持されたインポート済みデータセットでは、画像数の横にラベル数とアノテーション数が表示され、ラベルが失われたデータセットではどちらも表示されません。

リンクが有効なうちにエクスポートをアップロードする

Labelboxのエクスポートでは、各画像がピクセルデータとして埋め込まれるのではなく、署名付きURLで参照されます。この署名には有効期限があります。Platformは処理を開始する前にサンプルを確認し、これらのURLから画像をダウンロードします。そのため、リンクがすべて期限切れになったエクスポートは直ちに失敗し、理由が表示されます。Labelboxから再度エクスポートして、新しいファイルをアップロードしてください。一部だけ期限切れになったエクスポートでは、まだアクセスできる画像がインポートされ、残りはスキップされます。そのため、エクスポート後すぐにアップロードしてください。

混在したエクスポートではボックスが破棄される

バウンディングボックスとポリゴンの両方を含むエクスポートは、セグメントデータセットとしてインポートされます。セグメントデータセットにはポリゴンジオメトリのみが含まれるため、ボックスアノテーションはトレーニングに使用されず、バージョンエクスポートにも含まれません。両方が必要な場合は、ボックスとポリゴンを別々のLabelboxプロジェクトとしてエクスポートしてください。ポリゴンを読み取るには、少なくとも3つのポイントも必要です。

コメント