Sicurezza pronta per le aziende: Conforme a ISO 27001 + SOC 2 Type I.

Link to this sectionIntegrazione Labelbox#

Ultralytics Platform legge direttamente gli export NDJSON di Labelbox. Non c'è alcuna chiave da incollare, nessuna connessione da mantenere attiva e alcuno script di conversione da gestire: esporta da Labelbox, carica il file e le tue etichette arrivano come un normale dataset di Platform.

Link to this sectionImporta da Labelbox#

  1. Esporta da Labelbox. Apri il progetto di etichettatura o il catalogo che desideri trasferire e vai alla scheda Data Rows. Seleziona All, fai clic su Export data, scegli i campi da includere e conferma. Stai esportando dal Catalogo anziché da un progetto? Abilita Export labels from project e seleziona il progetto, altrimenti il file arriverà senza alcuna annotazione.
  2. Scarica il file. Labelbox esegue l'export come attività in background. Tienilo d'occhio in Notifications e fai clic su Download al termine per salvare il file .ndjson.
  3. Carica su Platform. Crea un nuovo dataset e carica il file .ndjson, oppure incolla un link diretto ad esso. Puoi anche iniziare da Settings > Integrations > Labelbox.
  4. Allena. Una volta completata l'elaborazione, modifica le annotazioni e allena esattamente come qualsiasi altro dataset di Platform.

A differenza di CVAT e Label Studio, non c'è alcun formato da scegliere: l'export nativo di Labelbox è quello supportato.

Link to this sectionEsporta con l'SDK#

Labelbox offre inoltre l'attività di export nel suo Python SDK, che rappresenta la via più semplice per una pipeline ripetibile. Esegui lo streaming dell'attività e scrivi un oggetto JSON per riga:

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())
Scrivi NDJSON, non un array JSON

NDJSON è un oggetto JSON per riga. json.dump(list_of_rows, f) scrive invece un singolo array, e Platform ignora qualsiasi riga che non sia un oggetto JSON: l'importazione non troverà alcun record di dati. Usa il ciclo sopra, oppure "\n".join(json.dumps(r) for r in rows).

Link to this sectionCosa viene importato#

Platform riconosce autonomamente il formato Labelbox e mappa i riquadri di delimitazione e i poligoni al tipo di attività YOLO corrispondente:

Annotazione LabelboxImportato
Riquadro di delimitazioneDetect
PoligonoSegment
Maschera di segmentazione, punto, polilinea, relazione, classificazioneNon ancora

Il name di ciascun oggetto diventa il nome della classe — quindi un'annotazione "name": "Dog" viene importata come classe Dog, non come il suo value in minuscolo — e le coordinate dei pixel vengono normalizzate rispetto alle dimensioni di media_attributes nell'export. Un export di catalogo senza annotazioni viene importato come un dataset di immagini non etichettate, pronto per essere etichettato nell'editor di annotazioni di Platform.

Un singolo record di dati si presenta così, ridotto ai campi letti da 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 }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

Tutto il resto nell'export — embeddings, metadata_fields, attachments, project_details — viene ignorato. Conviene deselezionare gli embedding durante l'export: in un export di esempio occupavano circa quattro quinti del file, contro un quinto per i campi letti effettivamente da Platform.

I progetti con maschere e punti vengono importati senza annotazioni

Al momento vengono letti solo i riquadri di delimitazione e i poligoni, e solo da un'annotazione di oggetto: le classificazioni a livello di immagine si trovano altrove nell'export e vengono saltate. Un progetto etichettato interamente con lo strumento maschera di segmentazione (pennello), punti, polilinee o classificazioni importa le sue immagini ma nessuna annotazione, e non viene generato alcun errore. Puoi individuarlo nella pagina del dataset: un dataset importato che ha mantenuto le sue etichette mostra un conteggio delle etichette e delle annotazioni accanto al conteggio delle immagini, mentre uno che le ha perse non mostra nessuno dei due.

Carica l'export mentre i suoi link sono ancora validi

Un export di Labelbox fa riferimento a ciascuna immagine tramite un URL firmato anziché incorporare i pixel, e tali firme scadono. Platform scarica le immagini da quegli URL, effettuando un controllo su un campione prima di iniziare, quindi un export i cui link sono tutti scaduti fallisce immediatamente e ne spiega il motivo: riesporta da Labelbox e carica il nuovo file. Un export parzialmente scaduto importa le immagini che riesce ancora a raggiungere e salta le altre, quindi carica il file poco dopo l'export.

In un export misto, i riquadri vengono scartati

Un export contenente sia riquadri di delimitazione che poligoni viene importato come dataset di segmenti, e un dataset di segmenti contiene solo la geometria dei poligoni: le annotazioni dei riquadri non vengono utilizzate per l'addestramento né incluse negli export di versione. Esporta riquadri e poligoni come progetti Labelbox separati se ti servono entrambi. I poligoni richiedono inoltre almeno tre punti per essere letti.

Contributori

Commenti