对象检测 – MXNet
Amazon SageMaker 对象检测 – MXNet 算法使用单个深度神经网络检测和分类图像中的对象。它是一种指导式学习算法,将图像作为输入并识别图像场景中的所有对象实例。该对象被归类到指定集合中的一个分类,具有属于该分类的置信度分数。它在图像中的位置和比例由矩形边界框表示。它使用单张图片多方框检测器 (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 SageMaker 算法常用的 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 中,请将您的训练和训练注释通道的路径分别指定为 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 文件。您需要将训练通道和验证通道指定为 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 实例建议
对象检测算法支持 P2、P3、G4dn 和 G5 GPU 实例系列。对于大批量训练,建议使用具有更多内存的 GPU 实例。您也可以在多 GPU 和多机器设置上运行对象检测算法以进行分布式训练。
对于推理,您可以使用 CPU 实例(例如 C5 和 M5)和 GPU 实例(例如 P3 和 G4dn)。
对象检测示例笔记本
示例笔记本演示了如何使用 SageMaker 对象检测算法,
通过 Single Shot Multibox Detector 算法在 Caltech Birds (CUB 200 2011)