

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

# 标注作业输出数据
<a name="sms-data-output"></a>

标签任务的输出将放置在您在控制台或[CreateLabelingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateLabelingJob.html)操作调用中指定的 Amazon S3 位置。当工作人员提交一个或多个任务或任务过期时，输出数据将显示在此位置。请注意，在工作人员提交任务或任务过期后，输出数据可能需要几分钟时间才能显示在 Amazon S3 中。

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

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

例如，以下是一个图像分类标注作业的输出，其中输入数据文件存储在 Amazon S3 `{{amzn-s3-demo-bucket}}` 中，并且标签属性名称定义为 {{`sport`}}。在此示例中，JSON 对象设置为便于阅读的格式；在实际输出文件中，JSON 对象位于单行上。有关数据格式的更多信息，请参阅 [JSON 行](http://jsonlines.org/)。

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

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

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

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

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

## 输出目录
<a name="sms-output-directories"></a>

Ground Truth 在您的 Amazon S3 输出路径中创建几个目录。这些目录包含标注作业的结果和该作业的其他构件。标注作业顶层目录的名称与标注作业名称相同，而输出目录放在此目录之下。例如，如果您将标注作业命名为 **find-people**，那么输出将在以下目录中：

```
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
```

每个目录包含以下输出：

### 主动学习目录
<a name="sms-output-activelearning"></a>

`activelearning` 目录仅在您使用自动数据标注时才出现。该目录包含用于自动数据标注的输入和输出验证集，以及用于自动标注数据的输入和输出文件夹。

### 注释目录
<a name="sms-directories-annotations"></a>

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

`annotations` 目录中有三个子目录。
+ 第一个子目录是 `worker-response`，其中包含来自各个工作人员的响应。这包含用于每次迭代的一个子目录，其中反过来又包含该迭代中每个数据对象的一个子目录。每个数据对象的工作人员响应数据存储在带时间戳的 JSON 文件中，该文件包含每个工作人员为该数据对象提交的答案，如果您使用私有人力，则包含有关这些工作人员的元数据。要了解有关此元数据的更多信息，请参阅[工作人员元数据](#sms-worker-id-private)。
+ 第二个子目录是 `consolidated-annotation`，其中包含将当前批次中的注释合并到数据对象标签所需的信息。
+ 第三个子目录是 `intermediate`，其中包含当前批次的输出清单以及任何已完成的标签。当完成每个数据对象的标签时，该文件会更新。

**注意**  
我们建议您不要使用文档中未提到的文件。

### 推理目录
<a name="sms-directories-inference"></a>

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

### 清单目录
<a name="sms-directories-manifest"></a>

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

### 训练目录
<a name="sms-directories-training"></a>

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

## 置信度分数
<a name="sms-output-confidence"></a>

如果多个工作人员对单个任务进行注释，则您的标签来自于注释合并。Ground Truth 计算每个标签的置信度得分。*置信度得分*是一个介于 0 与 1 之间的数字，用于表示 Ground Truth 在标签中的可信度。您可以使用置信度得分相互比较已标注的数据对象，并确定最不可信和最可信的标签。

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

您不能将人工标注的数据对象和自动标注的数据对象的置信度得分进行比较。人工标注的置信度得分是使用针对相应任务的注释合并函数计算得出的，而自动标注的置信度得分是使用一个纳入对象功能的模型计算得出的。两个模型通常具有不同的规模和平均置信度。

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

如果单个工作人员对任务进行注释（将 `NumberOfHumanWorkersPerDataObject` 设置为 `1`，或在控制台中为**每个数据集对象的工作人员数**输入 1），则置信度得分将设置为 `0.00`。

## 工作人员元数据
<a name="sms-worker-id-private"></a>

Ground Truth 提供的信息可用于跟踪任务输出数据中的个别工作人员。以下数据位于 [注释目录](#sms-directories-annotations) 中的 `worker-response` 下的目录中：
+ `acceptanceTime` 是工作人员接受任务的时间。此日期和时间戳的格式为 `YYYY-MM-DDTHH:MM:SS.mmmZ`，表示年 (`YYYY`)、月 (`MM`)、日 (`DD`)、时 (`HH`)、分 (`MM`)、秒 (`SS`) 和毫秒 (`mmm`)。日期和时间由 **T** 分隔。
+ `submissionTime` 是工作人员使用**提交**按钮来提交其注释的时间。此日期和时间戳的格式为 `YYYY-MM-DDTHH:MM:SS.mmmZ`，表示年 (`YYYY`)、月 (`MM`)、日 (`DD`)、时 (`HH`)、分 (`MM`)、秒 (`SS`) 和毫秒 (`mmm`)。日期和时间由 **T** 分隔。
+ `timeSpentInSeconds` 报告工作人员积极处理该任务的总时间，以秒为单位。此指标不包括工作人员暂停或休息的时间。
+ `workerId` 对于每个工作人员都是唯一的。
+ 如果您使用[私有人力](https://docs.aws.amazon.com/sagemaker/latest/dg/sms-workforce-private.html)，在 `workerMetadata` 中您会看到以下内容。
  + `identityProviderType` 是用于管理私有人力的服务。
  + `issuer` 是 Cognito 用户池或 OIDC 身份提供者 (IdP) 发布者，与分配到此人工审核任务的工作团队相关联。
  + 通过唯一 `sub` 标识符来指代工作人员。如果使用 Amazon Cognito 创建人力，则可以使用 Amazon Cognito 中的此 ID 检索此工作人员的详细信息（如姓名或用户名）。要了解如何操作，请参阅[《Amazon Cognito 开发人员指南》](https://docs.aws.amazon.com/cognito/latest/developerguide/)中的[管理和搜索用户账户](https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-manage-user-accounts.html#manage-user-accounts-searching-user-attributes)。

在您使用 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"
    }
}
```

 下面是您使用自己的 OIDC IdP 创建私有人力时可能看到的 `workerMetadata` 示例：

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

要了解有关使用私有人力的更多信息，请参阅[私有人力](sms-workforce-private.md)。

## 输出元数据
<a name="sms-output-metadata"></a>

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

```
    "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 认为标签正确的可信度。有关更多信息，请参阅 [置信度分数](#sms-output-confidence)。
+ `type` – 分类作业的类型。有关作业类型，请参阅[Built-in 任务类型](sms-task-types.md)。
+ `job-name` – 作业创建时所分配的名称。
+ `human-annotated` – 表示数据对象是由人工标注的，还是由自动数据标注所标注的。有关更多信息，请参阅 [自动数据标注](sms-automated-labeling.md)。
+ `creation-date` – 创建标签的日期和时间。

## 分类作业输出
<a name="sms-output-class"></a>

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

除了标准元数据元素外，分类作业的元数据还包括标签的类的文本值。有关更多信息，请参阅 [图像分类 – MXNet](image-classification.md)。

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

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

## Multi-label 分类作业输出
<a name="sms-output-multi-label-classification"></a>

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

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

`confidence-map` 显示 Ground Truth 分配给由工作人员选择的每个标签的置信度得分。要了解有关 Ground Truth 置信度得分的更多信息，请参阅[置信度分数](#sms-output-confidence)。

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

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

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

以下是多标签文本分类输出清单文件的示例。在此示例中，`approving`、`sad` 和 `critical` 是由完成位于 `{{amzn-s3-demo-bucket}}` 中的 `exampletext.txt` 对象标注任务的至少一个工作人员选择的。

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

## 边界框作业输出
<a name="sms-output-box"></a>

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

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

对于每个边界框，元数据有一个单独的置信度得分。元数据还包含 `class-map` 元素，该元素将 `class_id` 映射到类的文本值。有关更多信息，请参阅 [对象检测 – MXNet](object-detection.md)。

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

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

边界框调整作业的输出如以下 JSON 所示。请注意，原始 JSON 保持不变并列出了两个新作业，每个作业都在原始属性名称前加上“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}}"
    }
}
```

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

## 命名实体识别
<a name="sms-output-data-ner"></a>

以下是命名实体识别 (NER) 标注任务的输出清单文件示例。对于此任务，返回七个 `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}}",
    "{{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}}
            }
        ]
    }
}
```

## 标签验证作业输出
<a name="sms-output-bounding-box-verification"></a>

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

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

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

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

## 语义分割作业输出
<a name="sms-output-segmentation"></a>

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

除了标准元素之外，标签的元数据还包括一个颜色映射，旨在定义用于标注图像的颜色、与该颜色关联的类名称以及每种颜色的置信度得分。有关更多信息，请参阅 [语义分割算法](semantic-segmentation.md)。

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

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

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

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

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

## 视频帧对象检测输出
<a name="sms-output-video-object-detection"></a>

以下是视频帧对象检测标注作业的输出清单文件。以下示例{{red, italicized text}}中的取决于标签作业规格和输出数据。

除了标准元素以外，元数据还包含一个类映射，该映射列出每个在序列中至少具有一个标签的类。元数据还包括 `job-name`，这是您分配给标注作业的名称。对于调整任务，如果修改了一个或多个边界框，则审核工作流的元数据中有一个 `adjustment-status` 参数设置为 `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 为标注的每个视频帧序列创建一个输出序列文件。每个输出序列文件包含以下内容：
+ JSON 对象 `detection-annotations` 列表中序列中所有帧的所有注释。
+ 对于由工作人员进行注释的每个帧，包含帧文件名 (`frame`)、编号 (`frame-no`)、包含注释 (`annotations`) 的 JSON 对象列表，以及 `frame-attributes`（如适用）。此列表的名称由您使用的任务类型 `polylines`、`polygons`、`keypoints` 和 `annotations`（对于边界框）定义。

   

  每个 JSON 对象都包含有关单个注释和关联标签的信息。下表概述了每种视频帧任务类型的参数。  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/sms-data-output.html)

  除了任务类型特定值外，您还会在每个 JSON 对象中看到以下内容：
  + 为该标签指定的任何 `label-category-attributes` 值。
  + 边界框的 `class-id`。使用输出清单文件中的 `class-map` 查看此 ID 映射到的标签类别。

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

