输出数据 - Amazon SageMaker
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

输出数据

标记作业的输出将置于您在控制台中或对 CreateLabelingJob 操作的调用中指定的位置。

输出数据文件的每一行都与清单文件完全相同,此外添加了分配给输入对象的标记的属性和值。该值的属性名称在控制台中或在对 CreateLabelingJob 操作的调用中定义。您不能在标签属性名称中使用 -metadata。如果您运行图像语义分割、3D 点云语义分割或 3D 点云对象跟踪作业,则标签属性必须以 -ref 结尾。对于任何其他类型的作业,属性名称不能以 -ref 结尾。

标记作业的输出是标签键值对的值。标签和值将用新值覆盖输入文件中任何现有的 JSON 数据。

例如,以下是来自图像分类标记作业的输出,其中输入数据文件存储在 中Amazon S3AWSDOC-EXAMPLE-BUCKET,并且标签属性名称定义为 运动。 在此示例中,JSON 对象的格式设置为便于阅读,在实际输出文件中,JSON 对象位于单行上。有关数据格式的更多信息,请参阅 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" } }

标签的值可以是任意有效的 JSON。在这种情况下,标签的值是分类表中此类的索引。其他作业类型(如边界框)具有更复杂的值。

输入清单文件中除标签属性之外的任何密钥值对在输出文件中都保持不变。您可以使用此功能将数据传递到您的应用程序。

一个标记作业的输出可以用作另一个标记作业的输入。在将标记作业连接在一起时,您可以使用此功能。例如,您可以发送一个标记作业以确定正在开展的运动。然后,您可以发送另一个使用相同数据的作业,以确定此运动是室内还是室外的。通过将第一个作业的输出数据作为第二个作业的清单,您可以将两个作业的结果整合为一个输出文件,以便应用程序可以更轻松地进行处理。

当作业正在进行时,输出数据文件将定期地写入到输出位置。这些中间文件对于清单文件中的每一行都包含一行。如果标记了一个对象,则会包含标签。如果未标记该对象,则将其写入到中间输出文件中,写入方式与清单文件完全相同。

输出目录

Ground Truth 在您的 Amazon S3 输出路径中创建几个目录。这些目录包含标记作业的结果和该作业的其他项目。标记作业的顶级目录具有与标记作业相同的名称;输出目录位于其下方。例如,如果您将标记作业命名为 find-people,则输出将在以下目录中:

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

每个目录包含以下输出:

Active Learning 目录

activelearning 目录仅在您使用自动数据标记时才出现。它包含为自动数据标记设置的输入和输出验证以及自动标记数据的输入和输出文件夹。

Annotations 目录

annotations 目录包含人力所做的所有注释。这些是来自各个工作人员的响应,这些响应尚未整合到数据对象的单个标签中。

annotations 目录中有三个子目录。

  • 第一个子目录是 worker-response,它包含来自各个工作人员的响应。这包含用于每次迭代的一个子目录,其中反过来又包含该迭代中每个数据对象的一个子目录。每个数据对象的注释存储在带有时间戳的 JSON 文件中,其中包含单个工作人员所做的注释;如果您使用私有人力,则为有关该工作人员的元数据。要了解有关此元数据的更多信息,请参阅工作线程元数据

    此目录为每个标记对象的工作程序包含一个带编号的子目录 (prefix)。例如,如果三个工作人员标记了一个对象,您将看到目录 1、2 和 3。在该目录中,您将看到

  • 第二个子目录是 consolidated-annotation,它包含将当前批次中的注释合并到数据对象标签所需的信息。

  • 第三个子目录是 intermediate,其中包含当前批次的输出清单以及任何已完成的标签。当完成每个数据对象的标签时,该文件会更新。

Inference 目录

inference 目录仅在您使用自动数据标记时才出现。此目录包含在标记数据对象时,SageMaker 批量转换使用的输入和输出文件。

Manifest 目录

manifest 目录包含来自标记作业的输出清单。清单目录 output 中有一个子目录。output 目录包含标记作业的输出清单文件。此文件命名为 output.manifest

Training 目录

training 目录仅在您使用自动数据标记时才出现。此目录包含用于训练自动数据标记模型的输入和输出文件。

置信度得分

当您有多个工作人员对单个任务进行注释时,您的标签将通过注释整合得到。 Ground Truth 会计算每个标签的置信度得分。置信度得分是一个介于 0 与 1 之间的数字,用于表示 Ground Truth 在标签中的可信度。您可以使用置信度得分相互比较已标记的数据对象,并确定最不可信和最可信的标签。

您不应将置信度得分的值解释为绝对值,也不应跨标记作业比较置信度得分。例如,如果所有置信度得分都在 0.98 和 0.998 之间,您只应在数据对象之间进行比较,而不应依赖于这些高的置信度得分。

您不能将人工标记的数据对象和自动标记的数据对象的置信度得分进行比较。人工的置信度得分是使用任务的注释整合函数计算的,而自动标记的置信度得分是使用包含对象特征的模型计算的。两个模型通常具有不同的规模和平均置信度。

对于边界框标记作业,Ground Truth 对每个框计算置信度得分。对于相同的标记类型(人工或自动),您可以在一个图像中或跨图像比较置信度得分。您不能跨标记作业比较置信度得分。

如果单个工作人员对任务进行注释NumberOfHumanWorkersPerDataObject(在 控制台中设置为 1 或 ,则为 Number of workers per dataset object (每个数据集对象的工作线程数) 输入 1),置信度得分将设置为 0.00

工作线程元数据

Ground Truth 提供可用于跟踪任务输出数据中各个工作人员的信息。以下数据位于 中的 下的目录中worker-responseAnnotations 目录

  • acceptanceTime 是工作人员接受任务的时间。此日期和时间戳的格式YYYY-MM-DDTHH:MM:SS.mmmZ为年 (YYYY)、月 (MM)、日 (DD)、小时 (HH)、分钟 (MM)、秒 (SS) 和毫秒 (mmm)。日期和时间由 T 分隔。

  • submissionTime 是工作人员使用 Submit (提交) 按钮提交注释的时间。此日期和时间戳的格式YYYY-MM-DDTHH:MM:SS.mmmZ为年 (YYYY)、月 (MM)、日 (DD)、小时 (HH)、分钟 (MM)、秒 (SS) 和毫秒 (mmm)。日期和时间由 T 分隔。

  • timeSpentInSeconds 报告工作人员主动处理该任务的总时间(以秒为单位)。此指标不包括工作人员暂停或休息的时间。

  • workerId 对于每个工作人员都是唯一的。

  • 如果您使用私有人力,请在 中workerMetadata看到以下内容。

    • identityProviderType 是用于管理私有人力的服务。

    • issuer 是与分配给此人工审核任务的工作团队关联的 Cognito 用户池或 OIDC 身份提供商 (IdP) 发布者。

    • sub 唯一标识符是指工作程序。如果您使用 创建人力Amazon Cognito,则可以使用 使用此 ID 检索有关此工作线程的详细信息 (如名称或用户名Amazon Cognito)。要了解如何操作,请参阅在 中管理和搜索用户账户Amazon Cognito 开发者指南

以下是您使用 创建Amazon Cognito私有人力时可能看到的输出示例。这在 中确定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" } }

以下是workerMetadata您可能会看到的 示例,如果您使用自己的 OIDC IdP 创建私有人力:

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

要了解有关使用私有人力的更多信息,请参阅使用私有人力

输出元数据

每个作业的输出包含有关分配给数据对象的标签的元数据。对于所有具有微小差异的作业,这些元素都是一样的。以下示例显示了元数据元素:

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

元素有以下含义:

  • confidence – Ground Truth 认为标签正确的可信度。有关更多信息,请参阅置信度得分

  • type – 分类作业的类型。有关作业类型,请参阅内置任务类型

  • job-name – 作业创建时所分配的名称。

  • human-annotated – 数据对象是由人工标记的,还是由自动数据标记标记的。有关更多信息,请参阅自动数据标记

  • creation-date – 创建标签的日期和时间。

