对象检测 – MXNet - Amazon SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

对象检测 – MXNet

Amazon SageMaker 物体检测-MXnet 算法使用单个深度神经网络对图像中的物体进行检测和分类。它是一种指导式学习算法,将图像作为输入并识别图像场景中的所有对象实例。该对象被归类到指定集合中的一个分类,具有属于该分类的置信度分数。它在图像中的位置和比例由矩形边界框表示。它使用单枪多箱探测器 (SSD) 框架,支持两个基础网络:VGG 和。ResNet网络可以从头开始训练,也可以使用已在ImageNet数据集上预先训练过的模型进行训练。

对象检测算法的输入/输出接口

SageMaker 对象检测算法支持 recordio (application/x-recordio) 和图像(image/png、和application/x-image)内容类型,用于在文件模式下训练image/jpeg,并支持 Recordio (application/x-recordio) 用于在管道模式下训练。但是,您还可以使用图像文件(image/pngimage/jpegapplication/x-image)在管道模式下进行训练,无需使用扩增清单格式创建 RecordIO 文件。亚马逊 SageMaker 对象检测算法的推荐输入格式是 A pache MxNet Recordio。但是,您也可以使用 .jpg 或 .png 格式的原始图像。该算法仅支持 application/x-image 用于推理。

注意

为了保持与现有深度学习框架的更好的互操作性,这与其他 Ama SageMaker zon 算法常用的 protobuf 数据格式不同。

有关数据格式的更多详细信息,请参阅对象检测示例笔记本

使用 RecordIO 格式进行训练

如果您使用 RecordIO 格式进行训练,则同时指定 train 和 validation 通道作为 CreateTrainingJob 请求的 InputDataConfig 参数值。在 train 通道中指定一个 RecordIO (.rec) 文件,在 validation 通道中指定一个 RecordIO 文件。将两个通道的内容类型设置为 application/x-recordio。一个示例,介绍如何生成可在对象检测示例笔记本中找到的 RecordIO 文件。您也可以使用 MXNet 的 GluonCV 中的工具,为流行的数据集(如 PASCAL Visual Object ClassesCommon Objects in Context (COCO))生成 RecordIO 文件。

使用图像格式进行训练

如果您使用图像格式进行训练,则指定 trainvalidationtrain_annotationvalidation_annotation 通道作为 CreateTrainingJob 请求的 InputDataConfig 参数值。为 train 或 validation 通道指定相应的图像数据(.jpg 或 .png)文件。对于注释数据,您可以使用 JSON 格式。在 train_annotationvalidation_annotation 通道中指定相应的 .json 文件。根据图像类型,将所有四个通道的内容类型设置为 image/pngimage/jpeg。当数据集同时包含 .jpg 和 .png 图像时,您还可以使用内容类型 application/x-image。以下是 .json 文件的示例。

