YOLO Vision 2026 :

Intégration Labelbox#

Ultralytics Platform lit directement les exports NDJSON de Labelbox. Il n'y a pas de clé à coller, pas de connexion à maintenir active et aucun script de conversion à entretenir : fais un export depuis Labelbox, importe le fichier et tes étiquettes arriveront comme un dataset Platform normal.

Importer depuis Labelbox#

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

Ultralytics Platform Labelbox Dataset Import

Contrairement à CVAT et Label Studio, il n'y a pas de format à choisir : l'export natif de Labelbox est celui pris en charge.

Exporter avec le SDK#

Labelbox propose également la tâche d'export dans son SDK Python, ce qui représente la solution la plus simple pour un pipeline répétable. Diffuse la tâche en flux continu 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 format NDJSON correspond à un objet JSON par ligne. json.dump(list_of_rows, f) écrit un tableau unique à la place, 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).

Ce qui est importé#

Platform reconnaît de lui-même le format Labelbox et fait correspondre les boîtes englobantes et les polygones au type de tâche YOLO approprié :

Annotation LabelboxImporté
Boîte englobanteDetect
PolygoneSegment
Masque de segmentation, point, polyligne, relation, classificationPas encore

Chaque objet name devient le nom de classe — ainsi, une annotation "name": "Dog" est importée sous la classe Dog, et non sous sa forme en minuscules value — et les coordonnées en pixels sont normalisées par rapport aux dimensions de media_attributes dans l'exportation. Chaque image est nommée d'après son data_row.external_id, en se repliant sur le nom de fichier dans l'URL signée lorsque l'exportation ne comporte aucun ID externe. Une exportation de catalogue sans annotations est importée en tant jeu de données d'images non étiquetées, prêt à être étiqueté dans l'éditeur d'annotations de Platform.

Une seule ligne de données ressemble à ceci, tronqué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 dans l'export — embeddings, metadata_fields, attachments, project_details — est ignoré. Il vaut la peine de désélectionner les embeddings lors de l'export : dans un export d'exemple, ils représentaient environ les quatre cinquièmes du fichier, contre un cinquième pour les champs réellement lus par Platform.

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

Seules les boîtes englobantes et les polygones sont lus actuellement, et uniquement à partir d'une annotation d'objet — les classifications au niveau de l'image se trouvent ailleurs dans l'export et sont ignorées. Un projet étiqueté entièrement avec l'outil de masque de segmentation (pinceau), des points, des polylignes ou des classifications importe ses images mais aucune annotation, et aucune erreur n'est générée. Tu peux le repérer sur la page du jeu de données : un jeu de données importé qui a conservé ses étiquettes affiche un compteur d'éléments étiquetés 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 valides

Un export Labelbox référence chaque image par une URL signée plutôt que d'intégrer les pixels, et ces signatures expirent. Platform télécharge les images à partir de ces URL, en testant un échantillon avant de commencer ; un export dont tous les liens ont expiré échoue donc immédiatement et t'en indique la raison — ré-exporte depuis Labelbox et importe le nouveau fichier. Un export partiellement expiré importe les images qu'il peut encore atteindre et ignore le reste, alors importe rapidement après l'export.

Dans un export mixte, les boîtes sont supprimées

Un export contenant à la fois des boîtes englobantes et des polygones est importé en tant que jeu de données de segments, et un jeu de données de segments ne transporte que la géométrie des polygones — les annotations de boîtes ne sont pas utilisées pour l'entraînement et ne sont pas incluses dans les exports de versions. Exporte les boîtes et les polygones sous forme de projets Labelbox séparés si tu as besoin des deux. Les polygones ont également besoin d'au moins trois points pour être lus.

Contributeurs

Commentaires