

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

# セマンティックセグメンテーションアルゴリズム
<a name="semantic-segmentation"></a>

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

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

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

SageMaker AI セマンティックセグメンテーションアルゴリズムは、[MXNet Gluon フレームワークと Gluon CV ツールキット](https://github.com/dmlc/gluon-cv)を使用して構築されています。深層ニューラルネットワークを学習するための 3 つの組み込みアルゴリズムを選択できます。[完全畳み込みネットワーク (FCN) アルゴリズム](https://arxiv.org/abs/1605.06211)、[ピラミッドシーン解析 (PSP) アルゴリズム](https://arxiv.org/abs/1612.01105)、または [DeepLabV3](https://arxiv.org/abs/1706.05587) を使用することができます。

これらの 3 つのアルゴリズムには、それぞれ 2 つの異なるコンポーネントがあります。
+ バックボーン (またはエンコーダー) - 信頼性の高い特徴アクティベーションマップを作成するネットワーク。****
+ デコーダー - エンコードされたアクティベーションマップからセグメンテーションマスクを構築するネットワーク。**

FCN、PSP、および DeepLabV3 アルゴリズム用のバックボーン ([ResNet50 または ResNet101](https://arxiv.org/abs/1512.03385)) も選択できます。これらのバックボーンには、以前 [ImageNet](http://www.image-net.org/) 分類タスクでトレーニングされた事前トレーニング済みの成果物が含まれています。セグメンテーションのためにこれらのバックボーンを微調整するには、独自のデータを使用します。また、これらのネットワークを初期化し、独自のデータのみを使用して最初からトレーニングすることもできます。デコーダーは事前トレーニングされていません。

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

**Topics**
+ [セマンティックセグメンテーションサンプルノートブック](#semantic-segmentation-sample-notebooks)
+ [セマンティックセグメンテーションアルゴリズムの入出力インターフェイス](#semantic-segmentation-inputoutput)
+ [セマンティックセグメンテーションアルゴリズムの EC2 インスタンスに関する推奨事項](#semantic-segmentation-instances)
+ [セマンティックセグメンテーションハイパーパラメータ](segmentation-hyperparameters.md)
+ [セマンティックセグメンテーションモデルの調整](semantic-segmentation-tuning.md)

## セマンティックセグメンテーションサンプルノートブック
<a name="semantic-segmentation-sample-notebooks"></a>

SageMaker AI セマンティックセグメンテーションアルゴリズムを使用してモデルをトレーニングし、それをデプロイして推論を実行するサンプル Jupyter ノートブックについては、「[Semantic Segmentation Example](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/semantic_segmentation_pascalvoc/semantic_segmentation_pascalvoc.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。

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

## セマンティックセグメンテーションアルゴリズムの入出力インターフェイス
<a name="semantic-segmentation-inputoutput"></a>

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

### トレーニングの仕組み
<a name="semantic-segmentation-inputoutput-training"></a>

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

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

```
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 ラベルイメージがあります。この命名規則は、トレーニング中にアルゴリズムがラベルをそれに対応するイメージに関連付けるのに役立ちます。`train`、`train_annotation`、`validation`、および `validation_annotation` チャネルは必須です。注釈は単一チャネルの PNG イメージです。この形式は、アルゴリズムが注釈イメージを単一チャネルの 8 ビット符号なし整数として読み取る際に、イメージ内のメタデータ (モード) が役立つ場合に有効です。モードのサポートの詳細については、[Python Image Library のドキュメント](https://pillow.readthedocs.io/en/stable/handbook/concepts.html#modes)を参照してください。8 ビットピクセルのトゥルーカラー `P` モードを使用することをお勧めします。

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

```
{
  "scale": "1"
}
```

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

```
{
  "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 (デフォルト) を想定します。

### 拡張マニフェスト形式によるトレーニング
<a name="semantic-segmentation-inputoutput-training-augmented-manifest"></a>

拡張マニフェスト形式を使用すると、RecordIO ファイルを作成しなくても、イメージファイルを使用してパイプモードでトレーニングを行うことができます。拡張マニフェストファイルにはデータオブジェクトが含まれているため、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで説明するとおり、[JSON Lines](http://jsonlines.org/) 形式にする必要があります。マニフェストの各行は、イメージの Amazon S3 URI と注釈イメージの URI を含むエントリです。

マニフェストファイル内の各 JSON オブジェクトには `source-ref` キーを含める必要があります。`source-ref` キーには、イメージの Amazon S3 URI の値を含める必要があります。ラベルは、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストで指定されている `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", }}
```

拡張マニフェストファイルの詳細については、[トレーニングジョブの拡張マニフェストファイル](augmented-manifest.md)を参照してください。

### 段階的トレーニング
<a name="semantic-segmentation-inputoutput-incremental-training"></a>

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

独自のトレーニング済みモデルを使用するには、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) リクエストの `InputDataConfig` で `ChannelName` を「モデル」として指定します。モデルチャネルの `ContentType` を `application/x-sagemaker-model` に設定します。ネットワークアーキテクチャーを定義する `backbone`、`algorithm`、`crop_size`、および `num_classes` 入力パラメータは、新しいモデルとモデルチャネルにアップロードする事前トレーニング済みモデルの入力ハイパーパラメータで一貫して指定する必要があります。事前トレーニング済みのモデルファイルには、SageMaker AI 出力からの圧縮 (.tar.gz) アーティファクトを使用できます。入力データには、イメージ形式のみ使用できます。段階的トレーニングの詳細とその使用方法については、[Amazon SageMaker AI の段階的トレーニングを使用する](incremental-training.md)を参照してください。

### 推論を生成する
<a name="semantic-segmentation-inputoutput-inference"></a>

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

## セマンティックセグメンテーションアルゴリズムの EC2 インスタンスに関する推奨事項
<a name="semantic-segmentation-instances"></a>

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

推論には、CPU インスタンス (C5、M5 など) と GPU インスタンス (P3、G4dn など) のいずれか、またはその両方を使用できます。推論のために CPU、GPU、メモリ、およびネットワーク容量のさまざまな組み合わせを提供するインスタンスタイプについては、「[Amazon SageMaker AI ML Instance Types](https://aws.amazon.com/sagemaker/pricing/instance-types/)」を参照してください。