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

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

对象检测算法

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

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

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

注意

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

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

使用 RecordIO 格式进行训练

如果您使用 RecordIO 格式进行训练,则指定训练通道和验证通道作为InputDataConfigCreateTrainingJob请求. 在 train 通道中指定一个 RecordIO (.rec) 文件,在 validation 通道中指定一个 RecordIO 文件。将两个通道的内容类型设置为 application/x-recordio。一个示例,介绍如何生成可在对象检测示例笔记本中找到的 RecordIO 文件。您也可以使用MXNet 推出的 GUONCV为常用数据集生成 RecordIO 文件,如PASCAL 可视对象类上下文中的公共对象 (COCO).

使用图像格式进行训练

如果您使用图像格式进行训练,则指定trainvalidationtrain_annotation, 和validation_annotation通道作为InputDataConfig的参数CreateTrainingJob请求. 为 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 对象检测算法目前只支持三通道图像。"annotations" 属性指定图像中对象的分类和边界框。每个对象都由一个 "class_id" 索引和四个边界框坐标("left""top""width""height")注释。"left"(x 坐标)和 "top"(y 坐标)值表示边界框的左上角。"width"(x 坐标)和 "height"(y 坐标)值表示边界框的维度。原点 (0, 0) 是整个图像的左上角。如果您在一个图像内有多个对象,则所有注释都应包含在单个 .json 文件中。"categories" 属性存储类索引与类名称之间的映射。类索引应采用连续编号,并且编号应从 0 开始。"categories" 属性对于注释 .json 文件是可选的

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

扩增清单格式使您可以使用图像文件在管道模式下进行训练,而无需创建 RecordIO 文件。您需要将训练通道和验证通道指定为InputDataConfigCreateTrainingJob请求. 使用该格式时,需要生成包含图像列表及其相应注释的 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 输入参数具有相同的设置。这些参数定义了网络架构。对于预训练模型文件,使用 SageMaker 的压缩模型构件(采用 .tar.gz 格式)输出。您可以对输入数据使用 RecordIO 或图像格式。

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

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

对于对象检测,我们支持以下 GPU 实例用于训练:ml.p2.xlargeml.p2.8xlargeml.p2.16xlargeml.p3.2xlargeml.p3.8xlargeml.p3.16xlarge。对于大批量训练,建议使用具有更多内存的 GPU 实例。您也可以在多 GPU 和多机器设置上运行该算法以进行分布式训练。不过,CPU(例如 C5 和 M5)和 GPU(例如 P2 和 P3)实例均可用于推理。Amazon SageMaker ML 实例类型逐项列出了所有支持用于推理的实例类型。

对象检测示例笔记本

有关说明如何使用 SageMaker 对象检测算法训练和托管模型的示例笔记本。

加州加州理工大学鸟类学校数据集中使用单次镜头多盒检测器算法,请参阅针对鸟类物种的 Amazon SageMaker 物体检测. 有关如何创建和访问可用于在 SageMaker 中运行示例的 Jupyter 笔记本实例的说明,请参阅使用 Amazon SageMaker 笔记本实例. 在您创建笔记本实例并打开之后,请选择SageMaker End的示例选项卡以查看所有 SageMaker 示例的列表。使用对象检测算法的对象检测示例笔记本位于 Amazon 算法简介 部分。要打开笔记本,请单击其 Use (使用) 选项卡,然后选择 Create copy (创建副本)