本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对象检测算法
AmazonSageMaker对象检测算法使用单个深度神经网络检测和分类图像中的对象。它是一种指导式学习算法,将图像作为输入并识别图像场景中的所有对象实例。该对象被归类到指定集合中的一个分类,具有属于该分类的置信度分数。它在图像中的位置和比例由矩形边界框表示。它使用单拍多箱探测器 (SSD)
对象检测算法的输入/输出接口
在文件模式下,SageMaker 对象检测算法同时支持 RecordIO (application/x-recordio) 和图像(image/png、image/jpeg 和 application/x-image)内容类型以进行训练;在管道模式下,该算法支持 RecordIO application/x-recordio 内容类型以进行训练。但是,您还可以使用图像文件(image/png、image/jpeg 和 application/x-image)在管道模式下进行训练,无需使用扩增清单格式创建 RecordIO 文件。对于 Amazon,建议的输入格式SageMaker对象检测算法是Apache MXNet RecordIOapplication/x-image 用于推理。
为了与现有深度学习框架保持更好的互操作性,这不同于其他 Amazon 常用的 protobuf 数据格式。SageMaker算法。
有关数据格式的更多详细信息,请参阅对象检测示例笔记本。
使用 RecordIO 格式进行训练
如果您使用 RecordIO 格式进行训练,则同时指定 train 和 validation通道作为 CreateTrainingJob 请求的 InputDataConfig 参数值。在 train 通道中指定一个 RecordIO (.rec) 文件,在 validation 通道中指定一个 RecordIO 文件。将两个通道的内容类型设置为 application/x-recordio。一个示例,介绍如何生成可在对象检测示例笔记本中找到的 RecordIO 文件。您也可以使用中的工具MXNet 的 GluonCV
使用图像格式进行训练
如果您使用图像格式进行训练,则指定 train、validation、train_annotation 和 validation_annotation 通道作为 CreateTrainingJob 请求的 InputDataConfig 参数值。为 train 或 validation 通道指定相应的图像数据(.jpg 或 .png)文件。对于注释数据,您可以使用 JSON 格式。在 train_annotation 和 validation_annotation 通道中指定相应的 .json 文件。根据图像类型,将所有四个通道的内容类型设置为 image/png 或 image/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 行'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_network 和 num_classes 输入参数具有相同的设置。这些参数定义了网络架构。对于预训练模型文件,使用 SageMaker 输出的压缩模型构件(采用 .tar.gz 格式)。您可以对输入数据使用 RecordIO 或图像格式。
有关增量训练及其使用方式说明的更多信息,请参阅Amazon SageMaker 中的增量训练。
对象检测算法的 EC2 实例建议
对于对象检测,我们支持以下 GPU 实例用于训练:ml.p2.xlarge、ml.p2.8xlarge、ml.p2.16xlarge、ml.p3.2xlarge、ml.p3.8xlarge 和 ml.p3.16xlarge。对于大批量训练,建议使用具有更多内存的 GPU 实例。您也可以在多 GPU 和多机器设置上运行该算法以进行分布式训练。不过,CPU(例如 C5 和 M5)和 GPU(例如 P2 和 P3)实例均可用于推理。在上逐项列出了所有支持用于推理的实例类型。亚马逊SageMakerML 实例类型
对象检测示例笔记本
对于演示如何使用SageMaker对象检测算法用于在
加州理工大学鸟类(古巴 200 2011)