分类作业输出

以下是一个图像分类作业和一个文本分类作业的示例输出(输出清单文件)。它们包括 Ground Truth 分配给数据对象的标签、标签的值以及描述标签的元数据。

除了标准元数据元素外,分类作业的元数据还包括标签的类的文本值。有关更多信息,请参阅图像分类算法

以下示例中的红色斜体文本 取决于标记作业规范和输出数据。

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

多标签分类作业输出

以下是多标签图像分类作业和多标签文本分类作业的示例输出清单文件。它们包括 Ground Truth 分配给数据对象的标签(例如,图像或文本片段)以及描述工作人员在完成标记任务时看到的标签的元数据。

标签属性名称参数(例如,image-label-attribute-name)包含由至少一个完成此任务的工作人员选择的所有标签的数组。此数组包含与 [1,0,8] 中找到的标签对应的整数键(例如 class-map)。在多标签图像分类示例中,至少一个完成图像标记任务的工作人员已为图像 bicycle 选择 personclothingexampleimage.jpg

显示 confidence-map Ground Truth 分配给工作人员选择的每个标签的置信度得分。要了解有关 Ground Truth 置信度分数的更多信息,请参阅置信度得分

以下示例中的红色斜体文本 取决于标记作业规范和输出数据。

以下是多标签图像分类输出清单文件的示例。

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

以下是多标签文本分类输出清单文件的示例。在该示例中,approvingsadcritical 是由完成位于 exampletext.txt 中的 AWSDOC-EXAMPLE-BUCKET 对象的标记任务的至少一个工作人员选择的。

{ "source-ref": "AWSDOC-EXAMPLE-BUCKET/text_file.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" } }

边界框作业输出

以下是边界框作业中的示例输出(输出清单文件)。对于此任务,返回三个边界框。标签值包含有关图像大小和边界框位置的信息。

class_id 元素是框的类在该任务的可用类列表中的索引。class-map 元数据元素包含类的文本。

对于每个边界框,元数据有一个单独的置信度得分。元数据还包含 class-map 元素,该元素将 class_id 映射到类的文本值。有关更多信息,请参阅对象检测算法

以下示例中的红色斜体文本 取决于标记作业规范和输出数据。

{ "source-ref": "s3://AWSDOC-EXAMPLE-BUCKET/example_image.png", "bounding-box": { "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-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" } }

边界框调整作业的输出如以下 JSON 所示。请注意,原始 JSON 保持不变并列出了两个新作业,每个作业都在原始属性名称前加上“adjust-”。

{ "source-ref": "S3 bucket location", "bounding-box": { "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-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" } }

在此输出中,作业的 type 不会更改,但会添加一个 adjustment-status 字段。此字段的值为 adjustedunadjusted。如果多个工作人员已查看了对象,并且至少有一个工作人员调整了标签,则状态为 adjusted

命名实体识别

以下是来自命名实体识别 (NER) 标记任务的示例输出清单文件。对于此任务,将返回 7 entities 个 。

在输出清单中,JSON 对象 annotations包含您提供的labels(标签类别)的列表。

工作线程响应位于名为 的列表中entities。此列表中的每个实体都是一个 JSON 对象,其中包含一个与label列表中一个值匹配的labels值、一个整数startOffset值,该值用于标记范围的起始 Unicode 偏移,以及一个整数endOffset值,用于结束 Unicode 偏移。

元数据对于每个实体都有一个单独的置信度得分。如果单个工作线程标记了每个数据对象,则每个实体的置信度值为零。

以下示例中的红色斜体文本取决于标记作业输入和工作人员响应。

{ "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", "example-ner-labeling-job": { "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 } ] } }, "example-ner-labeling-job-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 } ] } }

标签验证作业输出

边界框验证作业的输出(输出清单文件)看起来不同于边界框注释作业的输出。这是因为工作人员有不同类型的任务。他们并不标记对象,而是评估先前标记的准确性,做出判断,然后提供判断结果,或许还有一些评论。

