本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
物体检测-MXNet
Amazon SageMaker 对象检测-MXNet 算法使用单个深度神经网络对图像中的物体进行检测和分类。它是一种指导式学习算法,将图像作为输入并识别图像场景中的所有对象实例。该对象被归类到指定集合中的一个分类,具有属于该分类的置信度分数。它在图像中的位置和比例由矩形边界框表示。它使用 Sing le Shot multibox Detector (SSD)
对象检测算法的输入/输出接口
SageMaker 对象检测算法支持 recordio (application/x-recordio
) 和图像(image/png
、和application/x-image
)内容类型,用于在文件模式下训练image/jpeg
,并支持 Recordio (application/x-recordio
) 用于在管道模式下训练。但是,您还可以使用图像文件(image/png
、image/jpeg
和 application/x-image
)在管道模式下进行训练,无需使用扩增清单格式创建 RecordIO 文件。亚马逊 SageMaker 对象检测算法的推荐输入格式是 A pache Recor MXNet dioapplication/x-image
用于推理。
注意
为了保持与现有深度学习框架的更好的互操作性,这与其他 Ama SageMaker zon 算法常用的 protobuf 数据格式不同。
有关数据格式的更多详细信息,请参阅对象检测示例笔记本。
使用 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,将你的训练和 train_annotation 频道的路径指定为 s3://your_bucket
/train 和 s3://your_bucket
/train_notation 分别是。
在 .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 清单文件。清单文件格式应为 Lin JSONes'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
输入参数具有相同的设置。这些参数定义了网络架构。对于预训练的模型文件,请使用由输出的压缩模型工件(.tar.gz 格式)。 SageMaker您可以对输入数据使用 RecordIO 或图像格式。
有关增量训练及其使用方式说明的更多信息,请参阅在 Amazon 中使用增量训练 SageMaker。
EC2物体检测算法的实例推荐
该物体检测算法支持 P2、P3、g4dN 和 G5 实例系列。GPU我们建议使用内存较大的GPU实例进行大批量训练。您可以在多机和多机设置上运行目标检测算法GPU,以进行分布式训练。
您可以同时使用CPU(例如 C5 和 M5)和GPU(例如 P3 和 G4dN)实例进行推理。
对象检测示例笔记本
对于展示如何使用 SageMaker 物体检测算法在上训练和托管模型的示例笔记本
使用 Single Shot 多箱探测器算法的@@ 加州理工学院鸟类(CUB200 2011)
有关 Amazon SageMaker 对象检测算法的更多信息,请参阅以下博客文章: