Dados de saída - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Dados de saída

A saída de um trabalho de rotulagem é colocada no local do Amazon S3 que você especificou no console ou na chamada para a operação CreateLabelingJob. Os dados de saída aparecem nesse local quando os trabalhadores enviam uma ou mais tarefas ou quando as tarefas expiram. Observe que pode levar alguns minutos para que os dados de saída apareçam no Amazon S3 depois que o trabalhador envia a tarefa ou a tarefa expira.

Cada linha no arquivo de dados de saída é idêntica ao arquivo de manifesto com a adição de um atributo e um valor para o rótulo atribuído ao objeto de entrada. O nome do atributo para o valor é definido no console ou na chamada para a operação CreateLabelingJob. Você não pode usar -metadata no nome de atributo do rótulo. Se você estiver executando um trabalho de segmentação de semântica de imagem, de segmentação de semântica de nuvem de pontos 3D ou de rastreamento de objetos de nuvem de pontos 3D, o atributo de rótulo deve terminar com -ref. Para qualquer outro tipo de trabalho, o nome do atributo não pode terminar com -ref.

A saída do trabalho de rotulagem é o valor do par de chave-valor com o rótulo. O rótulo e o valor substituem quaisquer dados JSON existentes no arquivo de entrada pelo novo valor.

Por exemplo, veja a seguir a saída de um trabalho de rotulagem de classificação de imagem em que os arquivos de dados de entrada foram armazenados em um AWSDOC-EXAMPLE-BUCKET do Amazon S3 e o nome de atributo do rótulo foi definido como sport. Neste exemplo, o objeto JSON é formatado para legibilidade, no arquivo de saída real, e o objeto JSON está em uma única linha. Para obter mais informações sobre o formato de dados, consulte Linhas JSON.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/image_example.png", "sport":0, "sport-metadata": { "class-name": "football", "confidence": 0.00, "type":"groundtruth/image-classification", "job-name": "identify-sport", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256" } }

O valor do rótulo pode ser qualquer JSON válido. Nesse caso, o valor do rótulo é o índice da classe na lista de classificação. Outros tipos de trabalho, como caixa delimitadora, possuem valores mais complexos.

Qualquer par de chave/valor no arquivo de manifesto de entrada diferente do atributo de rótulo permanece inalterado no arquivo de saída. Você pode usar isso para transmitir dados ao seu aplicativo.

A saída de um trabalho de rotulagem pode ser usada como entrada para outro trabalho de rotulagem. Ela pode ser usada quando você estiver encadeando trabalhos de rotulagem. Por exemplo, pode enviar um trabalho de rotulagem para determinar o esporte que está sendo praticado. Em seguida, você envia outro usando os mesmos dados para determinar se o esporte está sendo praticado em ambientes fechados ou ao ar livre. Usando os dados de saída do primeiro trabalho como o manifesto do segundo trabalho, você pode consolidar os resultados dos dois trabalhos em um único arquivo de saída para facilitar o processamento pelos seus aplicativos.

O arquivo de dados de saída é gravado no local de saída periodicamente enquanto o trabalho está em andamento. Esses arquivos intermediários contêm uma linha para cada linha no arquivo manifesto. Se um objeto estiver rotulado, o rótulo será incluído. Se o objeto não tiver sido rotulado, ele será gravado no arquivo de saída intermediário de forma idêntica ao arquivo de manifesto.

Diretórios de saída

O Ground Truth cria vários diretórios no caminho de saída do Amazon S3. Esses diretórios contêm os resultados do seu trabalho de rotulagem e outros artefatos do trabalho. O diretório de nível superior de um trabalho de rotulagem recebe o mesmo nome do seu trabalho de rotulagem; os diretórios de saída são colocados abaixo dele. Por exemplo, se você nomeou seu trabalho de rotulagem como find-people, sua saída estará nos seguintes diretórios:

s3://AWSDOC-EXAMPLE-BUCKET/find-people/activelearning s3://AWSDOC-EXAMPLE-BUCKET/find-people/annotations s3://AWSDOC-EXAMPLE-BUCKET/find-people/inference s3://AWSDOC-EXAMPLE-BUCKET/find-people/manifests s3://AWSDOC-EXAMPLE-BUCKET/find-people/training

Cada diretório contém a seguinte saída:

Diretório de aprendizagem ativa

O diretório activelearning só está presente quando você usa a rotulagem de dados automatizada. Ele contém o conjunto de validação de entrada e saída para rotulagem de dados automatizada e a pasta de entrada e saída para dados automaticamente rotulados.

Diretório annotations

O diretório annotations contém todas as anotações feitas pela força de trabalho. Estas são as respostas de trabalhadores individuais que não foram consolidadas em um único rótulo para o objeto de dados.

Há três subdiretórios no diretório annotations.

  • O primeiro, worker-response, contém as respostas dos operadores individuais. Ele contém um subdiretório para cada iteração, que, por sua vez, contém um subdiretório para cada objeto de dados nessa iteração. Os dados de resposta do trabalhador para cada objeto de dados são armazenados em um arquivo JSON com carimbo de data e hora que contém as respostas enviadas por cada trabalhador para esse objeto de dados e, se você usa uma força de trabalho privada, metadados sobre esses trabalhadores. Para saber mais sobre este metadado, consulte Metadados do operador.

  • O segundo, consolidated-annotation, contém informações necessárias para consolidar as anotações no lote atual em rótulos para os objetos de dados.

  • O terceiro, intermediate, contém o manifesto de saída para o lote atual com qualquer rótulo completo. Esse arquivo é atualizado conforme o rótulo de cada objeto de dados é concluído.

nota

Recomendamos não usar arquivos que não estejam mencionados na documentação.

Diretório inference

O diretório inference só está presente quando você usa a rotulagem de dados automatizada. Esse diretório contém os arquivos de entrada e saída para a transformação SageMaker em lote usada ao rotular objetos de dados.

Diretório manifest

O diretório manifest contém o manifesto de saída do seu trabalho de rotulagem. Há um subdiretório no diretório de manifesto, output. O diretório output contém o arquivo manifesto de saída para o trabalho de rotulagem. O arquivo se chama output.manifest.

Diretório training

O diretório training só está presente quando você usa a rotulagem de dados automatizada. O diretório contém os arquivos de entrada e saída utilizados para treinar o modelo de rotulagem de dados automatizada.

Escore de confiança

Quando você tem mais de um operador anotando uma única tarefa, seu rótulo resulta da consolidação da anotação. O Ground Truth calcula um escore de confiança para cada rótulo. Uma pontuação de confiança é um número entre 0 e 1 que indica a confiança do Ground Truth no rótulo. Você pode usar o escore de confiança para comparar objetos de dados rotulados entre si e identificar os rótulos menos seguros ou mais confiáveis.

Você não deve interpretar o valor de uma pontuação de confiança como um valor absoluto ou comparar pontuações de confiança entre trabalhos de rotulagem. Por exemplo, se todos os escores de confiança estiverem entre 0,98 e 0,998, você só deverá comparar os objetos de dados entre si, sem confiar nos escores de confiança altos.

