标记用于机器学习的训练数据

Amazon SageMaker Ground Truth
ML
Olawale Olaleye
亚马逊云科技使用经验
初级
完成所需时间
30 分钟
前提条件

注册 / 登录 亚马逊云科技账户

所需费用

请根据 SageMaker 定价预估本实验所需资源费用。

上次更新时间
2023 年 3 月 27 日

概述

在本教程中,您将学习如何在 Amazon SageMaker Ground Truth 中设置标记作业,为机器学习 (ML) 模型的训练数据添加注释。

标记数据集对于监管机器学习模型训练至关重要。许多组织都拥有庞大的数据集,但其中却没有与数据相关的标签。使用 Amazon SageMaker Ground Truth,您就可以选择通过 Amazon Mechanical Turk、第三方供应商或您的工作人员人工添加注释,轻松标记数据。 

在本教程实验中,我们将使用 SageMaker Ground Truth 来标记飞机、汽车、渡轮、直升机和摩托车等交通工具图像。由于本教程使用的是非敏感数据集,因此我们使用 Amazon Mechanical Turk 添加注释。

学习目标

在本指南中,您将:

  • 创建和配置数据标记作业
  • 检查标记作业结果

前提条件

开始本指南之前,您需要先满足以下条件:

  • 拥有 AWS 账户:如果您还没有 AWS 账户,请先创建和配置账户。更多信息,请参阅设置 AWS 环境。 

操作步骤

步骤 1:设置 Amazon SageMaker Studio 域

您可以使用 Amazon SageMaker 控制台以可视化方式部署一个模型,也可以使用 SageMaker Studio 或 SageMaker 笔记本通过编程方式部署模型。在本教程实验中,我们将使用 SageMaker Studio 笔记本 (notebook) 以编程方式部署模型。使用这种方式,首先需要一个 SageMaker Studio 域。

如果您已经在一个美国东部(弗吉尼亚州北部)区域创建了一个 SageMaker Studio 域,请按照 SageMaker Studio 设置指南将所需的 AWS IAM 策略附加到您的 SageMaker Studio 账户,然后跳过步骤 1,直接进行步骤 2。

如果没有现有的 SageMaker Studio 域,请继续执行步骤 1,运行 AWS CloudFormation 模板,创建 SageMaker Studio 域,并添加本教程后续步骤所需的权限。

1.1  点击 AWS CloudFormation 堆栈,进入 AWS CloudFormation 控制台,然后创建 SageMaker Studio 域和一个名为 studio-user 的用户。您还需要为您的 SageMaker Studio 账户添加所需的权限。在 CloudFormation 控制台上,确认右上角显示的 Region(区域)是 US East (N. Virginia)(美国东部(弗吉尼亚州北部))。Stack name(堆栈名称)应为 CFN-SM-IM-Lambda-Catalog。请勿更改堆栈名称。勾选 I acknowledge that AWS CloudFormation might create IAM resources with custom names(我了解 AWS CloudFormation 可能会使用自定义名称创建 IAM 资源),然后点击 Create stack(创建堆栈)。系统需要 10 分钟左右来创建此堆栈的所有资源。

此堆栈假定您已在账户中设置了公共 VPC。如果没有公共 VPC,请参阅使用单个公有子网的 VPC 了解如何创建公共 VPC。

步骤 2:配置 SageMaker Studio 笔记本

在此步骤中,我们将启动一个新的 SageMaker Studio 笔记本、安装必要的开源库,并设置与其他服务(如 Amazon Simple Storage Service 即 Amazon S3)交互所需的 SageMaker 变量。

2.1  在控制台搜索栏中输入 SageMaker Studio,然后点击 SageMaker Studio。

2.2  从 SageMaker 控制台右上角的 Region(区域)下拉菜单中选择 US East (N. Virginia)(美国东部(弗吉尼亚州北部))。启动 Studio 应用程序,请点击左侧导航窗格的 Studio,选择 studio-user 作为用户,然后击 Open Studio(打开 Studio)按钮。

