セマンティックセグメンテーションアルゴリズム - Amazon SageMaker

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

セマンティックセグメンテーションアルゴリズム

SageMaker セマンティックセグメンテーションアルゴリズムは、コンピュータビジョンアプリケーションの開発にピクセルレベルのきめ細かなアプローチを提供します。イメージ内のすべてのピクセルに、事前定義された一連のクラスのクラスラベルを付けます。タグ付けはシーンを理解するための基本であり、自動運転車や医療用画像診断、ロボットセンシングなど、増加するコンピュータビジョンアプリケーションにとって不可欠です。

比較のために、 SageMaker 画像分類 - MXNet は画像全体のみを分析し、複数の出力カテゴリのいずれかに分類する教師あり学習アルゴリズムです。オブジェクト検出 - MXNetは、イメージ内のオブジェクトのすべてのインスタンスを検出および分類する教師あり学習アルゴリズムです。このアルゴリズムは、イメージ内の各オブジェクトの位置とスケールを長方形の境界ボックスで示します。

セマンティックセグメンテーションアルゴリズムは、イメージ内のすべてのピクセルを分類するため、イメージに含まれるオブジェクトの形状に関する情報も提供します。セグメンテーション出力は、グレースケールイメージ (セグメンテーションマスクと呼ばれる) として表されます。セグメンテーションマスクは、入力イメージと同じ形状のグレースケールイメージです。

SageMaker セマンティックセグメンテーションアルゴリズムは、MXNet Gluon フレームワークと Gluon CV ツールキットを使用して構築されています。深層ニューラルネットワークを学習するための 3 つの組み込みアルゴリズムを選択できます。フル畳み込みネットワーク (FCN) アルゴリズム Pyramid シーン解析 (PSP) アルゴリズム 、または DeepLabV3 を使用できます。

これらの 3 つのアルゴリズムには、それぞれ 2 つの異なるコンポーネントがあります。

  • バックボーン (またはエンコーダー) - 信頼性の高い特徴アクティベーションマップを作成するネットワーク。

  • デコーダー - エンコードされたアクティベーションマップからセグメンテーションマスクを構築するネットワーク。

また、FCN、PSP、および DeepLabV3 アルゴリズムには、ResNet50 または ResNet101 のバックボーンを選択できます。これらのバックボーンには、最初にImageNet分類タスクでトレーニングされた事前トレーニング済みアーティファクトが含まれます。セグメンテーションのためにこれらのバックボーンを微調整するには、独自のデータを使用します。また、これらのネットワークを初期化し、独自のデータのみを使用して最初からトレーニングすることもできます。デコーダーは事前トレーニングされていません。

推論用にトレーニング済みモデルをデプロイするには、 SageMaker ホスティングサービスを使用します。推論中に、PNG イメージとして、または各ピクセルのクラスごとに一連の確率として、セグメンテーションマスクをリクエストできます。これらのマスクは、追加のダウンストリームイメージ処理やその他のアプリケーションを含む、大規模なパイプラインの一部として使用できます。

セマンティックセグメンテーションサンプルノートブック

SageMaker セマンティックセグメンテーションアルゴリズムを使用してモデルをトレーニングし、推論を実行するようにデプロイするサンプル Jupyter Notebook については、セマンティックセグメンテーションの例を参照してください。でサンプルを実行するために使用できる Jupyter Notebook インスタンスを作成してアクセスする方法については SageMaker、「」を参照してくださいAmazon SageMaker Notebook インスタンス

すべての SageMaker サンプルのリストを表示するには、ノートブックインスタンスを作成して開き、SageMaker 「例」タブを選択します。セマンティックセグメンテーションサンプルノートブックは、[Introduction to Amazon algorithm (Amazon アルゴリズムの概要)] にあります。ノートブックを開くには、その [Use (使用)] タブを選択し、[Create copy (コピーを作成)] を選択します。

セマンティックセグメンテーションアルゴリズムの入出力インターフェイス