Você não deve comparar os escores de confiança de objetos de dados com rotulagem humana e objetos de dados automaticamente rotulados. Os escores de confiança para humanos são calculados usando a função de consolidação de anotações para a tarefa. As pontuações de confiança para rotulagem automatizada são calculados usando um modelo que incorpora recursos de objeto. Os dois modelos geralmente têm escalas diferentes e confiança média.

Para um trabalho de rotulagem de caixa delimitadora, o Ground Truth calcula uma pontuação de confiança por caixa. Você pode comparar os escores de confiança em uma imagem ou entre imagens para o mesmo tipo de rotulagem (humana ou automática). Não é possível comparar os escores de confiança entre trabalhos de rotulagem.

Se um único operador anotar uma tarefa (NumberOfHumanWorkersPerDataObject está definido como 1 ou, no console, você inserir 1 para o Número de workers por objeto de conjunto de dados), a pontuação de confiança está definida como 0.00.

Metadados do operador

O Ground Truth fornece informações que você pode usar para rastrear trabalhadores individuais nos dados de saída da tarefa. Os dados a seguir estão localizados nos diretórios abaixo do worker-response localizado em Diretório annotations:

  • A acceptanceTime é a hora em que o trabalhador aceitou a tarefa. O formato desse carimbo de data e hora é YYYY-MM-DDTHH:MM:SS.mmmZ para o ano (YYYY), mês (MM), dia (DD), hora (HH), minuto (MM), segundo (SS) e milissegundo (mmm). A data e hora são separadas por um T.

  • A submissionTime é a hora em que o trabalhador enviou suas anotações usando o botão Enviar. O formato desse carimbo de data e hora é YYYY-MM-DDTHH:MM:SS.mmmZ para o ano (YYYY), mês (MM), dia (DD), hora (HH), minuto (MM), segundo (SS) e milissegundo (mmm). A data e hora são separadas por um T.

  • O timeSpentInSeconds relata o tempo total, em segundos, em que um operador trabalhou ativamente nessa tarefa. Essa métrica não inclui o momento em que um trabalhador fez uma pausa ou fez uma pausa.

  • O workerId é exclusivo para cada operador.

  • Se você usa uma força de trabalho privada no workerMetadata, você vê o seguinte.

    • O identityProviderType é o serviço usado para gerenciar a força de trabalho privada.

    • O issuer é o grupo de usuários do Cognito ou o emissor do provedor de identidade OIDC (IdP) associado à equipe de trabalho designada para essa tarefa de revisão humana.

    • Um identificador exclusivo sub que se refere ao operador. Se você criar uma força de trabalho usando o Amazon Cognito, poderá recuperar detalhes sobre esse trabalhador (como nome ou nome de usuário) usando esse ID usando o Amazon Cognito. Para saber como, consulte Gerenciamento e pesquisa de contas de usuários no Guia do desenvolvedor do Amazon Cognito.

Veja a seguir um exemplo do resultado que você pode ver se usar o Amazon Cognito para criar uma força de trabalho privada. Isso é identificado no identityProviderType.

"submissionTime": "2020-12-28T18:59:58.321Z", "acceptanceTime": "2020-12-28T18:59:15.191Z", "timeSpentInSeconds": 40.543, "workerId": "a12b3cdefg4h5i67", "workerMetadata": { "identityData": { "identityProviderType": "Cognito", "issuer": "https://cognito-idp.aws-region.amazonaws.com/aws-region_123456789", "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" } }

A seguir está um exemplo do workerMetadata que você pode ver se usar seu próprio IdP do OIDC para criar uma força de trabalho privada:

"workerMetadata": { "identityData": { "identityProviderType": "Oidc", "issuer": "https://example-oidc-ipd.com/adfs", "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" } }

Para saber mais sobre como usar forças de trabalho privadas, consulte Usar uma força de trabalho privada.

Metadados de saída

A saída de cada trabalho contém metadados sobre o rótulo atribuído aos objetos de dados. Esses elementos são os mesmos para todos os trabalhos, com pequenas variações. O exemplo a seguir mostra os elementos de metadados:

"confidence": 0.00, "type": "groundtruth/image-classification", "job-name": "identify-animal-species", "human-annotated": "yes", "creation-date": "2020-10-18T22:18:13.527256"

Os elementos têm o seguinte significado:

  • confidence – a confiança que o Ground Truth tem de que o rótulo está correto. Para ter mais informações, consulte Escore de confiança.

  • type – o tipo de trabalho de classificação. Para tipos de trabalho, consulte Tipos de tarefa integrados.

  • job-name – o nome atribuído ao trabalho quando ele foi criado.

  • human-annotated – indica se o objeto de dados foi rotulado por uma pessoa ou pela rotulagem de dados automatizada. Para ter mais informações, consulte Automatizar a rotulagem de dados.

  • creation-date – a data e hora em que o rótulo foi criado.

Saída do trabalho de classificação

Veja a seguir exemplos de saída (arquivos manifesto de saída) de um trabalho de classificação de imagens e um trabalho de classificação de texto. Eles incluem o rótulo que o Ground Truth atribuiu ao objeto de dados, o valor do rótulo e os metadados que descrevem o rótulo.

Além dos elementos de metadados padrão, os metadados de um trabalho de classificação incluem o valor de texto da classe do rótulo. Para ter mais informações, consulte Classificação de imagens - MXNet.

O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

{ "source-ref":"s3://AWSDOC-EXAMPLE-BUCKET/example_image.jpg", "species":"0", "species-metadata": { "class-name": "dog", "confidence": 0.00, "type": "groundtruth/image-classification", "job-name": "identify-animal-species", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256" } }
{ "source":"The food was delicious", "mood":"1", "mood-metadata": { "class-name": "positive", "confidence": 0.8, "type": "groundtruth/text-classification", "job-name": "label-sentiment", "human-annotated": "yes", "creation-date": "2020-10-18T22:18:13.527256" } }

Saída do trabalho de classificação com vários rótulos

Veja a seguir exemplos de arquivos manifesto de saída de um trabalho de classificação de imagens com vários rótulos e um trabalho de classificação de texto com vários rótulos. Eles incluem os rótulos que o Ground Truth atribuiu ao objeto de dados (por exemplo, a imagem ou a parte do texto) e metadados que descrevem os rótulos que o operador viu ao concluir a tarefa de rotulagem.

O parâmetro de nome de atributo do rótulo (por exemplo, image-label-attribute-name) contém uma matriz de todos os rótulos selecionados por pelo menos um dos operadores que concluíram essa tarefa. Esta matriz contém chaves inteiras (por exemplo, [1,0,8]) que correspondem aos rótulos encontrados em class-map. No exemplo de classificação de imagens com vários rótulos, bicycle, person e clothing foram selecionados por pelo menos um dos operadores que concluíram a tarefa de rotulagem da imagem, exampleimage.jpg.

O confidence-map mostra a pontuação de confiança que o Ground Truth atribuiu a cada rótulo selecionado por um operador. Para saber mais sobre pontuações de confiança do Ground Truth, consulte Escore de confiança.

O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

Veja a seguir um exemplo de um arquivo manifesto de saída de classificação de imagens com vários rótulos.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/example_image.jpg", "image-label-attribute-name":[1,0,8], "image-label-attribute-name-metadata": { "job-name":"labeling-job/image-label-attribute-name", "class-map": { "1":"bicycle","0":"person","8":"clothing" }, "human-annotated":"yes", "creation-date":"2020-02-27T21:36:25.000201", "confidence-map": { "1":0.95,"0":0.77,"8":0.2 }, "type":"groundtruth/image-classification-multilabel" } }

Veja a seguir um exemplo de um arquivo manifesto de saída de classificação de texto com vários rótulos. Neste exemplo, approving, sad e critical foram selecionados por pelo menos um dos operadores que concluíram a tarefa de rotulagem do objeto exampletext.txt encontrado em AWSDOC-EXAMPLE-BUCKET.

{ "source-ref": "AWSDOC-EXAMPLE-BUCKET/exampletext.txt", "text-label-attribute-name":[1,0,4], "text-label-attribute-name-metadata": { "job-name":"labeling-job/text-label-attribute-name", "class-map": { "1":"approving","0":"sad","4":"critical" }, "human-annotated":"yes", "creation-date":"2020-02-20T21:36:25.000201", "confidence-map": { "1":0.95,"0":0.77,"4":0.2 }, "type":"groundtruth/text-classification-multilabel" } }

Saída de trabalho de caixa delimitadora

Veja a seguir uma saída de exemplo (arquivo manifesto de saída) de um trabalho de caixa delimitadora. Para esta tarefa, três caixas delimitadoras são retornadas. O valor do rótulo contém informações sobre o tamanho da imagem e a localização das caixas delimitadoras.

O elemento class_id é o índice de classe da caixa na lista de classes disponíveis para a tarefa. O elemento de metadados class-map contém o texto da classe.

Os metadados têm uma pontuação de confiança separada para cada caixa delimitadora. Os metadados também incluem o elemento class-map que mapeia o class_id para o valor de texto da classe. Para ter mais informações, consulte Detecção de objetos - MXNet.

O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/example_image.png", "bounding-box-attribute-name": { "image_size": [{ "width": 500, "height": 400, "depth":3}], "annotations": [ {"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 30, "height": 30}, {"class_id": 5, "left": 20, "top": 20, "width": 30, "height": 30} ] }, "bounding-box-attribute-name-metadata": { "objects": [ {"confidence": 0.8}, {"confidence": 0.9}, {"confidence": 0.9} ], "class-map": { "0": "dog", "5": "bone" }, "type": "groundtruth/object-detection", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256", "job-name": "identify-dogs-and-toys" } }

A saída de um trabalho de ajuste de caixa delimitadora é semelhante ao JSON a seguir. Observe que o JSON original é mantido intacto e dois novos trabalhos são listados, cada um com o nome do atributo original precedido por "adjust-".

{ "source-ref": "S3 bucket location", "bounding-box-attribute-name": { "image_size": [{ "width": 500, "height": 400, "depth":3}], "annotations": [ {"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 30, "height": 30}, {"class_id": 5, "left": 20, "top": 20, "width": 30, "height": 30} ] }, "bounding-box-attribute-name-metadata": { "objects": [ {"confidence": 0.8}, {"confidence": 0.9}, {"confidence": 0.9} ], "class-map": { "0": "dog", "5": "bone" }, "type": "groundtruth/object-detection", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256", "job-name": "identify-dogs-and-toys" }, "adjusted-bounding-box": { "image_size": [{ "width": 500, "height": 400, "depth":3}], "annotations": [ {"class_id": 0, "left": 110, "top": 135, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 30, "height": 30}, {"class_id": 5, "left": 10, "top": 10, "width": 30, "height": 30} ] }, "adjusted-bounding-box-metadata": { "objects": [ {"confidence": 0.8}, {"confidence": 0.9}, {"confidence": 0.9} ], "class-map": { "0": "dog", "5": "bone" }, "type": "groundtruth/object-detection", "human-annotated": "yes", "creation-date": "2018-11-20T22:18:13.527256", "job-name": "adjust-bounding-boxes-on-dogs-and-toys", "adjustment-status": "adjusted" } }

Nesta saída, o type do trabalho não muda, mas um campo adjustment-status é adicionado. Esse campo tem o valor adjusted ou unadjusted. Se vários operadores revisarem o objeto e pelo menos um ajustar o rótulo, o status será adjusted.

Reconhecimento de entidades nomeadas

Veja a seguir um exemplo de arquivo de manifesto de saída de uma tarefa de rotulagem de reconhecimento de entidade nomeada (NER). Para essa tarefa, sete entities são retornados.

No manifesto de saída, o objeto JSON, annotations, inclui uma lista das (categorias de rótulos) labels que você forneceu.

As respostas dos trabalhadores estão em uma lista chamada entities. Cada entidade nesta lista é um objeto JSON que contém um valor label que corresponde a um na lista labels, um valor inteiro startOffset para o deslocamento Unicode inicial do intervalo rotulado e um valor inteiro endOffset para o deslocamento Unicode final.

Os metadados têm uma pontuação de confiança separada para cada entidade. Se um único trabalhador rotular cada objeto de dados, o valor de confiança de cada entidade será zero.

O texto em vermelho em itálico nos exemplos abaixo depende da rotulagem das entradas do trabalho e das respostas dos trabalhadores.

{ "source": "Amazon SageMaker is a cloud machine-learning platform that was launched in November 2017. SageMaker enables developers to create, train, and deploy machine-learning (ML) models in the cloud. SageMaker also enables developers to deploy ML models on embedded systems and edge-devices", "ner-labeling-job-attribute-name": { "annotations": { "labels": [ { "label": "Date", "shortDisplayName": "dt" }, { "label": "Verb", "shortDisplayName": "vb" }, { "label": "Thing", "shortDisplayName": "tng" }, { "label": "People", "shortDisplayName": "ppl" } ], "entities": [ { "label": "Thing", "startOffset": 22, "endOffset": 53 }, { "label": "Thing", "startOffset": 269, "endOffset": 281 }, { "label": "Verb", "startOffset": 63, "endOffset": 71 }, { "label": "Verb", "startOffset": 228, "endOffset": 234 }, { "label": "Date", "startOffset": 75, "endOffset": 88 }, { "label": "People", "startOffset": 108, "endOffset": 118 }, { "label": "People", "startOffset": 214, "endOffset": 224 } ] } }, "ner-labeling-job-attribute-name-metadata": { "job-name": "labeling-job/example-ner-labeling-job", "type": "groundtruth/text-span", "creation-date": "2020-10-29T00:40:39.398470", "human-annotated": "yes", "entities": [ { "confidence": 0 }, { "confidence": 0 }, { "confidence": 0 }, { "confidence": 0 }, { "confidence": 0 }, { "confidence": 0 }, { "confidence": 0 } ] } }

Saída da tarefa de verificação de rótulo

A saída (arquivo de manifesto de saída) de um trabalho de verificação de caixa delimitadora tem uma aparência diferente da saída de um trabalho de anotação de caixa delimitadora. Isso porque os trabalhadores têm um tipo diferente de tarefa. Eles não estão rotulando objetos, mas avaliando a precisão da rotulagem anterior, fazendo um julgamento e fornecendo esse julgamento e, talvez, alguns comentários.

Se operadores humanos estão verificando ou ajustando rótulos de caixa delimitadora anteriores, a saída de uma tarefa de verificação será semelhante ao JSON a seguir. O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

{ "source-ref":"s3://AWSDOC-EXAMPLE-BUCKET/image_example.png", "bounding-box-attribute-name": { "image_size": [{ "width": 500, "height": 400, "depth":3}], "annotations": [ {"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 30, "height": 30}, {"class_id": 5, "left": 20, "top": 20, "width": 30, "height": 30} ] }, "bounding-box-attribute-name-metadata": { "objects": [ {"confidence": 0.8}, {"confidence": 0.9}, {"confidence": 0.9} ], "class-map": { "0": "dog", "5": "bone" }, "type": "groundtruth/object-detection", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256", "job-name": "identify-dogs-and-toys" }, "verify-bounding-box-attribute-name":"1", "verify-bounding-box-attribute-name-metadata": { "class-name": "bad", "confidence": 0.93, "type": "groundtruth/label-verification", "job-name": "verify-bounding-boxes", "human-annotated": "yes", "creation-date": "2018-11-20T22:18:13.527256", "worker-feedback": [ {"comment": "The bounding box on the bird is too wide on the right side."}, {"comment": "The bird on the upper right is not labeled."} ] } }

Embora o type na saída da caixa delimitadora original tenha sido groundtruth/object-detection, o novo type será groundtruth/label-verification. Observe também que a matriz worker-feedback fornece comentários do operador. Se o operador não fornecer comentários, os campos vazios serão excluídos durante a consolidação.

Saída do trabalho de segmentação semântica

Veja a seguir o arquivo manifesto de saída de um trabalho de rotulagem de segmentação de semântica. O valor do rótulo desse trabalho é uma referência a um arquivo PNG em um bucket do Amazon S3.

Além dos elementos padrão, os metadados do rótulo incluem um mapa de cores que define qual cor é usada para rotular a imagem, o nome da classe associada à cor e o escore de confiança de cada cor. Para ter mais informações, consulte Algoritmo de segmentação semântica.

O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/example_city_image.png", "city-streets-ref": "S3 bucket location", "city-streets-ref-metadata": { "internal-color-map": { "0": { "class-name": "BACKGROUND", "confidence": 0.9, "hex-color": "#ffffff" }, "1": { "class-name": "buildings", "confidence": 0.9, "hex-color": "#2acf59" }, "2": { "class-name": "road", "confidence": 0.9, "hex-color": "#f28333" } }, "type": "groundtruth/semantic-segmentation", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256", "job-name": "label-city-streets", }, "verify-city-streets-ref":"1", "verify-city-streets-ref-metadata": { "class-name": "bad", "confidence": 0.93, "type": "groundtruth/label-verification", "job-name": "verify-city-streets", "human-annotated": "yes", "creation-date": "2018-11-20T22:18:13.527256", "worker-feedback": [ {"comment": "The mask on the leftmost building is assigned the wrong side of the road."}, {"comment": "The curb of the road is not labeled but the instructions say otherwise."} ] } }

A confiança é pontuada por imagem. As pontuações de confiança são as mesmas em todas as classes dentro de uma imagem.

A saída de um trabalho de ajuste de segmentação semântica tem a aparência semelhante ao JSON a seguir.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/example_city_image.png", "city-streets-ref": "S3 bucket location", "city-streets-ref-metadata": { "internal-color-map": { "0": { "class-name": "BACKGROUND", "confidence": 0.9, "hex-color": "#ffffff" }, "1": { "class-name": "buildings", "confidence": 0.9, "hex-color": "#2acf59" }, "2": { "class-name": "road", "confidence": 0.9, "hex-color": "#f28333" } }, "type": "groundtruth/semantic-segmentation", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256", "job-name": "label-city-streets", }, "adjusted-city-streets-ref": "s3://AWSDOC-EXAMPLE-BUCKET/example_city_image.png", "adjusted-city-streets-ref-metadata": { "internal-color-map": { "0": { "class-name": "BACKGROUND", "confidence": 0.9, "hex-color": "#ffffff" }, "1": { "class-name": "buildings", "confidence": 0.9, "hex-color": "#2acf59" }, "2": { "class-name": "road", "confidence": 0.9, "hex-color": "#f28333" } }, "type": "groundtruth/semantic-segmentation", "human-annotated": "yes", "creation-date": "2018-11-20T22:18:13.527256", "job-name": "adjust-label-city-streets", } }

Saída de detecção de objetos de quadro de vídeo

Veja a seguir o arquivo manifesto de saída de um trabalho de rotulagem de detecção de objetos. O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

Além dos elementos padrão, os metadados incluem um classmap que lista cada classe que tem pelo menos um rótulo na sequência. Os metadados também incluem job-name qual é o nome que você atribuiu ao trabalho de rotulagem. Para tarefas de ajuste, se uma ou mais caixas delimitadoras forem modificadas, há um parâmetro adjustment-status nos metadados para fluxos de trabalho de auditoria definido como adjusted.

{ "source-ref": "s3://DOC-EXAMPLE-BUCKET/example-path/input-manifest.json", "CarObjectDetection-ref": "s3://AWSDOC-EXAMPLE-BUCKET/output/labeling-job-name/annotations/consolidated-annotation/output/0/SeqLabel.json", "CarObjectDetection-ref-metadata": { "class-map": { "0": "car", "1": "bus" }, "job-name": "labeling-job/labeling-job-name", "human-annotated": "yes", "creation-date": "2021-09-29T05:50:35.566000", "type": "groundtruth/video-object-detection" } }

Ground Truth cria um arquivo de sequência de saída para cada sequência de quadros de vídeo rotulada. Cada arquivo de sequência de saída contém o seguinte:

  • Todas as anotações para todos os quadros em uma sequência na detection-annotations lista de objetos JSON.

  • Para cada quadro que foi anotado por um trabalhador, o nome do arquivo do quadro (frame), o número (frame-no), uma lista de objetos JSON contendo anotações (annotations) e, se aplicável, frame-attributes. O nome dessa lista é definido pelo tipo de tarefa que você usa: polylines, polygons, keypoints e para caixas delimitadoras, annotations.

    Cada objeto JSON contém informações sobre uma única anotação e um rótulo associado. A tabela a seguir descreve os parâmetros que você verá para cada tipo de tarefa de quadro de vídeo.

    Tipo de tarefa Parâmetros

    Caixa delimitadora

    Dimensões da caixa: height e width

    Localização do pixel na parte superior da caixa e no canto esquerdo: top e left

    Ponto principal

    Vértices de pontos-chave: { "x": int, "y": int }

    Polígono

    Uma lista de vértices poligonais: vertices

    Vértices poligonais: { "x": int, "y": int }

    Um polígono tem uma forma fechada e, portanto, o primeiro ponto também representará o último ponto.

    Linha poligonal

    Uma lista de vértices de linha poligonal: vertices

    Vértices de linha poligonal: { "x": int, "y": int }

    Além dos valores específicos do tipo de tarefa, você verá o seguinte em cada objeto JSON:

    • Valores de qualquer um label-category-attributes que tenha sido especificado para esse rótulo.

    • O class-id da caixa. Use o class-map no arquivo manifesto de saída para ver para qual categoria de rótulo esse ID é mapeado.

A seguir está um exemplo de um SeqLabel.json arquivo de um trabalho de rotulagem de detecção de objetos de quadro de vídeo em caixa delimitadora. Esse arquivo estará localizado em s3://your-output-bucket/output-prefix/annotations/consolidated-annotation/output/annotation-number/

{ "detection-annotations": [ { "annotations": [ { "height": 41, "width": 53, "top": 152, "left": 339, "class-id": "1", "label-category-attributes": { "occluded": "no", "size": "medium" } }, { "height": 24, "width": 37, "top": 148, "left": 183, "class-id": "0", "label-category-attributes": { "occluded": "no", } } ], "frame-no": 0, "frame": "frame_0000.jpeg", "frame-attributes": {name: value, name: value} }, { "annotations": [ { "height": 41, "width": 53, "top": 152, "left": 341, "class-id": "0", "label-category-attributes": {} }, { "height": 24, "width": 37, "top": 141, "left": 177, "class-id": "0", "label-category-attributes": { "occluded": "no", } } ], "frame-no": 1, "frame": "frame_0001.jpeg", "frame-attributes": {name: value, name: value} } ] }

Saída de rastreamento de objetos de quadro de vídeo

Veja a seguir o arquivo manifesto de saída de um trabalho de rotulagem de rastreamento de objetos. O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

Além dos elementos padrão, os metadados incluem um classmap que lista cada classe que tem pelo menos um rótulo na sequência de quadros. Os metadados também incluem job-name qual é o nome que você atribuiu ao trabalho de rotulagem. Para tarefas de ajuste, se uma ou mais caixas delimitadoras forem modificadas, há um parâmetro adjustment-status nos metadados para fluxos de trabalho de auditoria definido como adjusted.

{ "source-ref": "s3://DOC-EXAMPLE-BUCKET/example-path/input-manifest.json", "CarObjectTracking-ref": "s3://AWSDOC-EXAMPLE-BUCKET/output/labeling-job-name/annotations/consolidated-annotation/output/0/SeqLabel.json", "CarObjectTracking-ref-metadata": { "class-map": { "0": "car", "1": "bus" }, "job-name": "labeling-job/labeling-job-name", "human-annotated": "yes", "creation-date": "2021-09-29T05:50:35.566000", "type": "groundtruth/video-object-tracking" } }

Ground Truth cria um arquivo de sequência de saída para cada sequência de quadros de vídeo rotulada. Cada arquivo de sequência de saída contém o seguinte:

  • Todas as anotações para todos os quadros em uma sequência na tracking-annotations lista de objetos JSON.

  • Para cada quadro anotado por um trabalhador, o quadro (frame), o número (frame-no), uma lista de objetos JSON contendo anotações (annotations) e, se aplicável, os atributos de quadro (frame-attributes). O nome dessa lista é definido pelo tipo de tarefa que você usa: polylines, polygons, keypoints e para caixas delimitadoras, annotations.

    Cada objeto JSON contém informações sobre uma única anotação e um rótulo associado. A tabela a seguir descreve os parâmetros que você verá para cada tipo de tarefa de quadro de vídeo.

    Tipo de tarefa Parâmetros

    Caixa delimitadora

    Dimensões da caixa: height e width

    Localização do pixel na parte superior da caixa e no canto esquerdo: top e left

    Ponto principal

    Vértices de pontos-chave: { "x": int, "y": int }

    Polígono

    Uma lista de vértices poligonais: vertices

    Vértices poligonais: { "x": int, "y": int }

    Um polígono tem uma forma fechada e, portanto, o primeiro ponto também representará o último ponto.

    Linha poligonal

    Uma lista de vértices de linha poligonal: vertices

    Vértices de linha poligonal: { "x": int, "y": int }

    Além dos valores específicos do tipo de tarefa, você verá o seguinte em cada objeto JSON:

    • Valores de qualquer um label-category-attributes que tenha sido especificado para esse rótulo.

    • O class-id da caixa. Use o class-map no arquivo manifesto de saída para ver para qual categoria de rótulo esse ID é mapeado.

    • E object-id que identifica uma instância de um rótulo. Esse ID será o mesmo em todos os quadros se um trabalhador identificar a mesma instância de um objeto em vários quadros. Por exemplo, se um carro aparecesse em vários quadros, todas as caixas delimitadoras usadas para identificar esse carro teriam o mesmo object-id.

    • O object-name qual é o ID da instância dessa anotação.

A seguir está um exemplo de um SeqLabel.json arquivo de um trabalho de rotulagem de rastreamento de objetos de quadro de vídeo em caixa delimitadora. Esse arquivo estará localizado em s3://your-output-bucket/output-prefix/annotations/consolidated-annotation/output/annotation-number/

{ "tracking-annotations": [ { "annotations": [ { "height": 36, "width": 46, "top": 178, "left": 315, "class-id": "0", "label-category-attributes": { "occluded": "no" }, "object-id": "480dc450-c0ca-11ea-961f-a9b1c5c97972", "object-name": "car:1" } ], "frame-no": 0, "frame": "frame_0001.jpeg", "frame-attributes": {} }, { "annotations": [ { "height": 30, "width": 47, "top": 163, "left": 344, "class-id": "1", "label-category-attributes": { "occluded": "no", "size": "medium" }, "object-id": "98f2b0b0-c0ca-11ea-961f-a9b1c5c97972", "object-name": "bus:1" }, { "height": 28, "width": 33, "top": 150, "left": 192, "class-id": "0", "label-category-attributes": { "occluded": "partially" }, "object-id": "480dc450-c0ca-11ea-961f-a9b1c5c97972", "object-name": "car:1" } ], "frame-no": 1, "frame": "frame_0002.jpeg", "frame-attributes": {name: value, name: value} } ] }

Segmentação de semântica da nuvem de pontos 3D

Veja a seguir o arquivo manifesto de saída de um trabalho de rotulagem de segmentação de semântica de nuvem de ponto 3D.

Além dos elementos padrão, os metadados do rótulo incluem um mapa de cores que define qual cor é usada para rotular a imagem, o nome da classe associada à cor e o escore de confiança de cada cor. Além disso, há um parâmetro adjustment-status nos metadados para fluxos de trabalho de auditoria definido como adjusted se a máscara de cor foi modificada. Se você adicionou um ou mais frameAttributes ao seu arquivo de configuração da categoria de rótulo, as respostas do trabalhador para os atributos de quadro estarão no objeto JSON, dataset-object-attributes.

O parâmetro your-label-attribute-ref contém o local de um arquivo compactado com uma extensão .zlib. Quando você descompacta esse arquivo, ele contém uma matriz. Cada índice na matriz corresponde ao índice de um ponto anotado na nuvem de pontos de entrada. O valor da matriz em um determinado índice fornece a classe do ponto no mesmo índice na nuvem de pontos, com base no mapa semântico de cores encontrado no parâmetro color-map do metadata.

Você pode usar um código em Python semelhante ao seguinte para descompactar um arquivo .zlib:

import zlib from array import array # read the label file compressed_binary_file = open(zlib_file_path/file.zlib, 'rb').read() # uncompress the label file binary_content = zlib.decompress(compressed_binary_file) # load labels to an array my_int_array_data = array('B', binary_content); print(my_int_array_data)

O bloco de código acima produzirá um resultado semelhante ao seguinte. Cada elemento da matriz impressa contém a classe de um ponto nesse índice na nuvem de pontos. Por exemplo, my_int_array_data[0] = 1 significa que point[0] na nuvem de pontos de entrada tem uma classe1. No exemplo de arquivo manifesto de saída a seguir, a classe 0 corresponde "Background", com 1, com Car, e 2 comPedestrian.

>> array('B', [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

Veja a seguir um exemplo de arquivo de manifesto de saída de saída de tarefa de rotulagem 3D de segmentação semântica. O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/examplefolder/frame1.bin", "source-ref-metadata":{ "format": "binary/xyzi", "unix-timestamp": 1566861644.759115, "ego-vehicle-pose":{...}, "prefix": "s3://AWSDOC-EXAMPLE-BUCKET/lidar_singleframe_dataset/prefix", "images": [{...}] }, "lidar-ss-label-attribute-ref": "s3://your-output-bucket/labeling-job-name/annotations/consolidated-annotation/output/dataset-object-id/filename.zlib", "lidar-ss-label-attribute-ref-metadata": { 'color-map': { "0": { "class-name": "Background", "hex-color": "#ffffff", "confidence": 0.00 }, "1": { "class-name": "Car", "hex-color": "#2ca02c", "confidence": 0.00 }, "2": { "class-name": "Pedestrian", "hex-color": "#1f77b4", "confidence": 0.00 }, "3": { "class-name": "Tree", "hex-color": "#ff7f0e", "confidence": 0.00 } }, 'type': 'groundtruth/point_cloud_single_frame_semantic_segmentation', 'human-annotated': 'yes', 'creation-date': '2019-11-12T01:18:14.271944', 'job-name': 'labeling-job-name', //only present for adjustment audit workflow "adjustment-status": "adjusted", // "adjusted" means the label was adjusted "dataset-object-attributes": {name: value, name: value} } }

Resultado da detecção de objetos de nuvem de pontos 3D

Veja a seguir um exemplo de saída de um trabalho de detecção de objeto de nuvem de pontos 3D. Para esse tipo de tarefa, os dados sobre cuboides 3D são retornados no parâmetro 3d-bounding-box, em uma lista chamada annotations. Nessa lista, cada cuboide 3D é descrito usando as informações a seguir.

  • Cada classe, ou categoria de rótulo, especifica no manifesto de entrada está associada a um arquivo class-id. Use o class-map para identificar a classe associada a cada ID de classe.

  • Essas classes são usadas para dar a cada cuboide 3D um object-name no formato <class>:<integer>, em que integer é um número exclusivo para identificar esse cuboide no quadro.

  • center-x, center-y, e center-z são as coordenadas do centro do cubóide, no mesmo sistema de coordenadas dos dados de entrada da nuvem de pontos 3D usados em seu trabalho de rotulagem.

  • length, width e height são usados para descrever as dimensões do cuboide.

  • yaw é usado para descrever a orientação (cabeçalho) do cuboide em radianos.

    nota

    yaw agora está no sistema cartesiano destro. Como esse recurso foi adicionado em 02 de setembro de 2022 às 19:02:17 UTC, você pode converter a yaw medição nos dados de saída anteriores usando o seguinte (todas as unidades estão em radianos):

    old_yaw_in_output = pi - yaw
  • Em nossa definição, +x está para a direita, +y está para frente e +z está acima do plano terrestre. A ordem de rotação é x - y - z. Os roll, pitch e yaw são representados no sistema cartesiano destro. No espaço 3D, roll está ao longo do eixo x, pitch está ao longo do eixo y e yaw está ao longo do eixo z. Todos os três estão no sentido anti-horário.

  • Se você incluiu atributos de rótulo no arquivo manifesto de entrada para determinada classe, um parâmetro label-category-attributes é incluído para todos os cuboides para os quais os operadores selecionaram atributos de rótulo.

Se um ou mais cuboides foram modificados, há um parâmetro adjustment-status nos metadados para fluxos de trabalho de auditoria que está definido como adjusted. Se você adicionou um ou mais frameAttributes ao seu arquivo de configuração da categoria de rótulo, as respostas do trabalhador para os atributos de quadro estarão no objeto JSON, dataset-object-attributes.

O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída. As elipses (...) denotam uma continuação dessa lista, em que objetos adicionais com o mesmo formato do objeto anterior podem aparecer.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/examplefolder/frame1.txt", "source-ref-metadata":{ "format": "text/xyzi", "unix-timestamp": 1566861644.759115, "prefix": "s3://AWSDOC-EXAMPLE-BUCKET/lidar_singleframe_dataset/prefix", "ego-vehicle-pose": { "heading": { "qx": -0.02111296123795955, "qy": -0.006495469416730261, "qz": -0.008024565904865688, "qw": 0.9997181192298087 }, "position": { "x": -2.7161461413869947, "y": 116.25822288149078, "z": 1.8348751887989483 } }, "images": [ { "fx": 847.7962624528487, "fy": 850.0340893791985, "cx": 576.2129134707038, "cy": 317.2423573573745, "k1": 0, "k2": 0, "k3": 0, "k4": 0, "p1": 0, "p2": 0, "skew": 0, "unix-timestamp": 1566861644.759115, "image-path": "images/frame_0_camera_0.jpg", "position": { "x": -2.2722515189268138, "y": 116.86003310568965, "z": 1.454614668542299 }, "heading": { "qx": 0.7594754093069037, "qy": 0.02181790885672969, "qz": -0.02461725233103356, "qw": -0.6496916273040025 }, "camera_model": "pinhole" } ] }, "3d-bounding-box": { "annotations": [ { "label-category-attributes": { "Occlusion": "Partial", "Type": "Sedan" }, "object-name": "Car:1", "class-id": 0, "center-x": -2.616382013657516, "center-y": 125.04149850484193, "center-z": 0.311272296465834, "length": 2.993000265181146, "width": 1.8355260519692056, "height": 1.3233490884304047, "roll": 0, "pitch": 0, "yaw": 1.6479308313703527 }, { "label-category-attributes": { "Occlusion": "Partial", "Type": "Sedan" }, "object-name": "Car:2", "class-id": 0, "center-x": -5.188984560617168, "center-y": 99.7954483288783, "center-z": 0.2226435567445657, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 1.6243170732068055 } ] }, "3d-bounding-box-metadata": { "objects": [], "class_map": { "0": "Car", }, "type": "groundtruth/point_cloud_object_detection", "human-annotated": "yes", "creation-date": "2018-10-18T22:18:13.527256", "job-name": "identify-3d-objects", "adjustment-status": "adjusted", "dataset-object-attributes": {name: value, name: value} } }

Saídas do rastreamento de objetos de nuvem de pontos 3D

Veja a seguir um exemplo de um arquivo de manifesto de saída de um trabalho de rotulagem de rastreamento de objetos de nuvem de pontos 3D. O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída. As elipses (...) denotam uma continuação dessa lista, em que objetos adicionais com o mesmo formato do objeto anterior podem aparecer.

Além dos elementos padrão, os metadados incluem um classmap que lista cada classe que tem pelo menos um rótulo na sequência. Se um ou mais cuboides foram modificados, há um parâmetro adjustment-status nos metadados para fluxos de trabalho de auditoria que está definido como adjusted.

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/myfolder/seq1.json", "lidar-label-attribute-ref": "s3://<CustomerOutputLocation>/<labelingJobName>/annotations/consolidated-annotation/output/<datasetObjectId>/SeqLabel.json", "lidar-label-attribute-ref-metadata": { "objects": [ { "frame-no": 300, "confidence": [] }, { "frame-no": 301, "confidence": [] }, ... ], 'class-map': {'0': 'Car', '1': 'Person'}, 'type': 'groundtruth/point_cloud_object_tracking', 'human-annotated': 'yes', 'creation-date': '2019-11-12T01:18:14.271944', 'job-name': 'identify-3d-objects', "adjustment-status": "adjusted" } }

No exemplo acima, os dados de cuboides para cada quadro em seq1.json será SeqLabel.json no local do Amazon S3, s3://<customerOutputLocation>/<labelingJobName>/annotations/consolidated-annotation/output/<datasetObjectId>/SeqLabel.json. Veja a seguir um exemplo desse arquivo de sequência de rótulos.

Para cada quadro na sequência, você vê oframe-number, frame-name, se aplicável frame-attributes, e uma lista de annotations. Essa lista contém cuboides 3D que foram desenhados para essa moldura. Cada anotação inclui as seguintes informações:

  • Um object-name no formato <class>:<integer>, em que class identifica a categoria de rótulo e integer é um ID exclusivo no conjunto de dados.

  • Quando os operadores desenham um cuboide, ele é associado a um object-id exclusivo que está associado a todos os cuboides que identificam o mesmo objeto em vários quadros.

  • Cada classe, ou categoria de rótulo, especificada no manifesto de entrada está associada a um arquivo class-id. Use o class-map para identificar a classe associada a cada ID de classe.

  • center-x, center-y, e center-z são as coordenadas do centro do cubóide, no mesmo sistema de coordenadas dos dados de entrada da nuvem de pontos 3D usados em seu trabalho de rotulagem.

  • length, width e height são usados para descrever as dimensões do cuboide.

  • yaw é usado para descrever a orientação (cabeçalho) do cuboide em radianos.

    nota

    yaw agora está no sistema cartesiano destro. Como esse recurso foi adicionado em 02 de setembro de 2022 às 19:02:17 UTC, você pode converter a yaw medição nos dados de saída anteriores usando o seguinte (todas as unidades estão em radianos):

    old_yaw_in_output = pi - yaw
  • Em nossa definição, +x está para a direita, +y está para frente e +z está acima do plano terrestre. A ordem de rotação é x - y - z. Os roll, pitch e yaw são representados no sistema cartesiano destro. No espaço 3D, roll está ao longo do eixo x, pitch está ao longo do eixo y e yaw está ao longo do eixo z. Todos os três estão no sentido anti-horário.

  • Se você incluiu atributos de rótulo no arquivo manifesto de entrada para determinada classe, um parâmetro label-category-attributes é incluído para todos os cuboides para os quais os operadores selecionaram atributos de rótulo.

{ "tracking-annotations": [ { "frame-number": 0, "frame-name": "0.txt.pcd", "frame-attributes": {name: value, name: value}, "annotations": [ { "label-category-attributes": {}, "object-name": "Car:4", "class-id": 0, "center-x": -2.2906369208300674, "center-y": 103.73924823843463, "center-z": 0.37634114027023313, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 1.5827222214406014, "object-id": "ae5dc770-a782-11ea-b57d-67c51a0561a1" }, { "label-category-attributes": { "Occlusion": "Partial", "Type": "Sedan" }, "object-name": "Car:1", "class-id": 0, "center-x": -2.6451293634707413, "center-y": 124.9534455706848, "center-z": 0.5020834081743839, "length": 4, "width": 2, "height": 2.080488827301309, "roll": 0, "pitch": 0, "yaw": -1.5963335581398077, "object-id": "06efb020-a782-11ea-b57d-67c51a0561a1" }, { "label-category-attributes": { "Occlusion": "Partial", "Type": "Sedan" }, "object-name": "Car:2", "class-id": 0, "center-x": -5.205611313118477, "center-y": 99.91731932137061, "center-z": 0.22917217081212138, "length": 3.8747142207671956, "width": 1.9999999999999918, "height": 2, "roll": 0, "pitch": 0, "yaw": 1.5672228760316775, "object-id": "26fad020-a782-11ea-b57d-67c51a0561a1" } ] }, { "frame-number": 1, "frame-name": "1.txt.pcd", "frame-attributes": {}, "annotations": [ { "label-category-attributes": {}, "object-name": "Car:4", "class-id": 0, "center-x": -2.2906369208300674, "center-y": 103.73924823843463, "center-z": 0.37634114027023313, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 1.5827222214406014, "object-id": "ae5dc770-a782-11ea-b57d-67c51a0561a1" }, { "label-category-attributes": { "Occlusion": "Partial", "Type": "Sedan" }, "object-name": "Car:1", "class-id": 0, "center-x": -2.6451293634707413, "center-y": 124.9534455706848, "center-z": 0.5020834081743839, "length": 4, "width": 2, "height": 2.080488827301309, "roll": 0, "pitch": 0, "yaw": -1.5963335581398077, "object-id": "06efb020-a782-11ea-b57d-67c51a0561a1" }, { "label-category-attributes": { "Occlusion": "Partial", "Type": "Sedan" }, "object-name": "Car:2", "class-id": 0, "center-x": -5.221311072916759, "center-y": 100.4639841045424, "center-z": 0.22917217081212138, "length": 3.8747142207671956, "width": 1.9999999999999918, "height": 2, "roll": 0, "pitch": 0, "yaw": 1.5672228760316775, "object-id": "26fad020-a782-11ea-b57d-67c51a0561a1" } ] } ] }

Ponto de rastreamento de objetos 3D-2D Saída de rastreamento de objetos na nuvem

Veja a seguir um exemplo de um arquivo de manifesto de saída de um trabalho de rotulagem de rastreamento de objetos de nuvem de pontos 3D. O texto em vermelho e itálico nos exemplos a seguir depende das especificações do trabalho de rotulagem e dos dados de saída. As elipses (...) denotam uma continuação dessa lista, em que objetos adicionais com o mesmo formato do objeto anterior podem aparecer.

Além dos elementos padrão, os metadados incluem um classmap que lista cada classe que tem pelo menos um rótulo na sequência. Se um ou mais cuboides foram modificados, há um parâmetro adjustment-status nos metadados para fluxos de trabalho de auditoria que está definido como adjusted.

{ "source-ref": "s3://iad-groundtruth-lidar-test-bucket/artifacts/gt-point-cloud-demos/sequences/seq2.json", "source-ref-metadata": { "json-paths": [ "number-of-frames", "prefix", "frames{frame-no, frame}" ] }, "3D2D-linking-ref": "s3://iad-groundtruth-lidar-test-bucket/xyz/3D2D-linking/annotations/consolidated-annotation/output/0/SeqLabel.json", "3D2D-linking-ref-metadata": { "objects": [ { "frame-no": 0, "confidence": [] }, { "frame-no": 1, "confidence": [] }, { "frame-no": 2, "confidence": [] }, { "frame-no": 3, "confidence": [] }, { "frame-no": 4, "confidence": [] }, { "frame-no": 5, "confidence": [] }, { "frame-no": 6, "confidence": [] }, { "frame-no": 7, "confidence": [] }, { "frame-no": 8, "confidence": [] }, { "frame-no": 9, "confidence": [] } ], "class-map": { "0": "Car" }, "type": "groundtruth/point_cloud_object_tracking", "human-annotated": "yes", "creation-date": "2023-01-19T02:55:10.206508", "job-name": "mcm-linking" }, "3D2D-linking-chain-ref": "s3://iad-groundtruth-lidar-test-bucket/xyz/3D2D-linking-chain/annotations/consolidated-annotation/output/0/SeqLabel.json", "3D2D-linking-chain-ref-metadata": { "objects": [ { "frame-no": 0, "confidence": [] }, { "frame-no": 1, "confidence": [] }, { "frame-no": 2, "confidence": [] }, { "frame-no": 3, "confidence": [] }, { "frame-no": 4, "confidence": [] }, { "frame-no": 5, "confidence": [] }, { "frame-no": 6, "confidence": [] }, { "frame-no": 7, "confidence": [] }, { "frame-no": 8, "confidence": [] }, { "frame-no": 9, "confidence": [] } ], "class-map": { "0": "Car" }, "type": "groundtruth/point_cloud_object_tracking", "human-annotated": "yes", "creation-date": "2023-01-19T03:29:49.149935", "job-name": "3d2d-linking-chain" } }

No exemplo acima, os dados de cuboides para cada quadro em seq2.json será SeqLabel.json no local do Amazon S3, s3://<customerOutputLocation>/<labelingJobName>/annotations/consolidated-annotation/output/<datasetObjectId>/SeqLabel.json. Veja a seguir um exemplo desse arquivo de sequência de rótulos.

Para cada quadro na sequência, você vê oframe-number, frame-name, se aplicável frame-attributes, e uma lista de annotations. Essa lista contém cuboides 3D que foram desenhados para essa moldura. Cada anotação inclui as seguintes informações:

  • Um object-name no formato <class>:<integer>, em que class identifica a categoria de rótulo e integer é um ID exclusivo no conjunto de dados.

  • Quando os operadores desenham um cuboide, ele é associado a um object-id exclusivo que está associado a todos os cuboides que identificam o mesmo objeto em vários quadros.

  • Cada classe, ou categoria de rótulo, especificada no manifesto de entrada está associada a um arquivo class-id. Use o class-map para identificar a classe associada a cada ID de classe.

  • center-x, center-y, e center-z são as coordenadas do centro do cubóide, no mesmo sistema de coordenadas dos dados de entrada da nuvem de pontos 3D usados em seu trabalho de rotulagem.

  • length, width e height são usados para descrever as dimensões do cuboide.

  • yaw é usado para descrever a orientação (cabeçalho) do cuboide em radianos.

    nota

    yaw agora está no sistema cartesiano destro. Como esse recurso foi adicionado em 02 de setembro de 2022 às 19:02:17 UTC, você pode converter a yaw medição nos dados de saída anteriores usando o seguinte (todas as unidades estão em radianos):

    old_yaw_in_output = pi - yaw
  • Em nossa definição, +x está para a direita, +y está para frente e +z está acima do plano terrestre. A ordem de rotação é x - y - z. Os roll, pitch e yaw são representados no sistema cartesiano destro. No espaço 3D, roll está ao longo do eixo x, pitch está ao longo do eixo y e yaw está ao longo do eixo z. Todos os três estão no sentido anti-horário.

  • Se você incluiu atributos de rótulo no arquivo manifesto de entrada para determinada classe, um parâmetro label-category-attributes é incluído para todos os cuboides para os quais os operadores selecionaram atributos de rótulo.

{ "lidar": { "tracking-annotations": [ { "frame-number": 0, "frame-name": "0.txt.pcd", "annotations": [ { "label-category-attributes": { "Type": "Sedan" }, "object-name": "Car:1", "class-id": 0, "center-x": 12.172361721602815, "center-y": 120.23067521992364, "center-z": 1.590525771183712, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 0, "object-id": "505b39e0-97a4-11ed-8903-dd5b8b903715" }, { "label-category-attributes": {}, "object-name": "Car:4", "class-id": 0, "center-x": 17.192725195301094, "center-y": 114.55705365827872, "center-z": 1.590525771183712, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 0, "object-id": "1afcb670-97a9-11ed-9a84-ff627d099e16" } ], "frame-attributes": {} }, { "frame-number": 1, "frame-name": "1.txt.pcd", "annotations": [ { "label-category-attributes": { "Type": "Sedan" }, "object-name": "Car:1", "class-id": 0, "center-x": -1.6841480600695489, "center-y": 126.20198882749516, "center-z": 1.590525771183712, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 0, "object-id": "505b39e0-97a4-11ed-8903-dd5b8b903715" }, { "label-category-attributes": {}, "object-name": "Car:4", "class-id": 0, "center-x": 17.192725195301094, "center-y": 114.55705365827872, "center-z": 1.590525771183712, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 0, "object-id": "1afcb670-97a9-11ed-9a84-ff627d099e16" } ], "frame-attributes": {} }, { "frame-number": 2, "frame-name": "2.txt.pcd", "annotations": [ { "label-category-attributes": { "Type": "Sedan" }, "object-name": "Car:1", "class-id": 0, "center-x": -1.6841480600695489, "center-y": 126.20198882749516, "center-z": 1.590525771183712, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 0, "object-id": "505b39e0-97a4-11ed-8903-dd5b8b903715" }, { "label-category-attributes": {}, "object-name": "Car:4", "class-id": 0, "center-x": 17.192725195301094, "center-y": 114.55705365827872, "center-z": 1.590525771183712, "length": 4, "width": 2, "height": 2, "roll": 0, "pitch": 0, "yaw": 0, "object-id": "1afcb670-97a9-11ed-9a84-ff627d099e16" } ], "frame-attributes": {} } ] }, "camera-0": { "tracking-annotations": [ { "frame-no": 0, "frame": "0.txt.pcd", "annotations": [ { "label-category-attributes": { "Occlusion": "Partial" }, "object-name": "Car:2", "class-id": 0, "width": 223, "height": 164, "top": 225, "left": 486, "object-id": "5229df60-97a4-11ed-8903-dd5b8b903715" } ], "frame-attributes": {} }, { "frame-no": 1, "frame": "1.txt.pcd", "annotations": [ { "label-category-attributes": {}, "object-name": "Car:4", "class-id": 0, "width": 252, "height": 246, "top": 237, "left": 473, "object-id": "1afcb670-97a9-11ed-9a84-ff627d099e16" } ], "frame-attributes": {} } ] } }

O cubóide e a caixa delimitadora de um objeto são vinculados por meio de um ID de objeto comum.