{ "file": "your_image_directory/sample_image1.jpg", "image_size": [ { "width": 500, "height": 400, "depth": 3 } ], "annotations": [ { "class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128 }, { "class_id": 0, "left": 161, "top": 250, "width": 79, "height": 143 }, { "class_id": 1, "left": 101, "top": 185, "width": 42, "height": 130 } ], "categories": [ { "class_id": 0, "name": "dog" }, { "class_id": 1, "name": "cat" } ] }

每个图像都需要一个 .json 文件进行注释,而 .json 文件应该与相应的图像具有相同的名称。上面的 .json 文件的名称应该是“sample_image1.json”。注释 .json 文件中有四个属性。属性“file”指定图像文件的相对路径。例如,如果您的训练图像和相应的 .json 文件存储在 s3://your_bucket/train/sample_image 和 s3://your_bucket/train_annotation 中,请将您的训练和训练注释通道的路径分别指定为 s3://your_bucket/train 和 s3://your_bucket/train_annotation。

在 .json 文件中,名为 sample_image1.jpg 的图像的相对路径应为 sample_image / sample_image1.jpg。"image_size" 属性指定整个图像的尺寸。 SageMaker 物体检测算法目前仅支持 3 通道图像。"annotations" 属性指定图像中对象的分类和边界框。每个对象都由一个 "class_id" 索引和四个边界框坐标("left""top""width""height")注释。"left"(x 坐标)和 "top"(y 坐标)值表示边界框的左上角。"width"(x 坐标)和 "height"(y 坐标)值表示边界框的维度。原点 (0, 0) 是整个图像的左上角。如果您在一个图像内有多个对象,则所有注释都应包含在单个 .json 文件中。"categories" 属性存储类索引与类名称之间的映射。类索引应采用连续编号,并且编号应从 0 开始。"categories" 属性对于注释 .json 文件是可选的

使用扩增清单图像格式进行训练

扩增清单格式使您可以使用图像文件在管道模式下进行训练,而无需创建 RecordIO 文件。您需要将训练通道和验证通道指定为 CreateTrainingJob 请求的 InputDataConfig 参数的值。使用该格式时,需要生成包含图像列表及其相应注释的 S3 清单文件。清单文件格式应为 JSON 行格式,其中每行代表一个样本。使用指向图像 S3 位置的 'source-ref' 标签来指定图像。将在 "AttributeNames" 参数值下面提供注释,如 CreateTrainingJob 请求中指定。它还可以在 metadata 标签下包含其他元数据,但这些会被算法忽略。在以下示例中,"AttributeNames 包含在列表 ["source-ref", "bounding-box"] 中:

{"source-ref": "s3://your_bucket/image1.jpg", "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": 80, "height": 50}]}, "bounding-box-metadata":{"class-map":{"0": "dog", "5": "horse"}, "type": "groundtruth/object-detection"}} {"source-ref": "s3://your_bucket/image2.jpg", "bounding-box":{"image_size":[{ "width": 400, "height": 300, "depth":3}], "annotations":[{"class_id": 1, "left": 100, "top": 120, "width": 43, "height": 78}]}, "bounding-box-metadata":{"class-map":{"1": "cat"}, "type": "groundtruth/object-detection"}}

在训练对象检测算法时,"AttributeNames" 在输入文件中的顺序很重要。它按特定的顺序接受管道数据,先接受 image,然后接受 annotations。因此,此示例中的 AttributeNames “” 是"source-ref"先提供的,然后是"bounding-box"。在将对象检测与增强清单一起使用时,RecordWrapperType 参数值必须设置为 "RecordIO"

有关增强清单文件的更多信息,请参阅通过增强清单文件,将数据集元数据提供给训练作业

增量训练

您还可以使用之前训练过的模型中的工件为新模型的训练做种子 SageMaker。当您想要使用相同或相似的数据训练新模型时,增量训练可以节省训练时间。 SageMaker 物体检测模型只能使用另一个经过训练的内置物体检测模型进行种子设定。 SageMaker

要使用预训练模型,请在 CreateTrainingJob 请求中,在 InputDataConfig 参数中将 ChannelName 指定为“model”。将模型通道的 ContentType 设置为 application/x-sagemaker-model。您上传到模型通道的新模型和预训练模型的输入超参数必须与 base_networknum_classes 输入参数具有相同的设置。这些参数定义了网络架构。对于预训练的模型文件,请使用由输出的压缩模型工件(.tar.gz 格式)。 SageMaker您可以对输入数据使用 RecordIO 或图像格式。

有关增量训练及其使用方式说明的更多信息,请参阅在 Amazon 中使用增量训练 SageMaker

对象检测算法的 EC2 实例建议

对象检测算法支持 P2、P3、G4dn 和 G5 GPU 实例系列。对于大批量训练,建议使用具有更多内存的 GPU 实例。您也可以在多 GPU 和多机器设置上运行对象检测算法以进行分布式训练。

对于推理,您可以使用 CPU 实例(例如 C5 和 M5)和 GPU 实例(例如 P3 和 G4dn)。

对象检测示例笔记本

对于展示如何使用 SageMaker 物体检测算法在上训练和托管模型的示例笔记本

使用单枪多箱探测器算法的@@ 加州理工学院鸟类(CUB 200 2011)数据集,参见 A mazon 鸟类 SageMaker 物体检测。有关如何创建和访问可用于在中运行示例的 Jupyter 笔记本实例的说明 SageMaker,请参阅。Amazon SageMaker 笔记本实例创建并打开笔记本实例后,选择 “SageMaker 示例” 选项卡以查看所有 SageMaker 示例的列表。使用对象检测算法的对象检测示例笔记本位于 Amazon 算法简介 部分。要打开笔记本,请单击使用 选项卡,然后选择创建副本

有关 Amazon SageMaker 对象检测算法的更多信息,请参阅以下博客文章: