イメージ分類アルゴリズム - Amazon SageMaker

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

イメージ分類アルゴリズム

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

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

注記

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

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

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

- SageMaker 画像分類アルゴリズムは両方の RecordIO (application/x-recordio) とイメージ (image/png,image/jpeg, およびapplication/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 は、トレーニングデータと検証データを異なるチャネルから別々に読み取るため、それぞれのデータは異なるフォルダに保存する必要があります。

.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"}}

の順序"AttributeNames"トレーニングするときに重要なのは入力ファイルで ImageClassification アルゴリズム。パイプ指定されたデータは特定の順で受け入れられます。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://mybucket/sample01/image1.jpg", "class": "[1, 0, 1]"} {"image-ref": "s3://mybucket/sample02/image2.jpg", "class": "[0, 0, 1]"}

class-id 形式では、各ラベルはデータポイントに適用される [0, num_classes) からのクラス ID のリストです。代わりに、前の例は次のようになります。

{"image-ref": "s3://mybucket/sample01/image1.jpg", "class": "[0, 2]"} {"image-ref": "s3://mybucket/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 で以前にトレーニングしたモデルのアーティファクトを使用して、新しいモデルのトレーニングをシードすることもできます。段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。 SageMaker イメージ分類モデルは、SageMaker でトレーニングされた別の組み込みイメージ分類モデルでのみシードできます。

事前トレーニング済みモデルを使用するには、CreateTrainingJob リクエストで、InputDataConfig パラメータに ChannelName を "model" と指定します。モデルチャネルの ContentTypeapplication/x-sagemaker-model に設定します。モデルチャネルにアップロードする新しいモデルと事前トレーニング済みモデルの両方の入力ハイパーパラメータの設定は、num_layersimage_shape、および num_classes 入力パラメータの設定と同じである必要があります。これらのパラメータはネットワークアーキテクチャーを定義します。事前トレーニング済みモデルファイルには、SageMaker によって出力された圧縮モデルアーティファクト (.tar.gz 形式) を使用します。入力データには、RecordIO 形式またはイメージ形式を使用できます。

SageMaker イメージ分類アルゴリズムで段階的トレーニングを使用する方法を示すサンプルノートブックについては、「End-to-End Incremental Training Image Classification Example」(エンドツーエンドの段階的トレーニングのイメージ分類のサンプル) を参照してください。段階的トレーニングの詳細とその使用方法については、Amazon SageMaker の段階的トレーニングを参照してください。

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

生成されたモデルは推論のためにホストでき、エンコードされた .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 インスタンスの推奨事項

イメージ分類について、トレーニングに次の GPU インスタンスをサポートしています: ml.p2.xlargeml.p2.8xlargeml.p2.16xlargeml.p3.2xlargeml.p3.8xlargeml.p3.16xlarge。大きなバッチサイズのトレーニングにはメモリが多い GPU インスタンスを使用することをお勧めします。ただし、推論には CPU (C4 など) と GPU (P2 や P3 など) の両方のインスタンスを使用できます。分散型トレーニングでは複数 GPU および複数マシン設定でアルゴリズムを実行することもできます。

P2 と P3 の両方のインスタンスがイメージ分類アルゴリズムでサポートされています。

イメージ分類サンプルノートブック

を使用するサンプルノートブックの場合 SageMaker caltech-256 データセットでモデルをトレーニングしてからデプロイして推論を実行するイメージ分類アルゴリズムについては、エンドツーエンドのマルチクラスイメージ分類の例。SageMaker でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「Amazon の使用 SageMaker ノートブックインスタンス」を参照してください。ノートブックインスタンスを作成して開いたら、SageMaker 例タブをクリックすると、すべてのリストが表示されます。 SageMaker サンプル。イメージ分類サンプルノートブックは、[Introduction to Amazon algorithm (Amazon アルゴリズムの概要)] セクションにあります。ノートブックを開くには、その [Use (使用)] タブをクリックして [Create copy (コピーを作成)] を選択します。