YOLO Vision 2026 :

Intégration Labelbox#

Ultralytics Platform lit directement les exports NDJSON de Labelbox. Aucune clé à coller, aucune connexion à maintenir active et aucun script de conversion à entretenir : exporte depuis Labelbox, importe le fichier et tes annotations arrivent sous forme de dataset Platform standard.

Importer depuis Labelbox#

  1. Exporte depuis Labelbox. Ouvre le projet d'annotation ou le catalogue que tu veux importer, puis accède à l'onglet Data Rows. Sélectionne All, clique sur Export data, choisis les champs à inclure et confirme. Tu exportes depuis le catalogue plutôt que depuis un projet ? Active Export labels from project et sélectionne le projet, sinon le fichier arrive sans aucune annotation.
  2. Télécharge le fichier. Labelbox exécute l'export comme tâche en arrière-plan. Surveille son avancement dans les Notifications, puis clique sur Download une fois terminé pour enregistrer le fichier .ndjson.
  3. Importe dans Platform. Crée un nouveau dataset et importe le fichier .ndjson, ou colle un lien direct vers celui-ci. Tu peux aussi commencer depuis Settings > Integrations > Labelbox.
  4. Entraîne ton modèle. Une fois le traitement terminé, modifie les annotations et entraîne ton modèle exactement comme avec n'importe quel autre dataset Platform.

Import d'un dataset Labelbox dans Ultralytics Platform

Contrairement à CVAT et Label Studio, tu n'as aucun format à choisir : l'export natif de Labelbox est le seul format pris en charge.

Exporter avec le SDK#

Labelbox propose également la tâche d'export dans son SDK Python, une solution plus simple pour un pipeline reproductible. Diffuse la tâche et écris un objet JSON par ligne :

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())
Écris du NDJSON, pas un tableau JSON

Le NDJSON contient un objet JSON par ligne. json.dump(list_of_rows, f) écrit à la place un tableau unique, et Platform ignore toute ligne qui n'est pas un objet JSON : l'import ne trouve alors aucune ligne de données. Utilise la boucle ci-dessus ou "\n".join(json.dumps(r) for r in rows).

Éléments importés#

Platform reconnaît automatiquement le format Labelbox et associe les cadres englobants et les polygones au type de tâche YOLO correspondant :

Annotation LabelboxImporté
Cadre englobantDétection
PolygoneSegmentation
Masque de segmentation, point, polyligne, relation, classificationPas encore

Le name de chaque objet devient le nom de la classe : une annotation "name": "Dog" est donc importée comme la classe Dog, et non comme son value en minuscules. Les coordonnées en pixels sont normalisées par rapport aux dimensions media_attributes indiquées dans l'export. Chaque image est nommée d'après son data_row.external_id, avec comme solution de repli le nom du fichier dans l'URL signée lorsque l'export ne contient aucun identifiant externe. Un export du catalogue sans annotations est importé comme dataset d'images non annotées, prêt à être annoté dans l'éditeur d'annotations de Platform.

Voici à quoi ressemble une seule ligne de données, limitée aux champs lus par 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 }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

Tout le reste de l'export — embeddings, metadata_fields, attachments, project_details — est ignoré. Il est préférable de désélectionner les embeddings lors de l'export : dans un exemple d'export, ils représentaient environ quatre cinquièmes du fichier, contre un cinquième pour les champs effectivement lus par Platform.

Les projets de masques et de points sont importés sans annotations

Seuls les cadres englobants et les polygones sont actuellement lus, et uniquement depuis une annotation d'objet ; les classifications au niveau de l'image se trouvent ailleurs dans l'export et sont ignorées. Un projet entièrement annoté avec l'outil de masque de segmentation (pinceau), des points, des polylignes ou des classifications importe ses images, mais aucune annotation, sans générer d'erreur. Tu peux le vérifier sur la page du dataset : un dataset importé qui a conservé ses labels affiche un nombre de labels et d'annotations à côté du nombre d'images, tandis que celui qui les a perdus n'affiche ni l'un ni l'autre.

Importe l'export tant que ses liens sont encore valides

Un export Labelbox référence chaque image par une URL signée au lieu d'intégrer les pixels, et ces signatures expirent. Platform télécharge les images depuis ces URL et teste un échantillon avant de commencer. Ainsi, si tous les liens d'un export ont expiré, l'import échoue immédiatement en indiquant la raison : réexporte depuis Labelbox et importe le nouveau fichier. Un export dont les liens n'ont expiré qu'en partie importe les images encore accessibles et ignore les autres ; importe donc le fichier peu après l'export.

Dans un export mixte, les cadres sont ignorés

Un export contenant à la fois des cadres englobants et des polygones est importé comme dataset de segmentation, et un dataset de segmentation ne conserve que la géométrie des polygones : les annotations de cadres ne sont pas utilisées pour l'entraînement et ne sont pas incluses dans les exports de versions. Exporte les cadres et les polygones dans des projets Labelbox distincts si tu as besoin des deux. Les polygones doivent également comporter au moins trois points pour être lus.

Contributeurs

Commentaires