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

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

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

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

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

- SageMaker セマンティックセグメンテーションアルゴリズムはMXNet Gluon フレームワークと Gluon CV ツールキット。は深層ニューラルネットワークをトレーニングする 3 つの組み込みアルゴリズムを選択肢として提供します。を使用できます。完全畳み込みネットワーク (FCN) アルゴリズム,ピラミッドシーン解析 (PSP) アルゴリズム、またはDeepLabV3

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

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

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

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

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

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

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

すべてのリストを表示するには 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 イメージであることが想定されています。データセットには、注釈マッピングの確立方法を説明するラベルマップも含まれている可能性があります。そうでない場合、アルゴリズムはデフォルトを使用します。拡張マニフェスト画像形式もサポートしています(application/x-image)は、Amazon S3 から直接パイプ入力モードでトレーニングできます。推論の場合、エンドポイントは 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 ファイルを作成しなくても、イメージファイルを使用してパイプモードでトレーニングを行うことができます。拡張マニフェストファイルにはデータオブジェクトが含まれており、次の場所にあるはずですJSON linesに説明されているように、フォーマットCreateTrainingJobをリクエストします。マニフェストの各行は、イメージの 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 出力。入力データには、イメージ形式のみ使用できます。段階的トレーニングの詳細とその使用方法については、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、メモリ、ネットワークキャパシティのさまざまな組み合わせを提供するインスタンスタイプについては、アマゾン SageMaker ML インスタンスタイプ