## 视频帧对象跟踪输出
<a name="sms-output-video-object-tracking"></a>

以下是视频帧对象跟踪标注作业的输出清单文件。以下示例{{red, italicized text}}中的取决于标签作业规格和输出数据。

除了标准元素以外，元数据还包含一个类映射，该映射列出每个在帧序列中至少具有一个标签的类。元数据还包括 `job-name`，这是您分配给标注作业的名称。对于调整任务，如果修改了一个或多个边界框，则审核工作流的元数据中有一个 `adjustment-status` 参数设置为 `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 为标注的每个视频帧序列创建一个输出序列文件。每个输出序列文件包含以下内容：
+ JSON 对象 `tracking-annotations` 列表中序列中所有帧的所有注释。
+ 对于由工作人员进行注释的每个帧，包含帧 (`frame`)、编号 (`frame-no`)、包含注释 (`annotations`) 的 JSON 对象列表，以及帧属性 (`frame-attributes`)（如适用）。此列表的名称由您使用的任务类型 `polylines`、`polygons`、`keypoints` 和 `annotations`（对于边界框）定义。

  每个 JSON 对象都包含有关单个注释和关联标签的信息。下表概述了每种视频帧任务类型的参数。  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/sagemaker/latest/dg/sms-data-output.html)

  除了任务类型特定值外，您还会在每个 JSON 对象中看到以下内容：
  + 为该标签指定的任何 `label-category-attributes` 值。
  + 边界框的 `class-id`。使用输出清单文件中的 `class-map` 查看此 ID 映射到的标签类别。
  + 用于标识标签实例的 `object-id`。如果一个工作人员在多个帧中识别了同一个对象实例，那么此 ID 在各帧中将是相同的。例如，如果一辆汽车出现在多个帧中，那么所有用于识别这辆汽车的边界框都将具有相同的 `object-id`。
  + 作为该注释的实例 ID 的 `object-name`。

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

## 3D 点云语义分割输出
<a name="sms-output-point-cloud-segmentation"></a>

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

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

`{{your-label-attribute}}-ref` 参数包含具有 .zlib 扩展名的压缩文件的位置。解压缩此文件时，文件中包含一个数组。数组中的每个索引对应于输入点云中注释点的索引。给定索引处的数组值根据 `metadata` 的 `color-map` 参数中找到的语义颜色图，给出点云中同一索引处的点的类。

您可以使用类似下面的 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` 对应于 `Car`，`2` 对应于 `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://{{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}}}
    }
}
```

