

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

# 物体检测- MXNet
<a name="object-detection"></a>

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

**Topics**
+ [对象检测算法的输入/输出接口](#object-detection-inputoutput)
+ [对象检测算法的 EC2 实例建议](#object-detection-instances)
+ [对象检测示例笔记本](#object-detection-sample-notebooks)
+ [对象检测的工作原理](algo-object-detection-tech-notes.md)
+ [对象检测超参数](object-detection-api-config.md)
+ [优化对象检测模型](object-detection-tuning.md)
+ [对象检测请求和响应格式](object-detection-in-formats.md)

## 对象检测算法的输入/输出接口
<a name="object-detection-inputoutput"></a>

 SageMaker AI 对象检测算法支持 recordio (`application/x-recordio`) 和图像 (`image/png``image/jpeg`、和`application/x-image`) 内容类型，用于在文件模式下训练，并支持 Recordio (`application/x-recordio`) 用于在管道模式下训练。但是，您还可以使用图像文件（`image/png`、`image/jpeg` 和 `application/x-image`）在管道模式下进行训练，无需使用扩增清单格式创建 RecordIO 文件。亚马逊 A SageMaker I 对象检测算法的推荐输入格式是 A [pache Recor MXNet dio](https://mxnet.apache.org/api/architecture/note_data_loading)。但是，您也可以使用 .jpg 或 .png 格式的原始图像。该算法仅支持 `application/x-image` 用于推理。

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

有关数据格式的更多详细信息，请参阅[对象检测示例笔记本](#object-detection-sample-notebooks)。

### 使用 RecordIO 格式进行训练
<a name="object-detection-recordio-training"></a>

如果您使用 RecordIO 格式进行训练，则同时指定 train 和 validation 通道作为 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 请求的 `InputDataConfig` 参数值。在 train 通道中指定一个 RecordIO (.rec) 文件，在 validation 通道中指定一个 RecordIO 文件。将两个通道的内容类型设置为 `application/x-recordio`。一个示例，介绍如何生成可在对象检测示例笔记本中找到的 RecordIO 文件。你还可以使用 [GluonCV](https://gluon-cv.mxnet.io/build/examples_datasets/recordio.html) 中的MXNet工具为 [PASCAL 视觉对象类和上下文[中的常见对象](http://cocodataset.org/#home)](http://host.robots.ox.ac.uk/pascal/VOC/) (COCO) 等热门数据集生成 Recordio 文件。

### 使用图像格式进行训练
<a name="object-detection-image-training"></a>

如果您使用图像格式进行训练，则指定 `train`、`validation`、`train_annotation` 和 `validation_annotation` 通道作为 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 请求的 `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\$1image1.json”。注释 .json 文件中有四个属性。属性“file”指定图像文件的相对路径。例如，如果你的训练图像和相应的.json 文件存储在 s3: ///t *your\$1bucket* rain/sample\$1image 和 s3: ///train\$1annotation 中，请将训练和*your\$1bucket*训练注释频道的路径分别指定为 s3: ///train 和 s3: ///train\$1annotation。*your\$1bucket* *your\$1bucket*

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

### 使用扩增清单图像格式进行训练
<a name="object-detection-augmented-manifest-training"></a>

扩增清单格式使您可以使用图像文件在管道模式下进行训练，而无需创建 RecordIO 文件。您需要将训练通道和验证通道指定为 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 请求的 `InputDataConfig` 参数的值。使用该格式时，需要生成包含图像列表及其相应注释的 S3 清单文件。清单文件格式应为 [JSON 行](http://jsonlines.org/)格式，其中每行代表一个样本。使用指向图像 S3 位置的 `'source-ref'` 标签来指定图像。将在 `"AttributeNames"` 参数值下面提供注释，如 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 请求中指定。它还可以在 `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"`。

有关增强清单文件的更多信息，请参阅[训练作业中的增强清单文件](augmented-manifest.md)。

### 增量训练
<a name="object-detection-incremental-training"></a>

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

要使用预训练模型，请在 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) 请求中，在 `InputDataConfig` 参数中将 `ChannelName` 指定为“model”。将模型通道的 `ContentType` 设置为 `application/x-sagemaker-model`。您上传到模型通道的新模型和预训练模型的输入超参数必须与 `base_network` 和 `num_classes` 输入参数具有相同的设置。这些参数定义了网络架构。对于预训练的模型文件，请使用 AI 输出的压缩模型工件（.tar.gz 格式）。 SageMaker 您可以对输入数据使用 RecordIO 或图像格式。

有关增量训练及其使用方式说明的更多信息，请参阅[在 Amazon A SageMaker I 中使用增量训练](incremental-training.md)。

## 对象检测算法的 EC2 实例建议
<a name="object-detection-instances"></a>

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

对于推理，您可以使用 CPU 实例（例如 C5 和 M5）和 GPU 实例（例如 P3 和 G4dn）。

## 对象检测示例笔记本
<a name="object-detection-sample-notebooks"></a>

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

使用单枪多箱探测器算法的@@ [加州理工学院鸟类（CUB 200 2011）](http://www.vision.caltech.edu/datasets/cub_200_2011/)数据集，参见[亚马逊鸟类 SageMaker 人工智能物体检测](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/object_detection_birds/object_detection_birds.html)。有关如何创建和访问可用于在 SageMaker AI 中运行示例的 Jupyter 笔记本实例的说明，请参阅。[Amazon SageMaker 笔记本实例](nbi.md)创建并打开笔记本实例后，选择 “**SageMaker AI 示例**” 选项卡以查看所有 SageMaker AI 示例的列表。使用对象检测算法的对象检测示例笔记本位于 **Amazon 算法简介** 部分。要打开笔记本，请单击**使用** 选项卡，然后选择**创建副本**。

有关 Amazon A SageMaker I 对象检测算法的更多信息，请参阅以下博客文章：
+ [训练 Amazon SageMaker AI 对象检测模型并运行该模型 AWS IoT Greengrass — 第 1 部分（共 3 部分）：准备训练数据](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-1-of-3/)
+ [训练 Amazon SageMaker AI 对象检测模型并运行该模型 AWS IoT Greengrass — 第 2 部分（共 3 部分）：训练自定义对象检测模型](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-2-of-3/)
+ [训练 Amazon SageMaker AI 对象检测模型并运行该模型 AWS IoT Greengrass — 第 3 部分（共 3 部分）：部署到边缘](https://aws.amazon.com/blogs/iot/sagemaker-object-detection-greengrass-part-3-of-3/)