2.3 SageMaker Studio 中显示正在创建应用程序。加载应用程序需要几分钟时间。

2.4  打开 SageMaker Studio 用户界面。在顶部菜单中,选择 File(文件) > New(新建) > Notebook(笔记本)。

2.5 Set up notebook environment(设置笔记本环境)对话框中,从 Image(镜像)下拉列表中选择 Data Science。系统自动选择了 Python 3 内核。在 Instance type(实例类型)下,选择 ml.t3.medium。点击 Select(选择)。

2.6  笔记本页面右上角的内核现在应显示为 Python 3 (Data Science)。

步骤 3:创建标记作业

本教程要标记的示例图像取自公开可用的 Caltech 101 数据集 (Li, F.-F., Andreeto, M., Ranzato, M. A., & Perona, P. (2022).Caltech 101 (Version 1.0) [Data set].CaltechDATA),其中包含 101 个对象类别的图片。为了尽量减少本教程实验所需费用,我们使用 10 张示例图像,从飞机、汽车、渡轮、直升机和摩托车类别中各取两张图像。为更大数据集启动标记作业的步骤与本教程所示步骤相同。这 10 张示例图像已存储在 Amazon S3 存储桶 sagemaker-sample-files 中。

3.1  在此步骤中,您将使用 SageMaker Studio 笔记本编写 Python 代码,将 sagemaker-sample-files S3 存储桶中的示例图像上传至您的默认 S3 存储桶。默认存储桶名称为 sagemaker-<区域>-<您的 AWS 账户 ID>。

3.2  复制以下代码,然后将其粘贴到 Jupyter 笔记本中的一个新的代码单元格中,然后运行此单元格。此操作将确保您使用的 SageMaker 是最新版本。

注意您必须为堆栈添加必要的权限和存储桶。

有关更多信息,请访问:https://repost.aws/knowledge-center/sagemaker-s3-accessdenied-training。

3.3  复制以下代码,然后将其粘贴到 Jupyter 笔记本中的一个新的代码单元格中,然后运行此单元格。

import sagemaker

sess = sagemaker.Session()
bucket = sess.default_bucket()

!aws s3 sync s3://sagemaker-sample-files/datasets/image/caltech-101/inference/ s3://{bucket}/ground-truth-demo/images/

print('Copy and paste the below link into a web browser to confirm the ten images were successfully uploaded to your bucket:')
print(f'https://s3.console.aws.amazon.com/s3/buckets/{bucket}/ground-truth-demo/images/')

print('\nWhen prompted by Sagemaker to enter the S3 location for input datasets, you can paste in the below S3 URL')

print(f's3://{bucket}/ground-truth-demo/images/')

print('\nWhen prompted by Sagemaker to Specify a new location, you can paste in the below S3 URL')

print(f's3://{bucket}/ground-truth-demo/labeled-data/')

3.4  成功运行代码后,打开 Amazon S3 控制台,并导航至 sagemaker-<区域>-<您的 AWS 账户 ID>/ground-truth-demo/images,确认这十张图像已上传。

3.5  打开 SageMaker 控制台。在左侧导航窗格中,依次选择 Ground Truth > Labeling jobs(标记作业)。然后,点击 Create labeling job(创建标记作业)。

3.6  在 Specify job details(指定作业详情)页面的 Job overview(作业概览)下,将 vehicle-labeling-demo 输入到 Job name(作业名称)输入框中。在 Input data setup(输入数据配置)下,选择 Automated data setup(自动数据配置)。

您可以在 SageMaker Ground Truth 控制台中使用存储在 Amazon S3 中的图像、视频、视频帧、文本 (.txt) 文件和逗号分隔值 (.csv) 文件,并通过自动数据配置为标记作业创建清单文件。使用自动数据配置时,要指定存储输入数据的 Amazon S3 位置以及输入数据类型,SageMaker Ground Truth 会在您指定的位置中查找与此类型匹配的文件。

3.7  在 Data setup(数据配置)部分中:在 S3 location for input datasets(输入数据集的 S3 位置)下,点击 Browse S3(浏览 S3),然后选择 s3://sagemaker-<区域>-<您的 AWS 账户 ID>/ground-truth-demo/images/。(此位置是您在之前的步骤中上传图像的位置。) 

