Link to this sectionLabelbox-Integration#
Ultralytics Platform liest Labelbox-NDJSON-Exporte direkt ein. Es muss kein Schlüssel eingefügt werden, keine Verbindung aufrechterhalten und kein Konvertierungsskript gepflegt werden – einfach aus Labelbox exportieren, die Datei hochladen und deine Labels kommen als normaler Platform-Datensatz an.
Link to this sectionAus Labelbox importieren#
- Aus Labelbox exportieren. Öffne das Labeling-Projekt oder den Katalog, den du übernehmen möchtest, und gehe zum Tab Data Rows. Wähle All aus, klicke auf Export data, wähle die einzuschließenden Felder aus und bestätige. Exportierst du aus dem Katalog statt aus einem Projekt? Aktiviere Export labels from project und wähle das Projekt aus, da die Datei sonst komplett ohne Annotationen ankommt.
- Die Datei herunterladen. Labelbox führt den Export als Hintergrundprozess aus. Achte auf Benachrichtigungen in den Benachrichtigungen und klicke nach Abschluss auf Download, um die
.ndjson-Datei zu speichern. - In Platform hochladen. Erstelle einen neuen Datensatz und lade die
.ndjson-Datei hoch oder füge einen direkten Link dazu ein. Du kannst auch unter Settings > Integrations > Labelbox starten. - Trainieren. Sobald die Verarbeitung abgeschlossen ist, bearbeite die Annotationen und trainiere genau wie bei jedem anderen Platform-Datensatz.
Im Gegensatz zu CVAT und Label Studio gibt es kein Format auszuwählen – der eigene Export von Labelbox wird unterstützt.
Link to this sectionMit dem SDK exportieren#
Labelbox bietet die Exportaufgabe auch in seinem Python-SDK an, was der einfachere Weg für eine wiederholbare Pipeline ist. Streame die Aufgabe und schreibe ein JSON-Objekt pro Zeile:
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 besteht aus einem JSON-Objekt pro Zeile. json.dump(list_of_rows, f) schreibt stattdessen ein einzelnes Array, und Platform überspringt jede Zeile, die kein JSON-Objekt ist – der Import findet überhaupt keine Datenzeilen. Verwende die obige Schleife oder "\n".join(json.dumps(r) for r in rows).
Link to this sectionWas wird importiert#
Platform erkennt das Labelbox-Format eigenständig und ordnet Begrenzungsrahmen (Bounding Boxes) und Polygone dem passenden YOLO-Aufgabentyp zu:
| Labelbox-Annotation | Importiert |
|---|---|
| Bounding Box | Detect |
| Polygon | Segment |
| Segmentierungsmaske, Punkt, Polylinie, Beziehung, Klassifizierung | Noch nicht |
Der name jedes Objekts wird zum Klassennamen – eine "name": "Dog"-Annotation wird also als Klasse Dog importiert und nicht als ihr kleingeschriebener value –, und die Pixelkoordinaten werden gegen die media_attributes-Dimensionen im Export normalisiert. Ein Katalogexport ohne Annotationen wird als unbeschrifteter Bilddatensatz importiert, bereit zum Beschriften im Annotations-Editor von Platform.
Eine einzelne Datenzeile sieht wie folgt aus, gekürzt auf die Felder, die Platform liest:
{
"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 }
}
]
}
}
]
}
}
}Alles andere im Export – embeddings, metadata_fields, attachments, project_details – wird ignoriert. Es lohnt sich, die Embeddings beim Export abzuwählen: In einem Beispiel-Export machten sie etwa vier Fünftel der Datei aus, gegenüber einem Fünftel für die Felder, die Platform tatsächlich liest.
Derzeit werden nur Bounding Boxes und Polygone eingelesen, und das auch nur aus einer Objektannotation – bildweite Klassifizierungen befinden sich an anderer Stelle im Export und werden übersprungen. Ein Projekt, das ausschließlich mit dem Segmentierungsmasken- (Pinsel-) Werkzeug, Punkten, Polylinien oder Klassifizierungen beschriftet wurde, importiert zwar seine Bilder, aber keine Annotationen, und es wird kein Fehler ausgegeben. Du kannst dies auf der Datensatzseite erkennen: Ein importierter Datensatz, der seine Labels behalten hat, zeigt eine Anzahl an beschrifteten Elementen und Annotationen neben der Bildanzahl an, während ein Datensatz, der sie verloren hat, keines von beiden anzeigt.
Ein Labelbox-Export verweist auf jedes Bild über eine signierte URL, anstatt die Pixel einzubetten, und diese Signaturen laufen ab. Platform lädt die Bilder von diesen URLs herunter und testet vor dem Start eine Stichprobe; ein Export, dessen Links alle abgelaufen sind, schlägt daher sofort fehl und teilt dir den Grund mit – exportiere einfach erneut aus Labelbox und lade die neue Datei hoch. Ein Export, der nur teilweise abgelaufen ist, importiert die Bilder, die er noch erreichen kann, und überspringt den Rest. Lade die Datei daher bald nach dem Export hoch.
Ein Export, der sowohl Bounding Boxes als auch Polygone enthält, wird als Segmentdatensatz importiert, und ein Segmentdatensatz enthält ausschließlich Polygongeometrien – die Box-Annotationen werden weder für das Training verwendet noch in Versionsexporte einbezogen. Exportiere Boxen und Polygone als separate Labelbox-Projekte, wenn du beides benötigst. Polygone erfordern außerdem mindestens drei Punkte, um eingelesen zu werden.