SageMaker セマンティックセグメンテーションでは、お客様のトレーニングデータセットが Amazon Simple Storage Service (Amazon S3) 上にあることを想定しています。一度トレーニングされると、Amazon S3 上に結果のモデルアーティファクトが生成されます。 SageMaker セマンティックセグメンテーションの入力インターフェイス形式は、最も標準化されたセマンティックセグメンテーションベンチマークデータセットの入力インターフェイス形式と似ています。Amazon S3 のデータセットは trainvalidation の 2 つのチャネルに提供されることが想定されており、4 つのディレクトリ (イメージ用 2 つと注釈用 2 つ) が使用されます。注釈は、圧縮されていない PNG イメージであることが想定されています。データセットには、注釈マッピングの確立方法を説明するラベルマップも含まれている可能性があります。そうでない場合、アルゴリズムはデフォルトを使用します。このアルゴリズムはさらに、Amazon S3 から直接パイプ入力モードでトレーニングするための拡張マニフェストイメージ形式 (application/x-image) もサポートしています。推論の場合、エンドポイントは image/jpeg コンテンツタイプのイメージを受け入れます。

トレーニングの仕組み

トレーニングデータは、traintrain_annotationvalidation、および validation_annotation の 4 つのディレクトリに分割されます。これらの各ディレクトリ用のチャネルが 1 つずつあります。データセットには、train_annotation チャネルと validation_annotation チャネル用に 1 つずつ label_map.json ファイルが含まれていることも想定されています。これらの JSON ファイルを指定しない場合、 はデフォルトのセットラベルマップ SageMaker を提供します。

これらのファイルを指定するデータセットは、次の例のようになります。

s3://bucket_name | |- train | | - 0000.jpg | - coffee.jpg |- validation | | - 00a0.jpg | - bananna.jpg |- train_annotation | | - 0000.png | - coffee.png |- validation_annotation | | - 00a0.png | - bananna.png |- label_map | - train_label_map.json | - validation_label_map.json

train ディレクトリと validation ディレクトリ内のすべての JPG イメージには、train_annotation ディレクトリと validation_annotation ディレクトリ内に同じ名前の対応する PNG ラベルイメージがあります。この命名規則は、トレーニング中にアルゴリズムがラベルをそれに対応するイメージに関連付けるのに役立ちます。traintrain_annotationvalidation、および validation_annotation チャネルは必須です。注釈は単一チャネルの PNG イメージです。この形式は、アルゴリズムが注釈イメージを単一チャネルの 8 ビット符号なし整数として読み取る際に、イメージ内のメタデータ (モード) が役立つ場合に有効です。モードのサポートの詳細については、Python Image Library のドキュメントを参照してください。8 ビットピクセルのトゥルーカラー P モードを使用することをお勧めします。

モードを使用する場合、エンコードされるイメージは単純な 8 ビット整数です。このマッピングからラベルのマップを取得するために、アルゴリズムはチャネルごとに 1 つのマッピングファイル (ラベルマップと呼ばれる) を使用します。ラベルマップは、イメージ内の値を実際のラベルインデックスにマッピングするために使用されます。デフォルトのラベルマップ (指定していない場合はデフォルトで提供されない) では、注釈マトリックス (イメージ) のピクセル値がラベルに直接インデックスを付けます。これらのイメージは、グレースケール PNG ファイルまたは 8 ビットインデックス付き PNG ファイルです。スケールされていないデフォルトのケースのラベルマップファイルは次のとおりです。

{ "scale": "1" }

表示用にコントラストを追加する目的で、一部の注釈ソフトウェアはラベルイメージを一定量だけスケールします。これをサポートするために、 SageMaker セマンティックセグメンテーションアルゴリズムは、値を実際のラベル値にスケールダウンする再スケーリングオプションを提供します。スケールダウンしても適切な整数値に変換されない場合、アルゴリズムはデフォルトでスケール値以下の最大の整数値を設定します。次のコードは、スケール値を設定してラベル値を再スケールする方法を示しています。

{ "scale": "3" }

次の例は、入力注釈イメージの encoded_label 値が、トレーニングで使用される mapped_label 値にマッピングされたときに、この "scale" 値を使用して再スケーリングされる方法を示しています。入力注釈イメージのラベル値は、スケールは 3 で 0、3、6 であるため、トレーニング用に 0、1、2 にマッピングされます。

encoded_label = [0, 3, 6] mapped_label = [0, 1, 2]

場合によっては、クラスごとに特定のカラーマッピングを指定する必要があります。次の label_map ファイルの例に示すように、ラベルマッピングでマップオプションを使用します。

{ "map": { "0": 5, "1": 0, "2": 2 } }

この例のラベルマッピングは次のとおりです。

encoded_label = [0, 5, 2] mapped_label = [1, 0, 2]

ラベルマッピングにより、さまざまな注釈システムと注釈ソフトウェアを使用して、前処理をそれほど行わずにデータを取得できます。チャネルごとに 1 つのラベルマップを指定できます。label_map チャネルのラベルマップのファイルは、4 つのディレクトリ構造の命名規則に従う必要があります。ラベルマップを指定しなかった場合、アルゴリズムはスケール 1 (デフォルト) を想定します。