S3 location for output datasets,(输出数据集的 S3 位置)下,选择 Specify a new location(指定新位置)。然后,指定标记后图像的存储路径:s3://sagemaker-<区域>-<您的 AWS 账户 ID>/ground-truth-demo/labeled-data/。 

Data type(数据类型)下,选择 Image(图像)。在 IAM Role(IAM 角色)下,选择 Create a new role(新建角色),或者输入之前在 Jupyter 笔记本中运行的 print 语句后的返回值。

3.8  在 Create an IAM role(创建 IAM 角色)弹出窗口中,选择 Any S3 bucket(任意 S3 存储桶),然后点击 Create(创建)。

3.9  SageMaker Ground Truth 自动创建 IAM 角色,然后将生成的角色名称填充到 IAM Role(IAM 角色)下的输入框中。点击 Complete data setup(完成数据配置)。屏幕上显示 Input data connection successful(输入数据连接成功)的确认消息。

3.10  在 Task type(任务类型)区域中,在 Task category(任务类别)下,选择 Image(图像)。在 Task selection(任务选择)下,选择 Image Classification (Single Label)(图像分类(单个标签)),然后点击 Next(下一步)。

3.11  在 Select workers and configure tool (选择工作人员并配置工具)页面上,对于 Worker types(工作人员类型),选择 Amazon Mechanical Turk。

勾选 The dataset does not contain adult content(数据集不包含成人内容)。

勾选 You understand and agree that the Amazon Mechanical Turk workforce consists of independent contractors located worldwide and that you should not share confidential information, personal information or protected health information with this workforce.(您了解并同意 Amazon Mechanical Turk 服务人员由分布在全球的独立承包商组成,而且您不得将机密信息、个人信息或受保护的健康信息分享给相关工作人员。)

3.12  在 Image classification (Single Label) labeling tool(图像分类(单个标签)标记工具)区域中,配置以下信息:

brief description of task(任务简述)字段,输入 Please select the label that best matches the image below.You can choose only 1 label per image.(请选择与以下图像最匹配的标签。每张图像仅能选择 1 个标签。)

Select an option(选择一个选项)下,添加以下标签:Airplane、Car、Ferry、Helicopter、Motorbike。

展开 Additional instructions(其他说明),并添加以下文本到步骤 3:If there are multiple vehicles in a single image, choose the most prominent vehicle in the image.(如果在一张图像中有多个交通工具,请选择此图像中最显眼的交通工具。)

如需查看标记者视图下的标记工具,请选择 Preview(预览)。

点击 Create(创建)。

3.13  新建的 vehicle-labeling-demo 标记作业会显示在 SageMaker 控制台的 Labeling jobs(标记作业)页面上的列表中。此作业的 Status(状态)显示为 In progress(进行中),Task type(任务类型)为 Image Classification (Single Label)(图像分类(单个标签))。标记作业需要大约几分钟时间才能完成。在 Amazon Mechanical Turk 公共工作人员标记数据后,此作业的 Status(状态)会更改为 Complete(完成)。

步骤 4:检查标记作业结果

检查标记作业结果是很重要的步骤,能帮助您评估标记质量并确定是否需要改进说明和数据。

4.1  在 SageMaker 控制台的左侧导航窗格中,选择 Labeling jobs(标记作业),然后选择 vehicle-labeling-demo

4.2  在 vehicle-labeling-demo 详细信息页面上,Labeled dataset objects(已标记数据集对象)区域会显示数据集中图像的缩略图,以及对应的题注标签。

4.3  要获取标记作业的完整结果,请点击在 Labeling job summary(标记作业摘要)区域中 Output dataset location(输出数据集位置)下的链接。

4.4  依次选择 manifests(清单) > output(输出) > output.manifest

点击 Open(打开)可下载 JSON Lines 格式的标记结果。JSON Lines 是一种以换行符分隔的格式,用于存储结构化数据,其中每一行都是有效的 JSON 值。

