翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
画像分類 - MXNet
Amazon SageMaker AI イメージ分類アルゴリズムは、マルチラベル分類をサポートする教師あり学習アルゴリズムです。入力として画像を取得し、その画像に割り当てられた 1 つ以上のラベルを出力します。畳み込みニューラルネットワークを使用します。これは、ゼロからトレーニングすることも、大量のトレーニングイメージが使用可能でない場合に転移学習を使用してトレーニングすることもできます。
Amazon SageMaker AI イメージ分類アルゴリズムに推奨される入力形式は、Apache MXNet RecordIO
注記
既存の深層学習フレームワークとの相互運用性を維持するために、これは他の Amazon SageMaker AI アルゴリズムで一般的に使用される protobuf データ形式とは異なります。
畳み込みネットワークの詳細については、以下を参照してください。
-
Deep residual learning for image recognition (イメージ認識のための深層残差学習)
Kaiming He 他、2016 IEEE Conference on Computer Vision and Pattern Recognition (2016 年コンピュータビジョンとパターン認識に関する IEEE 会議)
トピック
イメージ分類アルゴリズムの入出力インターフェイス
SageMaker AI イメージ分類アルゴリズムは、ファイルモードでのトレーニング用に RecordIO (application/x-recordio
) コンテンツタイプとイメージ (image/png
、image/jpeg
、application/x-image
) コンテンツタイプの両方をサポートし、パイプモードでのトレーニング用に RecordIO (application/x-recordio
) コンテンツタイプをサポートします。ただし、RecordIO ファイルを作成せずに、拡張マニフェスト形式を使用して、イメージファイル (image/png
、image/jpeg
、application/x-image
) を使用してパイプモードでトレーニングすることもできます。
分散トレーニングは、ファイルモードとパイプモードでサポートされています。パイプモードで RecordIO コンテンツタイプを使用する場合は、S3DataSource
の S3DataDistributionType
を FullyReplicated
に設定する必要があります。このアルゴリズムは、データが各マシンにコピーされる完全にレプリケートされるモデルをサポートします。
このアルゴリズムでは、推論に image/png
、image/jpeg
、および application/x-image
のみをサポートします。
RecordIO 形式でトレーニングする
トレーニングに RecordIO フォーマットを使用する場合は、train
チャネルと validation
チャネルの両方を InputDataConfig
リクエストの CreateTrainingJob
パラメータの値として指定します。1 つの RecordIO (.rec
) ファイルを train
チャネルで指定し、もう 1 つの RecordIO ファイルを validation
チャネルで指定します。両方のチャネルのコンテンツタイプを application/x-recordio
に設定します。
イメージ形式でトレーニングする
トレーニングにイメージフォーマットを使用する場合は、train
、validation
、train_lst
、validation_lst
チャネルを InputDataConfig
リクエストの CreateTrainingJob
パラメータの値として指定します。.jpg
および .png
チャネルの個々のイメージデータ (train
または validation
ファイル) を指定します。.lst
チャネルと train_lst
チャネルそれぞれに 1 つの validation_lst
ファイルを指定します。4 つのチャネルすべてのコンテンツタイプを application/x-image
に設定します。
注記
SageMaker AI はトレーニングデータと検証データを異なるチャネルから個別に読み取るため、トレーニングデータと検証データを異なるフォルダに保存する必要があります。
.lst
ファイルはタブ区切りファイルで、イメージファイルのリストを含む 3 つの列があります。最初の列はイメージのインデックスを指定し、2 番目の列はイメージのクラスラベルインデックスを指定します。3 番目の列はイメージファイルの相対パスを指定します。最初の列のイメージインデックスはすべてのイメージにわたって一意である必要があります。一連のクラスラベルインデックスには連番が付けられ、番号は 0 から開始する必要があります。たとえば、0 は cat クラス、1 は dog クラスなどです。
次は、.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
ディレクトリ内にある 1 つのサブディレクトリに保存することもできます。その場合は、そのサブディレクトリの相対パスを使用します。例えば、s3://<your_bucket>/train/your_image_directory
と指定します。
拡張マニフェストイメージ形式でトレーニングする
拡張マニフェスト形式を使用すると、RecordIO ファイルを作成しなくても、イメージファイルを使用してパイプモードでトレーニングを行うことができます。CreateTrainingJob
リクエストの InputDataConfig
パラメータの値として、トレーニングチャネルと検証チャネルの両方を指定する必要があります。形式を使用している間、イメージとそれに対応する注釈のリストを含む S3 マニフェストファイルを生成する必要があります。マニフェストファイル形式は、各行が 1 つのサンプルを表す JSON Lines'source-ref'
タグを使用して指定します。注釈は、CreateTrainingJob
リクエストで指定されている "AttributeNames"
パラメータ値の下に入力します。metadata
タグの下に追加のメタデータを含めることもできますが、これらはアルゴリズムによって無視されます。次の例では、"AttributeNames"
は画像および注釈参照 ["source-ref", "class"]
のリストに含まれます。対応するラベル値は最初のイメージの場合は "0"
、2 番目のイメージの場合は “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 の 2 つがあります。
multi-hot 形式では、各ラベルはすべてのクラスの multi-hot エンコードされたベクトルであり、各クラスは 0 または 1 の値をとります。次の例では 3 つのクラスがあります。最初のイメージはクラス 0 と 2 でラベル付けされ、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 形式では、各ラベルはデータポイントに適用される [0, num_classes
) からのクラス ID のリストです。代わりに、前の例は次のようになります。
{"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".
)。 GroundTruth によって出力される形式である class-id 形式は、明示的に設定する必要があります ("application/x-recordio;
label-format=class-id".
)。
拡張マニフェストファイルの詳細については、トレーニングジョブの拡張マニフェストファイルを参照してください。
段階的トレーニング
SageMaker AI で以前にトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードすることもできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。SageMaker AI イメージ分類モデルは、SageMaker AI でトレーニングされた別の組み込みイメージ分類モデルでのみシードできます。
事前トレーニング済みモデルを使用するには、CreateTrainingJob
リクエストで、InputDataConfig
パラメータに ChannelName
を "model" と指定します。モデルチャネルの ContentType
を application/x-sagemaker-model
に設定します。モデルチャネルにアップロードする新しいモデルと事前トレーニング済みモデルの両方の入力ハイパーパラメータの設定は、num_layers
、image_shape
、および num_classes
入力パラメータの設定と同じである必要があります。これらのパラメータはネットワークアーキテクチャーを定義します。事前トレーニング済みモデルファイルには、SageMaker AI によって出力された圧縮モデルアーティファクト (.tar.gz 形式) を使用します。入力データには、RecordIO 形式またはイメージ形式を使用できます。
イメージ分類アルゴリズムによる推論
生成されたモデルは推論のためにホストでき、エンコードされた .jpg
および .png
イメージ形式を image/png,
image/jpeg
、および application/x-image
コンテンツタイプとしてサポートします。入力イメージのサイズは自動的に変更されます。出力は、JSON 形式、またはバッチ変換用の JSON Lines テキスト形式
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 AI イメージ分類アルゴリズムを使用するサンプルノートブックについては、「Build and Register an MXNet Image Classification Model via SageMaker Pipelines