拡張マニフェスト形式によるトレーニング

拡張マニフェスト形式を使用すると、RecordIO ファイルを作成しなくても、イメージファイルを使用してパイプモードでトレーニングを行うことができます。拡張マニフェストファイルにはデータオブジェクトが含まれているため、CreateTrainingJob リクエストで説明するとおり、JSON Lines 形式にする必要があります。マニフェストの各行は、イメージの Amazon S3 URI と注釈イメージの URI を含むエントリです。

マニフェストファイル内の各 JSON オブジェクトには source-ref キーを含める必要があります。source-ref キーには、イメージの Amazon S3 URI の値を含める必要があります。ラベルは、CreateTrainingJob リクエストで指定されている AttributeNames パラメータ値に基づいて提供されます。metadata タグの下に追加のメタデータを含めることもできますが、これらはアルゴリズムによって無視されます。次の例では、AttributeNames は画像および注釈参照 ["source-ref", "city-streets-ref"] のリストに含まれます。これらの名前は -ref で追加する必要があります。拡張マニフェストでセマンティックセグメンテーションアルゴリズムを使用するときは、RecordWrapperType パラメータの値は "RecordIO"ContentType パラメータの値は application/x-recordio である必要があります。

{"source-ref": "S3 bucket location", "city-streets-ref": "S3 bucket location", "city-streets-metadata": {"job-name": "label-city-streets", }}

拡張マニフェストファイルの詳細については、拡張マニフェストファイルを使用してトレーニングジョブにデータセットメタデータを提供するを参照してください。

段階的トレーニング

SageMaker では、以前にトレーニングしたモデルを使用して、新しいモデルのトレーニングをシードすることもできます。この段階的トレーニングでは、同じモデルまたは類似のデータを使用して新しいモデルをトレーニングする際のトレーニング時間が短縮されます。現在、段階的トレーニングは、組み込みの SageMaker セマンティックセグメンテーションでトレーニングされたモデルでのみサポートされています。

独自のトレーニング済みモデルを使用するには、CreateTrainingJob リクエストの InputDataConfigChannelName を「モデル」として指定します。モデルチャネルの ContentTypeapplication/x-sagemaker-model に設定します。ネットワークアーキテクチャーを定義する backbonealgorithmcrop_size、および num_classes 入力パラメータは、新しいモデルとモデルチャネルにアップロードする事前トレーニング済みモデルの入力ハイパーパラメータで一貫して指定する必要があります。事前トレーニング済みモデルファイルでは、 SageMaker 出力の圧縮 (.tar.gz) アーティファクトを使用できます。入力データには、イメージ形式のみ使用できます。段階的トレーニングの詳細とその使用方法については、Amazon で増分トレーニングを使用する SageMakerを参照してください。

推論を生成する

エンドポイントにデプロイされているトレーニング済みモデルに対してクエリを実行するには、イメージと、必要な出力のタイプを示す AcceptType を指定する必要があります。エンドポイントは、image/jpeg コンテンツタイプの JPEG イメージを使用します。AcceptType として image/png をリクエストした場合、アルゴリズムはラベルそのものと同じ形式のセグメンテーションマスクを持つ PNG ファイルを出力します。accept タイプとして application/x-recordio-protobuf をリクエストした場合、アルゴリズムは recordio-protobuf 形式でエンコードされたクラスの確率を返します。後者の形式は、3 次元がクラスの数と同じサイズである 3D テンソルを出力します。このコンポーネントは、各ピクセルの各クラスラベルの確率を表します。

セマンティックセグメンテーションアルゴリズムの EC2 インスタンスに関する推奨事項

SageMaker セマンティックセグメンテーションアルゴリズムは、トレーニング用の GPU インスタンスのみをサポートしており、バッチサイズが大きいトレーニングには、より多くのメモリを備えた GPU インスタンスを使用することをお勧めします。このアルゴリズムは、単一マシン構成の P2、P3、G4dn、または G5 インスタンスを使用してトレーニングできます。

推論には、CPU インスタンス (C5、M5 など) と GPU インスタンス (P3、G4dn など) のいずれか、またはその両方を使用できます。推論のために CPU、GPU、メモリ、ネットワーク容量のさまざまな組み合わせを提供するインスタンスタイプについては、「Amazon SageMaker ML インスタンスタイプ」を参照してください。