4.5  output.manifest 文件中包括以下数据: 

source-ref:指定图像条目在输入清单文件中的位置。因为在步骤 2 选择了 Automated data setup(自动数据配置),所以 Amazon SageMaker Ground Truth 自动创建了这些条目和输入清单文件。

vehicle-labeling-demo:将目标标签指定为从 0 开始的数值。对此示例中的五个图像类别的标签分别为 0、1、2、3、4。

vehicle-labeling-demo-metadata:指定标记元数据,如置信度分数、作业名称、标签字符串名称(例如 airplane、car、ferry、helicopter 和 motorbike),以及人工或机器注释(主动学习)。 

您可以解析 output.manifest 文件,从而为下游应用程序创建图像分类等已标记数据集。如需进一步学习如何在 Amazon SageMaker 中使用 output.manifest 文件来训练模型,请阅读博文《使用由 SageMaker Ground Truth 标记的数据集轻松训练模型》

步骤 5:清理 AWS 资源

对于不再使用的资源,最好的做法是及时删除,以免产生不必要的费用。

5.1  执行以下步骤删除 S3 存储桶: 

  • 打开 Amazon S3 控制台。在左侧导航窗格中,选择 Buckets(存储桶),选择名称为 sagemaker-<区域>-<您的账户 ID>的存储桶,然后勾选 ground-truth-demo 旁边的复选框。点击 Delete(删除)。 
  • Delete objects(删除对象)对话框中,确认您选择的删除对象正确无误,并在 Permanently delete objects(永久删除对象)确认框中输入 permanently delete(永久删除)。
  • 完成该操作后存储桶将为空,此时您可以按照相同的步骤删除 sagemaker-<区域>-<您的账户 ID> 存储桶。

5.2  若您不停止内核或执行以下步骤来删除应用程序,本实验中用于运行笔记本镜像的 Data Science 内核将继续产生费用。有关更多信息,请参阅 Amazon SageMaker 开发者指南中的关闭资源

执行以下步骤删除 SageMaker Studio 应用程序:在 SageMaker 控制台上,选择 Domains(域),然后选择 StudioDomain。从 User profiles(用户配置文件)列表中选择 studio-user,然后点击 Delete app(删除应用程序),删除 Apps(应用程序)下列出的所有应用程序。删除 JupyterServer:点击 Action(操作),然后选择 Delete(删除)。请耐心等待,直到 Status(状态)变为 Deleted(已删除)为止。

5.3  如果您在步骤 1 中使用已有的 SageMaker Studio 域,请跳过以下步骤。

如果您在步骤 1 运行了 CloudFormation 模板来创建新的 SageMaker Studio 域,请继续执行以下步骤来删除域、用户以及根据 CloudFormation 模板创建的资源。

5.4  在 AWS 控制台搜索栏中输入 CloudFormation,然后从搜索结果中选择 CloudFormation,打开 CloudFormation 控制台

5.5  在 CloudFormation 控制台的左侧导航窗格中,选择 Stacks(堆栈)。从状态下拉菜单中,选择 Active(运行中)。在 Stack name(堆栈名称)列,选择 CFN-SM-IM-Lambda-catalog,打开对应的堆栈详细信息页面。

5.6  在 CFN-SM-IM-Lambda-catalog 堆栈详细信息页面上,选择 Delete(删除)即可删除此堆栈及其在步骤 1 中创建的资源。

总结

恭喜您!您已完成《标记用于机器学习的训练数据》教程的学习。

在本教程中,您使用 Amazon SageMaker Ground Truth 和 Amazon Mechanical Turk 构建了用于机器学习的训练数据集。

您可以继续后续步骤,继续您的 Amazon SageMaker 机器学习之旅。

推荐的后续步骤

自动创建机器学习模型

学习如何使用 AutoML,在不写代码的前提下开发机器学习(ML)模型。

部署已训练的模型

学习如何部署已训练好的机器学习模型,并用于推理。

查找更多实践教程

了解并深入探索其他机器学习入门教程。