## 3D 点云对象检测输出
<a name="sms-output-point-cloud-object-detection"></a>

以下是 3D 点云对象检测作业的示例输出。对于该任务类型，有关 3D 长方体的数据是在名为 `annotations` 的列表上的 `3d-bounding-box` 参数中返回的。在该列表中，每个 3D 长方体是使用以下信息描述的。
+ 您在输入清单中指定的每个类或标签类别与 `class-id` 关联。可以使用 `class-map` 标识与每个类 ID 关联的类。
+ 这些类用于为每个 3D 长方体提供一个采用 `<class>:<integer>` 格式的 `object-name`，其中 `integer` 是用于在帧中标识该长方体的唯一数字。
+ `center-x`、`center-y` 和 `center-z` 是长方体中心的坐标，与标注作业中使用的 3D 点云输入数据在同一坐标系中。
+ `length`、`width` 和 `height` 用于描述长方体的尺寸。
+ `yaw` 用于描述以弧度为单位的长方体的方向（方位）。
**注意**  
`yaw` 现在是在右手笛卡尔坐标系中。由于此功能是在 UTC 时间 2022 年 9 月 2 日 19:02:17 添加的，因此您可以在此之前使用以下方法转换输出数据中的 `yaw` 测量值（所有单位均以弧度为单位）：  

  ```
  old_yaw_in_output = pi - yaw
  ```
