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á.
Rotulando dados de saída do trabalho
A saída de um trabalho de etiquetagem é colocada no local do Amazon S3 que você especificou no console ou na chamada para a CreateLabelingJoboperação. Os dados de saída aparecem nesse local quando os operadores 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 operador 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 semântica de imagem, de segmentação 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
do Amazon S3 e o nome de atributo do rótulo foi definido como amzn-s3-demo-bucket
. 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 JSONsport
{ "source-ref": "s3://
amzn-s3-demo-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 à sua aplicação.
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 suas aplicações.
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://
amzn-s3-demo-bucket
/find-people/activelearning s3://amzn-s3-demo-bucket
/find-people/annotations s3://amzn-s3-demo-bucket
/find-people/inference s3://amzn-s3-demo-bucket
/find-people/manifests s3://amzn-s3-demo-bucket
/find-people/training
Cada diretório contém a seguinte saída:
Diretório de aprendizado ativo
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 de anotação
O diretório annotations
contém todas as anotações feitas pela força de trabalho. Estas são as respostas de operadores 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 operador 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 operador para esse objeto de dados e, se você usa uma força de trabalho privada, metadados sobre esses operadores. 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 de inferência
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 da transformação em lote do SageMaker AI usada ao rotular objetos de dados.
Diretório do manifesto
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 de treinamento
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.
Pontuação 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 atributos 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 operadores 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 operadores 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 de anotação:
-
A
acceptanceTime
é a hora em que o operador 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 operador 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 operador 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 operador (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 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 seguinte exemplo 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 obter mais informações, consulte Pontuação 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 obter mais informações, consulte Automatize 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 obter 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://
amzn-s3-demo-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 multirrótulo
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 Pontuação 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://
amzn-s3-demo-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
.amzn-s3-demo-bucket
{ "source-ref": "s3://
amzn-s3-demo-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 do 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 obter 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://
amzn-s3-demo-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 operadores 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 operador 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 operadores.
{ "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 do trabalho 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 operadores 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://
amzn-s3-demo-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 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 obter 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://
amzn-s3-demo-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://
amzn-s3-demo-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://amzn-s3-demo-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 quadros de vídeo
Veja a seguir o arquivo manifesto de saída de um trabalho de rotulagem de detecção de objetos. Os red, italicized text
exemplos abaixo dependem das especificações do trabalho de etiquetagem 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://
amzn-s3-demo-bucket
/example-path
/input-manifest.json
", "CarObjectDetection
-ref": "s3://amzn-s3-demo-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 operador, 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
ewidth
Localização do pixel na parte superior da caixa e no canto esquerdo:
top
eleft
Ponto principal
Vértices de pontos-chave: { "x": int, "y": int }
Polígono
Uma lista de vértices poligonais:
Vértices poligonais:vertices
{ "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:
Vértices de linha poligonal:vertices
{ "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 oclass-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://
amzn-s3-demo-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 quadros de vídeo
Veja a seguir o arquivo manifesto de saída de um trabalho de rotulagem de rastreamento de objetos. Os red, italicized text
exemplos abaixo dependem das especificações do trabalho de etiquetagem 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://
amzn-s3-demo-bucket
/example-path
/input-manifest.json
", "CarObjectTracking
-ref": "s3://amzn-s3-demo-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 operador, 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
ewidth
Localização do pixel na parte superior da caixa e no canto esquerdo:
top
eleft
Ponto principal
Vértices de pontos-chave: { "x": int, "y": int }
Polígono
Uma lista de vértices poligonais:
Vértices poligonais:vertices
{ "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:
Vértices de linha poligonal:vertices
{ "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 oclass-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 operador 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 mesmoobject-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://
amzn-s3-demo-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
} } ] }
Saída de segmentação semântica da nuvem de pontos 3D
Veja a seguir o arquivo manifesto de saída de um trabalho de rotulagem de segmentação 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 operador para os atributos de quadro estarão no objeto JSON, dataset-object-attributes
.
O parâmetro
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 your-label-attribute
-refcolor-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://
amzn-s3-demo-bucket
/examplefolder
/frame1.bin
", "source-ref-metadata":{ "format": "binary/xyzi
", "unix-timestamp":1566861644.759115
, "ego-vehicle-pose":{...
}, "prefix": "s3://amzn-s3-demo-bucket
/lidar_singleframe_dataset
/prefix
", "images": [{...
}] }, "lidar-ss-label-attribute
-ref": "s3://amzn-s3-demo-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
} } }
Saída de detecção de objetos da 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 oclass-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 queinteger
é um número exclusivo para identificar esse cuboide no quadro. -
center-x
,center-y
ecenter-z
são as coordenadas do centro do cuboide, no mesmo sistema de coordenadas dos dados de entrada da nuvem de pontos 3D usados em seu trabalho de rotulagem. -
length
,width
eheight
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 atributo foi adicionado em 02 de setembro de 2022 às 19:02:17 UTC, você pode converter ayaw
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
eyaw
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 eyaw
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 operador para os atributos de quadro estarão no objeto JSON, dataset-object-attributes
.
Os red, italicized text
exemplos abaixo dependem das especificações do trabalho de etiquetagem e dos dados de saída. As elipses (...
) denotam uma continuação dessa lista, na qual objetos adicionais com o mesmo formato do objeto anterior podem aparecer.
{ "source-ref": "s3://
amzn-s3-demo-bucket
/examplefolder/frame1.txt
", "source-ref-metadata":{ "format": "text/xyzi
", "unix-timestamp":1566861644.759115
, "prefix": "s3://amzn-s3-demo-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ída de rastreamento de objetos da 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. Os red, italicized text
exemplos abaixo dependem das especificações do trabalho de etiquetagem e dos dados de saída. As elipses (...
) denotam uma continuação dessa lista, na qual 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://
amzn-s3-demo-bucket
/myfolder/seq1.json
", "lidar-label-attribute
-ref": "s3://amzn-s3-demo-bucket
/<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://
. Veja a seguir um exemplo desse arquivo de sequência de rótulos.amzn-s3-demo-bucket
/<labelingJobName>
/annotations/consolidated-annotation/output/<datasetObjectId>
/SeqLabel.json
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 queclass
identifica a categoria de rótulo einteger
é 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 oclass-map
para identificar a classe associada a cada ID de classe. -
center-x
,center-y
ecenter-z
são as coordenadas do centro do cuboide, no mesmo sistema de coordenadas dos dados de entrada da nuvem de pontos 3D usados em seu trabalho de rotulagem. -
length
,width
eheight
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 atributo foi adicionado em 02 de setembro de 2022 às 19:02:17 UTC, você pode converter ayaw
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
eyaw
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 eyaw
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
" } ] } ] }
Saída de rastreamento de objetos 3D-2D e rastreamento de objetos da nuvem de pontos
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. Os red, italicized text
exemplos abaixo dependem das especificações do trabalho de etiquetagem e dos dados de saída. As elipses (...
) denotam uma continuação dessa lista, na qual 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://
amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-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://
. Veja a seguir um exemplo desse arquivo de sequência de rótulos.amzn-s3-demo-bucket
/<labelingJobName>
/annotations/consolidated-annotation/output/<datasetObjectId>
/SeqLabel.json
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 queclass
identifica a categoria de rótulo einteger
é 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 oclass-map
para identificar a classe associada a cada ID de classe. -
center-x
,center-y
ecenter-z
são as coordenadas do centro do cuboide, no mesmo sistema de coordenadas dos dados de entrada da nuvem de pontos 3D usados em seu trabalho de rotulagem. -
length
,width
eheight
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 atributo foi adicionado em 02 de setembro de 2022 às 19:02:17 UTC, você pode converter ayaw
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
eyaw
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 eyaw
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 cuboide e a caixa delimitadora de um objeto são vinculados por meio de um ID de objeto comum.