画像分類 - MXNet - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

画像分類 - MXNet

Amazon SageMaker AI イメージ分類アルゴリズムは、マルチラベル分類をサポートする教師あり学習アルゴリズムです。入力として画像を取得し、その画像に割り当てられた 1 つ以上のラベルを出力します。畳み込みニューラルネットワークを使用します。これは、ゼロからトレーニングすることも、大量のトレーニングイメージが使用可能でない場合に転移学習を使用してトレーニングすることもできます。

Amazon SageMaker AI イメージ分類アルゴリズムに推奨される入力形式は、Apache MXNet RecordIO です。ただし、.jpg または .png の形式で RAW イメージを使用することもできます。機械学習システムの効率的なデータ準備と読み込みの概要については、こちらの説明を参照してください。

注記

既存の深層学習フレームワークとの相互運用性を維持するために、これは他の Amazon SageMaker AI アルゴリズムで一般的に使用される protobuf データ形式とは異なります。

畳み込みネットワークの詳細については、以下を参照してください。

イメージ分類アルゴリズムの入出力インターフェイス

SageMaker AI イメージ分類アルゴリズムは、ファイルモードでのトレーニング用に RecordIO (application/x-recordio) コンテンツタイプとイメージ (image/pngimage/jpegapplication/x-image) コンテンツタイプの両方をサポートし、パイプモードでのトレーニング用に RecordIO (application/x-recordio) コンテンツタイプをサポートします。ただし、RecordIO ファイルを作成せずに、拡張マニフェスト形式を使用して、イメージファイル (image/pngimage/jpegapplication/x-image) を使用してパイプモードでトレーニングすることもできます。

分散トレーニングは、ファイルモードとパイプモードでサポートされています。パイプモードで RecordIO コンテンツタイプを使用する場合は、S3DataSourceS3DataDistributionTypeFullyReplicated に設定する必要があります。このアルゴリズムは、データが各マシンにコピーされる完全にレプリケートされるモデルをサポートします。

このアルゴリズムでは、推論に image/pngimage/jpeg、および application/x-image のみをサポートします。

RecordIO 形式でトレーニングする

トレーニングに RecordIO フォーマットを使用する場合は、train チャネルと validation チャネルの両方を InputDataConfig リクエストの CreateTrainingJob パラメータの値として指定します。1 つの RecordIO (.rec) ファイルを train チャネルで指定し、もう 1 つの RecordIO ファイルを validation チャネルで指定します。両方のチャネルのコンテンツタイプを application/x-recordio に設定します。

イメージ形式でトレーニングする

トレーニングにイメージフォーマットを使用する場合は、trainvalidationtrain_lstvalidation_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_dogs3://<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 形式になっている必要があります。イメージは、その S3 の場所を指す '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" と指定します。モデルチャネルの ContentTypeapplication/x-sagemaker-model に設定します。モデルチャネルにアップロードする新しいモデルと事前トレーニング済みモデルの両方の入力ハイパーパラメータの設定は、num_layersimage_shape、および num_classes 入力パラメータの設定と同じである必要があります。これらのパラメータはネットワークアーキテクチャーを定義します。事前トレーニング済みモデルファイルには、SageMaker AI によって出力された圧縮モデルアーティファクト (.tar.gz 形式) を使用します。入力データには、RecordIO 形式またはイメージ形式を使用できます。

イメージ分類アルゴリズムによる推論

生成されたモデルは推論のためにホストでき、エンコードされた .jpg および .png イメージ形式を image/png, image/jpeg、および application/x-image コンテンツタイプとしてサポートします。入力イメージのサイズは自動的に変更されます。出力は、JSON 形式、またはバッチ変換用の JSON Lines テキスト形式でエンコードされたすべてのクラスの確率値です。イメージ分類モデルはリクエストごとに 1 つのイメージを処理するため、JSON または JSON Lines 形式で 1 行のみを出力します。以下は、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」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする手順については、「」を参照してくださいAmazon SageMaker ノートブックインスタンス。ノートブックインスタンスを作成して開いたら、SageMaker AI Examples タブを選択して、すべての SageMaker AI サンプルのリストを表示します。イメージ分類サンプルノートブックは、[Introduction to Amazon algorithm (Amazon アルゴリズムの概要)] セクションにあります。ノートブックを開くには、その [Use (使用)] タブをクリックして [Create copy (コピーを作成)] を選択します。