+ 在我们的定义中，\+x 是向右，\+y 是向前，而 \+z 则是从地平面向上。旋转顺序为 x - y - z。`roll`、`pitch` 和 `yaw` 在右手笛卡尔坐标系中表示。在 3D 空间中，`roll` 是沿 x 轴，`pitch` 是沿 y 轴，`yaw` 是沿 z 轴。这三个都是逆时针方向的。
+ 如果在输入清单文件中包含给定类的标签属性，则工作人员选择了标签属性的所有长方体都会包含一个 `label-category-attributes` 参数。

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

以下示例{{red, italicized text}}中的取决于标签作业规格和输出数据。省略号 ({{...}}) 表示该列表的延续，其中可以出现与正在处理的对象具有相同格式的其他对象。

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

## 3D 点云对象跟踪输出
<a name="sms-output-point-cloud-object-tracking"></a>

以下是 3D 点云对象跟踪标注作业的输出清单文件的示例。以下示例{{red, italicized text}}中的取决于标签作业规格和输出数据。省略号 ({{...}}) 表示该列表的延续，其中可以出现与正在处理的对象具有相同格式的其他对象。

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

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

对于序列中的每一帧，您都会看到 `frame-number`、`frame-name`、`frame-attributes`（如适用）和 `annotations` 的列表。此列表包含为该帧绘制的 3D 长方体。每个注释包括以下信息：
+ 采用 `<class>:<integer>` 格式的 `object-name`，其中 `class` 标识标签类别，`integer` 是数据集中的唯一 ID。
+ 在工作人员绘制长方体时，它与唯一的 `object-id` 相关联，后者与在多个帧中标识同一对象的所有长方体相关联。
+ 您在输入清单中指定的每个类或标签类别与 `class-id` 关联。可以使用 `class-map` 标识与每个类 ID 关联的类。
+ `center-x`、`center-y` 和 `center-z` 是长方体中心的坐标，与标注作业中使用的 3D 点云输入数据在同一坐标系中。
+ `length`、`width` 和 `height` 用于描述长方体的尺寸。
+ `yaw` 用于描述以弧度为单位的长方体的方向（方位）。
**注意**  
`yaw` 现在是在右手笛卡尔坐标系中。由于此功能是在 UTC 时间 2022 年 9 月 2 日 19:02:17 添加的，因此您可以在此之前使用以下方法转换输出数据中的 `yaw` 测量值（所有单位均以弧度为单位）：  

  ```
  old_yaw_in_output = pi - yaw
  ```
