Segurança pronta para empresas: Em conformidade com ISO 27001 + SOC 2 Tipo I.

Link to this sectionIntegração com o Labelbox#

O Ultralytics Platform lê exportações NDJSON do Labelbox diretamente. Não há nenhuma chave para colar, nenhuma conexão para manter ativa e nenhum script de conversão para manter — exporte do Labelbox, carregue o arquivo e suas etiquetas chegam como um conjunto de dados normal da Platform.

Link to this sectionImportar do Labelbox#

  1. Exporte do Labelbox. Abra o projeto de rotulagem ou o catálogo que você deseja trazer e vá para a aba Data Rows. Selecione All, clique em Export data, escolha os campos a serem incluídos e confirme. Vai exportar do Catalog em vez de um projeto? Ative Export labels from project e escolha o projeto, ou o arquivo chegará sem nenhuma anotação.
  2. Baixe o arquivo. O Labelbox executa a exportação como um trabalho em segundo plano. Fique de olho em Notifications e clique em Download quando terminar para salvar o arquivo .ndjson.
  3. Carregue na Platform. Crie um novo conjunto de dados e carregue o arquivo .ndjson, ou cole um link direto para ele. Você também pode começar em Settings > Integrations > Labelbox.
  4. Treine. Assim que o processamento terminar, edite as anotações e treine exatamente como qualquer outro conjunto de dados da Platform.

Ao contrário do CVAT e do Label Studio, não há formato para escolher — a própria exportação do Labelbox é a suportada.

Link to this sectionExportar com o SDK#

O Labelbox também oferece a tarefa de exportação em seu SDK em Python, que é o caminho mais fácil para um pipeline repetível. Faça o streaming da tarefa e escreva 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()  # 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())
Escreva NDJSON, não um array JSON

O NDJSON é um objeto JSON por linha. json.dump(list_of_rows, f) grava um único array, e a Platform pula qualquer linha que não seja um objeto JSON — a importação não encontra nenhuma linha de dados. Use o loop acima ou "\n".join(json.dumps(r) for r in rows).

Link to this sectionO que é importado#

A Platform reconhece o formato do Labelbox por conta própria e mapeia caixas delimitadoras e polígonos para o tipo de tarefa YOLO correspondente:

Anotação do LabelboxImportado
Caixa delimitadoraDetect
PolígonoSegment
Máscara de segmentação, ponto, polilinhas, relacionamento, classificaçãoAinda não

O name de cada objeto se torna o nome da classe — portanto, uma anotação "name": "Dog" é importada como a classe Dog, e não o seu value em minúsculas — e as coordenadas de pixels são normalizadas em relação às dimensões de media_attributes na exportação. Uma exportação de catálogo sem anotações é importada como um conjunto de dados de imagens não rotuladas, pronto para ser rotulado no editor de anotações da Platform.

Uma única linha de dados se parece com isto, recortada para os campos que a Platform lê:

{
    "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 }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

Todo o resto na exportação — embeddings, metadata_fields, attachments, project_details — é ignorado. Vale a pena desmarcar os embeddings ao exportar: em uma exportação de amostra, eles representavam cerca de quatro quintos do arquivo, contra um quinto para os campos que a Platform realmente lê.

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

Apenas caixas delimitadoras e polígonos são lidos hoje, e apenas a partir de uma anotação de objeto — as classificações em nível de imagem ficam em outro lugar na 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 suas imagens, mas sem anotações, e nenhum erro é gerado. Você pode identificá-lo na página do conjunto de dados: um conjunto de dados importado que manteve seus rótulos mostra uma contagem de rotulados e anotações ao lado da contagem de imagens, e um que os perdeu não mostra nenhum dos dois.

Carregue a exportação enquanto seus links estiverem ativos

Uma exportação do Labelbox faz referência a cada imagem por URL assinada em vez de incorporar os pixels, e essas assinaturas expiram. A Platform baixa as imagens a partir dessas URLs, testando uma amostra antes de começar, de modo que uma exportação cujos links tenham caducado falha imediatamente e informa o motivo — reexporte do Labelbox e carregue o novo arquivo. Uma exportação que está apenas parcialmente expirada importa as imagens que ainda consegue alcançar e pula o restante, portanto, faça o upload logo após exportar.

Em uma exportação mista, as caixas são descartadas

Uma exportação contendo caixas delimitadoras e polígonos é importada como um conjunto de dados de segmentos, e um conjunto de dados de segmentos carrega apenas a geometria de polígonos — as anotações de caixa não são usadas para treinamento nem incluídas nas exportações de versão. Exporte caixas e polígonos como projetos do Labelbox separados se você precisar de ambos. Os polígonos também precisam de pelo menos três pontos para serem lidos.

Contribuidores

Comentários