Ultralytics YOLO27: Inscreve-te na lista de espera.
Get Started

Integração com Labelbox#

O Ultralytics Platform lê diretamente as exportações NDJSON do Labelbox. Não precisas de colar uma chave, manter uma ligação ativa nem atualizar um script de conversão — exporta do Labelbox, carrega o ficheiro e os teus rótulos chegam como um conjunto de dados normal do Platform.

Importar do Labelbox#

  1. Exportar do Labelbox. Num projeto de anotação, abre o separador Data Rows, seleciona All, clica em Export data, escolhe os campos a incluir e confirma. Em Catalog, seleciona as linhas de dados e escolhe Manage selection > Export data; depois ativa Export labels from project e seleciona o projeto. Caso contrário, o ficheiro chega sem anotações.
  2. Transferir o ficheiro. O Labelbox executa a exportação como uma tarefa em segundo plano. Procura-a em Notifications e clica em Download quando estiver concluída para guardar o ficheiro .ndjson.
  3. Carregar para o Platform. Cria um novo conjunto de dados e carrega o ficheiro .ndjson ou cola uma ligação direta para o ficheiro. Também podes começar em Settings > Integrations > Labelbox.
  4. Treinar. Quando o processamento terminar, edita as anotações e treina exatamente como farias com qualquer outro conjunto de dados do Platform.

Importação de conjuntos de dados do Labelbox no Ultralytics Platform

Ao contrário do CVAT e do Label Studio, não há nenhum formato para escolher — a exportação nativa do Labelbox é a única compatível.

Exportar com o SDK#

O Labelbox também disponibiliza a tarefa de exportação no SDK Python, que é a opção mais simples para um fluxo de trabalho repetível. Transmite a tarefa e grava um objeto JSON por linha:

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()  # transmitir uma tarefa que não está COMPLETE gera um erro

with open("dataset.ndjson", "w") as f:
    f.writelines(json.dumps(data_row.json) + "\n" for data_row in export_task.get_buffered_stream())
Escreve NDJSON, não uma matriz JSON

NDJSON contém um objeto JSON por linha. json.dump(list_of_rows, f) escreve uma única matriz, e o Platform ignora todas as linhas que não sejam objetos JSON — a importação não encontra quaisquer linhas de dados. Usa o ciclo acima ou "\n".join(json.dumps(r) for r in rows).

O que é importado#

O Platform reconhece automaticamente o formato do Labelbox e associa as caixas delimitadoras e os polígonos ao tipo de tarefa YOLO correspondente:

Anotação do LabelboxImportado
Caixa delimitadoraDetetar
PolígonoSegmentar
Máscara de segmentação, ponto, polilinha, relação, classificaçãoAinda não

O name de cada objeto torna-se o nome da classe — por isso, uma anotação "name": "Dog" é importada como a classe Dog, e não como o seu value em minúsculas — e as coordenadas dos píxeis são normalizadas em relação às dimensões media_attributes da exportação. Por isso, mantém os atributos de multimédia na exportação: as linhas sem largura e altura importam a imagem sem anotações. Só os objetos que o Platform consegue importar registam uma classe, pelo que as ferramentas de máscara, ponto e polilinha não adicionam classes vazias ao conjunto de dados. O nome de cada imagem é o seu data_row.external_id, seguido do seu global_key; se a exportação não incluir nenhum dos dois, usa-se o nome do ficheiro no URL assinado. As linhas de dados de imagem são importadas; as linhas de dados de vídeo, texto e outros tipos que não sejam imagens são ignoradas. Uma exportação do catálogo sem anotações é importada como um conjunto de dados de imagens sem rótulos, pronto para ser anotado no editor de anotações do Platform.

Uma única linha de dados é semelhante a esta, reduzida aos campos que o Platform lê:

{
    "data_row": {
        "external_id": "000000000307.jpg",
        "global_key": "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 }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

Tudo o resto na exportação — embeddings, metadata_fields, attachments, project_details — é ignorado. Vale a pena não selecionar os embeddings ao exportar: numa exportação de exemplo, ocupavam cerca de quatro quintos do ficheiro, enquanto os campos que o Platform realmente lê ocupavam um quinto.

Projetos de máscaras e pontos são importados sem anotações

Atualmente, só são lidas caixas delimitadoras e polígonos, e apenas quando fazem parte de uma anotação de objeto — as classificações ao nível da imagem estão noutra parte da exportação e são ignoradas. Um projeto rotulado inteiramente com a ferramenta de máscara de segmentação (pincel), pontos, polilinhas ou classificações importa as imagens, mas não as anotações, e não gera nenhum erro. Podes confirmar isso na página do conjunto de dados: um conjunto de dados importado que manteve os rótulos apresenta as contagens de imagens rotuladas e de anotações junto à contagem de imagens; se os rótulos se perderam, não apresenta nenhuma das duas.

Carrega a exportação enquanto as ligações ainda são válidas

Uma exportação do Labelbox referencia cada imagem através de um URL assinado, em vez de incluir os píxeis, e essas assinaturas expiram. O Platform transfere as imagens a partir desses URLs, testando uma amostra antes de começar. Por isso, se todas as ligações de uma exportação tiverem expirado, a importação falha imediatamente e explica o motivo — volta a exportar do Labelbox e carrega o novo ficheiro. Se apenas algumas ligações tiverem expirado, são importadas as imagens ainda acessíveis e as restantes são ignoradas; por isso, carrega o ficheiro pouco depois da exportação.

Numa exportação mista, as caixas são descartadas

Uma exportação que contenha caixas delimitadoras e polígonos é importada como um conjunto de dados de segmentação, que só inclui a geometria dos polígonos — as anotações das caixas não são usadas no treino nem incluídas nas exportações de versões. Exporta as caixas e os polígonos como projetos Labelbox separados se precisares de ambos. Os polígonos também têm de ter pelo menos três pontos para serem lidos.

Perguntas frequentes#

  • As caixas delimitadoras são importadas como um conjunto de dados detect e os polígonos como um conjunto de dados segment. As máscaras de segmentação, os pontos, as polilinhas, as relações e as classificações ainda não são lidos; por isso, um projeto rotulado apenas com essas ferramentas importa as imagens sem anotações.

  • O Platform lê NDJSON, com um objeto JSON por linha. Uma exportação guardada como uma única matriz JSON é totalmente ignorada. Usa o ciclo do SDK acima ou a transferência Export data do próprio Labelbox, que já está no formato NDJSON.

  • Não. Uma exportação mista é importada como um conjunto de dados de segmentação e só os polígonos são usados. Exporta as caixas e os polígonos como projetos Labelbox separados se precisares de ambos.

Comentários