如果工作人员正在验证或调整先前的边界框标签,则验证作业的输出将类似于以下 JSON。以下示例中的红色斜体文本 取决于标记作业规范和输出数据。

{ "source-ref":"s3://AWSDOC-EXAMPLE-BUCKET/image_example.png", "bounding-box": { "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-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":"1", "verify-bounding-box-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."} ] } }

虽然原始边界框输出上的 typegroundtruth/object-detection,但新的 typegroundtruth/label-verification。另请注意,worker-feedback 数组提供工作人员注释。如果工作人员不提供注释,则合并期间将排除空字段。

语义分割作业输出

以下是语义分割标记作业中的输出清单文件。此作业的标签值是对 Amazon S3 存储桶中 PNG 文件的引用。

除了标准元素之外,标签的元数据还包括一个颜色映射,该映射定义了用于标记图像的颜色、与颜色关联的类名以及每种颜色的置信度得分。有关更多信息,请参阅语义分割算法

以下示例中的红色斜体文本 取决于标记作业规范和输出数据。

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

置信度是按每个图像评分的。一个图像中所有分类的置信度得分都将相同。

语义分割调整作业的输出类似于以下 JSON。

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

视频帧对象检测输出

以下是来自视频帧对象检测标记作业的输出清单文件。这些区域有:red, italicized text 以下示例中的 取决于标记作业规范和输出数据。

除了标准元素之外,元数据还包括一个类映射,其中列出了序列中至少有一个标签的每个类。元数据还包括您分配给标记作业job-name的名称。对于调整任务,如果修改了一个或多个边界框,则审核工作流程的元数据中有一个 adjustment-status 参数,设置为 adjusted

{ "source-ref": "s3:///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": "2020-05-15T08:01:16+0000", "type": "groundtruth/video-object-detection" } }

Ground Truth 为标记的每个视频帧序列创建一个输出序列文件。每个输出序列文件都包含以下内容:

  • JSON 对象detection-annotations列表中序列中所有帧的所有注释。

  • 对于已由工作人员注释的每个帧,帧文件名 (frame)、数字 (frame-no)、包含注释的 JSON 对象的列表 (annotations) 以及 (如果适用frame-attributes)。此列表的名称由您用于边界框的任务类型 定义polylines:、polygonskeypointsannotations

    每个 JSON 对象都包含有关单个注释和关联标签的信息。下表概述了每种视频帧任务类型将看到的参数。

    任务类型 参数

    Bounding Box

    箱体尺寸: heightwidth

    箱顶、左角像素位置: topleft

    关键点

    关键点顶点: { "x": int, "y": int }

    多边形

    多边形顶点的列表: vertices

    多边形顶点: { "x": int, "y": int }

    多边形是闭合的形状,因此第一个点也将代表最后一个点。

    多边形

    多线顶点的列表: vertices

    多边形顶点: { "x": int, "y": int }

    除了任务类型特定的值之外,您将在每个 JSON 对象中看到以下内容:

    • 为该标签label-category-attributes指定的任何 的值。

    • class-id的 。使用输出清单文件中class-map的 查看此 ID 映射到哪个标签类别。

以下是边界框视频帧对象检测标记作业中的SeqLabel.json文件示例。此文件将位于 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} } ] }

视频帧对象跟踪输出

以下是来自视频帧对象跟踪标记作业的输出清单文件。这些区域有:red, italicized text 以下示例中的 取决于标记作业规范和输出数据。

除了标准元素之外,元数据还包含一个类映射,其中列出在帧序列中至少有一个标签的每个类。元数据还包括您分配给标记作业job-name的名称。对于调整任务,如果修改了一个或多个边界框,则审核工作流程的元数据中有一个 adjustment-status 参数,设置为 adjusted

{ "source-ref": "s3:///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": "2020-05-15T08:01:16+0000", "type": "groundtruth/video-object-tracking" } }