+ 在我们的定义中，\+x 是向右，\+y 是向前，而 \+z 则是从地平面向上。旋转顺序为 x - y - z。`roll`、`pitch` 和 `yaw` 在右手笛卡尔坐标系中表示。在 3D 空间中，`roll` 是沿 x 轴，`pitch` 是沿 y 轴，`yaw` 是沿 z 轴。这三个都是逆时针方向的。
+ 如果在输入清单文件中包含给定类的标签属性，则工作人员选择了标签属性的所有长方体都会包含一个 `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}}"
                }
            ]
        }       
    ]
}
```

## 3 D-2D 物体追踪点云物体追踪输出
<a name="sms-output-3d-2d-point-cloud-object-tracking"></a>

以下是 3D 点云对象跟踪标注作业的输出清单文件的示例。以下示例{{red, italicized text}}中的取决于标签作业规格和输出数据。省略号 ({{...}}) 表示该列表的延续，其中可以出现与正在处理的对象具有相同格式的其他对象。

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

在上面的示例中，`seq2.json` 中的每个帧的长方体数据位于 Amazon S3 位置 `s3://{{amzn-s3-demo-bucket}}/{{<labelingJobName>}}/annotations/consolidated-annotation/output/{{<datasetObjectId>}}/SeqLabel.json` 的 `SeqLabel.json` 中。以下是该标签序列文件的示例。

对于序列中的每一帧，您都会看到 `frame-number`、`frame-name`、`frame-attributes`（如适用）和 `annotations` 的列表。此列表包含为该帧绘制的 3D 长方体。每个注释包括以下信息：
+ 采用 `<class>:<integer>` 格式的 `object-name`，其中 `class` 标识标签类别，`integer` 是数据集中的唯一 ID。
+ 在工作人员绘制长方体时，它与唯一的 `object-id` 相关联，后者与在多个帧中标识同一对象的所有长方体相关联。
+ 您在输入清单中指定的每个类或标签类别与 `class-id` 关联。可以使用 `class-map` 标识与每个类 ID 关联的类。
+ `center-x`、`center-y` 和 `center-z` 是长方体中心的坐标，与标注作业中使用的 3D 点云输入数据在同一坐标系中。
+ `length`、`width` 和 `height` 用于描述长方体的尺寸。
+ `yaw` 用于描述以弧度为单位的长方体的方向（方位）。
**注意**  
`yaw` 现在是在右手笛卡尔坐标系中。由于此功能是在 UTC 时间 2022 年 9 月 2 日 19:02:17 添加的，因此您可以在此之前使用以下方法转换输出数据中的 `yaw` 测量值（所有单位均以弧度为单位）：  

  ```
  old_yaw_in_output = pi - yaw
  ```
+ 在我们的定义中，\+x 是向右，\+y 是向前，而 \+z 则是从地平面向上。旋转顺序为 x - y - z。`roll`、`pitch` 和 `yaw` 在右手笛卡尔坐标系中表示。在 3D 空间中，`roll` 是沿 x 轴，`pitch` 是沿 y 轴，`yaw` 是沿 z 轴。这三个都是逆时针方向的。
+ 如果在输入清单文件中包含给定类的标签属性，则工作人员选择了标签属性的所有长方体都会包含一个 `label-category-attributes` 参数。

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

一个对象的长方体和边界框通过一个共同的对象 ID 链接。