本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
图像分类-MXNet
Amazon SageMaker 图像分类算法是一种支持多标签分类的监督学习算法。该算法将一个图像作为输入,并输出分配给该图像的一个或多个标签。它使用卷积神经网络,可从头开始训练,也可在没有大量训练图像可用时使用迁移学习进行训练。
亚马逊 SageMaker 图像分类算法的推荐输入格式是 Apache Recor MXNet dio
注意
为了保持与现有深度学习框架的更好的互操作性,这与其他 Ama SageMaker zon 算法常用的 protobuf 数据格式不同。
有关卷积网络的更多信息,请参阅:
-
用于图像识别的深度残差学习
Kaiming He 等人,2016 年计算机视觉与模式识别IEEE会议
图像分类算法的输入/输出接口
SageMaker 图像分类算法支持 recordio (application/x-recordio
) 和图像 (image/png
image/jpeg
、和application/x-image
) 内容类型,用于在文件模式下训练,并支持 recordio (application/x-recordio
) 内容类型用于在管道模式下训练。但是,您还可以使用图像文件(image/png
、image/jpeg
和 application/x-image
)在管道模式下进行训练,无需使用扩增清单格式创建 RecordIO 文件。
对于文件模式和管道模式支持分布式训练。在管道模式下使用 RecordIO 内容类型时,必须将 S3DataSource
的 S3DataDistributionType
设置为 FullyReplicated
。该算法支持完全复制的模型,将数据复制到每台计算机上。
该算法支持使用 image/png
、image/jpeg
和 application/x-image
进行推理。
使用 RecordIO 格式进行训练
如果您使用 RecordIO 格式进行训练,则同时指定 train
和 validation
通道作为 CreateTrainingJob
请求的 InputDataConfig
参数值。在 train
通道中指定一个 RecordIO (.rec
) 文件,在 validation
通道中指定一个 RecordIO 文件。将两个通道的内容类型设置为 application/x-recordio
。
使用图像格式进行训练
如果您使用图像格式进行训练,则指定 train
、validation
、train_lst
和 validation_lst
通道作为 InputDataConfig
请求的 CreateTrainingJob
参数值。为 train
或 validation
通道指定相应的图像数据(.jpg
或 .png
文件)。在 .lst
和 train_lst
通道各指定一个 validation_lst
文件。将所有四个通道的内容类型均设置为 application/x-image
。
注意
SageMaker 从不同的渠道分别读取训练和验证数据,因此必须将训练和验证数据存储在不同的文件夹中。
.lst
文件是一个包含图像文件列表的三列制表符分隔文件。第一列指定图像索引,第二列指定图像的分类标签索引,第三列指定图像文件的相对路径。第一列中所有图像的图像索引必须唯一。分类标签索引集采用连续编号,并且编号应从 0 开始。例如,cat 分类为 0,dog 分类为 1,其他分类以此分类推。
以下是 .lst
文件的示例:
5 1 your_image_directory/train_img_dog1.jpg
1000 0 your_image_directory/train_img_cat1.jpg
22 1 your_image_directory/train_img_dog2.jpg
例如,如果您的训练图像存储在 s3://<your_bucket>/train/class_dog
、s3://<your_bucket>/train/class_cat
等位置,请将 train
通道的路径指定为 s3://<your_bucket>/train
,这是数据的顶级目录。在 .lst
文件中,将 train_image_dog1.jpg
分类目录中名为 class_dog
的单个文件的相对路径指定为 class_dog/train_image_dog1.jpg
。您也可以将所有图像文件存储在 train
目录内的一个子目录下。在这种情况下,请将该子目录用于相对路径。例如,s3://<your_bucket>/train/your_image_directory
。
使用扩增清单图像格式进行训练
扩增清单格式使您可以使用图像文件在管道模式下进行训练,而无需创建 RecordIO 文件。您需要将训练通道和验证通道指定为 CreateTrainingJob
请求的 InputDataConfig
参数的值。使用该格式时,需要生成包含图像列表及其相应注释的 S3 清单文件。清单文件格式应为 Lin JSONes'source-ref'
标签来指定图像。将在 "AttributeNames"
参数值下面提供注释,如 CreateTrainingJob
请求中指定。它还可以在 metadata
标签下包含其他元数据,但这些会被算法忽略。在以下示例中,"AttributeNames"
包含在图像和注释引用 ["source-ref", "class"]
列表中。第一个图像的相应标签值为 "0"
,第二个图像的标签值为 “1”
:
{"source-ref":"s3://image/filename1.jpg", "class":"0"} {"source-ref":"s3://image/filename2.jpg", "class":"1", "class-metadata": {"class-name": "cat", "type" : "groundtruth/image-classification"}}
训练 ImageClassification 算法时,输入文件"AttributeNames"
中的顺序很重要。它按特定的顺序接受管道数据,先接受 image
,然后接受 label
。因此,此示例中的 AttributeNames “” 是"source-ref"
先提供的,然后是"class"
。将 ImageClassification 算法与增强清单一起使用时,RecordWrapperType
参数的值必须为"RecordIO"
。
还通过指定值JSON数组来支持多标签训练。必须将 num_classes
超参数设置为与类的总数匹配。有两种有效的标签格式:multi-hot 和 class-id。
在 multi-hot 格式中,每个标签都是所有类的 multi-hot 编码向量,其中每个类的值为 0 或 1。在以下示例中,有三种类别。第一个图像标记为类 0 和 2,而第二个图像仅标记为类 2:
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[1, 0, 1]"} {"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[0, 0, 1]"}
在 class-id 格式中,每个标签都是适用于数据点的类 ID 的列表,从 [0, num_classes
) 开始。前面的例子看起来像是这样:
{"image-ref": "s3://amzn-s3-demo-bucket/sample01/image1.jpg", "class": "[0, 2]"} {"image-ref": "s3://amzn-s3-demo-bucket/sample02/image2.jpg", "class": "[2]"}
multi-hot 格式是默认格式,但可以使用以下label-format
参数在内容类型中显式设置:"application/x-recordio;
label-format=multi-hot".
class-id 格式,即输出的格式 GroundTruth,必须明确设置:"application/x-recordio;
label-format=class-id".
有关增强清单文件的更多信息,请参阅用于训练作业的增强清单文件。
增量训练
您还可以使用之前训练过的模型中的工件为新模型的训练做种子 SageMaker。当您想要使用相同或相似的数据训练新模型时,增量训练可以节省训练时间。 SageMaker 图像分类模型只能使用另一个经过训练的内置图像分类模型进行播种。 SageMaker
要使用预训练模型,请在 CreateTrainingJob
请求中,在 InputDataConfig
参数中将 ChannelName
指定为“model”。将模型通道的 ContentType
设置为 application/x-sagemaker-model
。您上传到模型通道的新模型和预训练模型的输入超参数必须与 num_layers
、image_shape
和 num_classes
输入参数具有相同的设置。这些参数定义了网络架构。对于预训练的模型文件,请使用由输出的压缩模型工件(.tar.gz 格式)。 SageMaker您可以对输入数据使用 RecordIO 或图像格式。
使用图像分类算法进行推理
生成的模型可以托管用于推理,并且支持编码的 .jpg
和 .png
图像格式作为 image/png,
image/jpeg
和 application/x-image
内容类型。输入图像将自动调整大小。输出是以格式编码的所有类的概率值,或者以JSON行文本JSON格式
accept: application/jsonlines {"prediction": [prob_0, prob_1, prob_2, prob_3, ...]}
有关训练和推理的更多详细信息,请参阅简介中引用的图像分类示例笔记本实例。
EC2图像分类算法的实例推荐
对于图像分类,我们支持 P2、P3、G4dn 和 G5 实例。我们建议使用内存较大的GPU实例进行大批量训练。您还可以在多GPU机和多机设置上运行算法以进行分布式训练。两个实例CPU(例如 C4)和GPU(P2、P3、G4dN 或 G5)实例都可用于推理。
图像分类示例笔记本
有关使用 SageMaker 图像分类算法的示例笔记本,请参阅通过 SageMaker 管道构建和注册MXNet图像分类模型