Ground Truth 为标记的每个视频帧序列创建一个输出序列文件。每个输出序列文件都包含以下内容:

  • JSON 对象tracking-annotations列表中序列中所有帧的所有注释。

  • 对于已由工作人员注释的每个帧,为帧 (frame)、数字 (frame-no)、包含注释的 JSON 对象的列表 (annotations) 以及帧属性 (frame-attributes)(如果适用)。此列表的名称由您用于边界框的任务类型 定义polylines:、polygonskeypointsannotations

    每个 JSON 对象都包含有关单个注释和关联标签的信息。下表概述了每种视频帧任务类型将看到的参数。

    任务类型 参数

    Bounding Box

    箱体尺寸: heightwidth

    箱顶、左角像素位置: topleft

    关键点

    关键点顶点: { "x": int, "y": int }

    多边形

    多边形顶点的列表: vertices

    多边形顶点: { "x": int, "y": int }

    多边形是闭合的形状,因此第一个点也将代表最后一个点。

    多边形

    多线顶点的列表: vertices

    多边形顶点: { "x": int, "y": int }

    除了任务类型特定的值之外,您将在每个 JSON 对象中看到以下内容:

    • 为该标签label-category-attributes指定的任何 的值。

    • class-id的 。使用输出清单文件中class-map的 查看此 ID 映射到哪个标签类别。

    • object-id 标识标签实例的 。如果工作人员在多个帧中标识了同一对象实例,则该 ID 将跨帧相同。例如,如果汽车出现在多个帧中,则所有边界框都使用 来标识汽车将具有相同的 object-id

    • 该注释object-name的实例 ID。

以下是边界框视频帧对象跟踪标记作业中的SeqLabel.json文件示例。此文件将位于 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} } ] }

3D点云语义分割输出

以下是3D 点云语义分割标记作业的输出清单文件。

除了标准元素之外,标签的元数据还包括一个颜色映射,该映射定义了用于标记图像的颜色、与颜色关联的类名以及每种颜色的置信度得分。此外,审核工作流的元数据中有一个 adjustment-status 参数adjusted,如果修改了颜色掩码,则设置为 。如果您frameAttributes向标签类别配置文件添加了一个或多个 ,则帧属性的工作线程响应位于 JSON 对象 中dataset-object-attributes

your-label-attribute-ref 参数包含具有 .zlib 扩展名的压缩文件的位置。当您解压缩此文件时,它包含一个数组。数组中的每个索引对应于输入点云中注释点的索引。给定索引处数组的值根据在 的 color-map 参数中找到的语义颜色映射,为点云中相同索引处的点提供类metadata

您可以使用类似于以下内容的 Python 代码解压缩 .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)

上面的代码块将生成类似于以下内容的输出。打印的数组的每个元素都包含点云中该索引处的点的类。例如, my_int_array_data[0] = 1 表示输入点云point[0]中的 具有类 1。在以下输出清单文件示例中, 类0对应于 "Background"1 Car2 Pedestrian

>> 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])

以下是语义分割 3D 点云标记作业输出清单文件的示例。以下示例中的红色斜体文本 取决于标记作业规范和输出数据。

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

3D点云对象检测输出

以下是 3D 点云对象检测作业的示例输出。对于该任务类型,有关 3D 长方体的数据是在名为 3d-bounding-box 的列表上的 annotations 参数中返回的。在该列表中,每个 3D 长方体是使用以下信息描述的。

  • 您在输入清单中指定的每个类或标签类别与 关联class-id。可以使用 class-map 标识与每个类 ID 关联的类。

  • 这些类用于为每个 3D 长方体提供一个采用 object-name 格式的 <class>:<integer>,其中 integer 是用于在帧中标识该长方体的唯一数字。

  • center-x center-y、 和 center-z 是长方体中心的坐标,采用与标记作业中使用的 3D 点云输入数据相同的坐标系。

  • length width、 和 height 描述长方体的维度。

  • yaw 用于以弧度描述长方体的方向 (方位)。

    输出数据中的yaw测量值为 180 度,或以弧度为单位的 pi,向下看长方体时,其度量yaw值减去右侧手世界坐标系中的 pi。换句话说,当从上向下看长方体时, yaw_in_output_data 是顺时针正的 (与右手世界坐标系相反,其中从上向下看的视图与逆时针正旋转关联)。从长方体查找时, yaw_in_output_data 为逆时针正方向。

    要转换为右侧世界坐标系的yaw_in_output_data更常见方向,请使用以下 (所有单位都用弧度表示):

    yaw_right_handed_cartesian_system = pi - yaw_in_output_data
  • 如果您创建了 3D 点云调整标记作业,并在输入清单文件中包含 pitchroll ,则相同的 pitchroll 测量值将显示在输出清单文件中。否则, pitchrole 将始终为 0。

  • 如果您在输入清单文件中包含给定类的标签属性,则对于工作人员已选择标签属性的所有长方体都包含一个label-category-attributes参数。

在审核工作流的元数据中具有 adjustment-status 参数;如果修改了一个或多个长方体,该参数将设置为 adjusted。如果您frameAttributes向标签类别配置文件添加了一个或多个 ,则帧属性的工作线程响应位于 JSON 对象 中dataset-object-attributes

这些区域有:red, italicized text 以下示例中的 取决于标记作业规范和输出数据。省略号 (...) 表示该列表的延续,其中可能会显示与继续对象具有相同格式的其他对象。

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

3D点云对象跟踪输出

以下是3D 点云对象跟踪标记作业的输出清单文件示例。这些区域有:red, italicized text 以下示例中的 取决于标记作业规范和输出数据。省略号 (...) 表示该列表的延续,其中可能会显示与继续对象具有相同格式的其他对象。

除了标准元素之外,元数据还包括一个类映射,其中列出了序列中至少有一个标签的每个类。在审核工作流的元数据中具有 adjustment-status 参数;如果修改了一个或多个长方体,该参数将设置为 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" } }

在上面的示例中, 中每个帧的长方体数据seq1.json位于 SeqLabel.json 位置 Amazon S3 中的 s3://<customerOutputLocation>/<labelingJobName>/annotations/consolidated-annotation/output/<datasetObjectId>/SeqLabel.json。以下是此标签序列文件的示例。

对于序列中的每个帧,您会看到 frame-number、 (如果适用frame-name)、 frame-attributes和 列表annotations。此列表包含为该帧绘制的 3D 长方体。每个注释都包含以下信息:

  • 采用 object-name 格式的 <class>:<integer> ,其中 class 标识标签类别, integer 是数据集中的唯一 ID。

  • 在工作人员绘制长方体时,它与唯一的 object-id 相关联,后者与在多个帧中标识同一对象的所有长方体相关联。

  • 您在输入清单中指定的每个类或标签类别与 class-id 关联。可以使用 class-map 标识与每个类 ID 关联的类。

  • center-x center-y、 和 center-z 是长方体中心的坐标,采用与标记作业中使用的 3D 点云输入数据相同的坐标系。

  • length width、 和 height 描述长方体的尺寸。

  • yaw 用于以弧度描述长方体的方向 (方位)。

    输出数据中的yaw测量值为 180 度,或以弧度为单位的 pi,向下看长方体时yaw,按照右侧世界坐标系计算。换句话说,当从上向下看长方体时, yaw_in_output_data 是顺时针正的 (与右手世界坐标系相反,其中从上向下看的视图与逆时针正旋转相关联)。从长方体查找时, yaw_in_output_data 为逆时针正方向。

    要转换为右侧世界坐标系的yaw_in_output_data更常见方向,请使用以下 (所有单位都用弧度表示):

    yaw_right_handed_cartesian_system = pi - yaw_in_output_data
  • 如果您创建了 3D 点云调整标记作业,并在输入清单文件中包含 pitchroll ,则相同的 pitchroll 测量值将显示在输出清单文件中。否则, pitchrole 将始终为 0。

  • 如果您在输入清单文件中包含给定类的标签属性,则对于工作人员选择了标签属性的所有长方体,将包含一个 label-category-attributes 参数。

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