Skip To Content

ArcGIS Pro のディープ ラーニング

Image Analyst ライセンスで利用できます。

ArcGIS Pro では、統計的分類法または機械学習分類法によって、リモート センシング画像を分類することができます。ディープ ラーニングとは機械学習の一種であり、複数レイヤーの非線形処理によって、モデルで説明されるフィーチャの識別やパターン認識を行います。ディープ ラーニング モデルを ArcGIS Pro に統合し、オブジェクト検出と画像分類を行えます。対象となるフィーチャまたはオブジェクトのトレーニング サンプルは、ArcGIS Pro の分類およびディープ ラーニング ツールで生成されます。これらのトレーニング サンプルは、データ サイエンティストやイメージ サイエンティストがサードパーティのディープ ラーニング フレームワークを使用してモデルをトレーニングする際に使用されます。モデル定義ファイルは ArcGIS Pro の推論ジオプロセシングを実行するために使用され、これによって特定のフィーチャを抽出するか、画像のピクセルを分類します。モデル定義ファイルはジオプロセシング ツールへの入力として複数回使用することができるため、モデルをトレーニングした後に、複数の場所や期間にまたがる複数の画像も簡単に評価できます。

ディープ ラーニング ワークフロー

ワークフロー アイテム 1

トレーニング サンプル マネージャーでトレーニング サンプルを作成し、ArcGIS Pro[ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data for Deep Learning)] ツールを使用してデータ サイエンティスト向けのデータを準備します。

ワークフロー アイテム 2

データ サイエンティストが、トレーニング データを使用し、サードパーティのディープ ラーニング フレームワークを使用するモデルを開発します。

ワークフロー アイテム 3

データ サイエンティストがディープ ラーニング パッケージを提供します。これは、モデル定義ファイルとトレーニング済みのモデル、および Python スクリプトで構成されるもので、ArcGIS Pro の処理および解析環境に戻されます。

ワークフロー アイテム 4

[ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールか [ディープ ラーニングを使用したピクセルの分類 (Classify Pixels Using Deep Learning)] を実行し、出力を生成します。

ワークフロー アイテム 5

ArcGIS API for Python を利用し、ディープ ラーニング フレームワークでモデルのトレーニングを行うこともできます。

特長と機能

ArcGIS Pro のディープ ラーニング ツールでは、標準的な機械学習分類法以上のものを使用できます。

  • 畳み込みニューラル ネットワークを使用して画像分類を行います。
  • ディープ ラーニング モデルを使用し、画像ピクセルの分類や、航空機、樹木、車両、水域、油田などのオブジェクトを検出します。
  • Keras、TensorFlow、CNTK などの外部のディープ ラーニング フレームワークを統合します。
  • モデル定義ファイルを複数回にわたって使用し、経時的な変化を検出したり、複数の対象地域のオブジェクトを検出したりします。
  • ポリゴン フィーチャクラスを生成して検出されたオブジェクトを表示し、追加の解析やワークフローで使用します。

ディープ ラーニングを始める

トレーニング サンプルの作成とエクスポートは、画像分類ワークフローに関する専門的な知識が必要となるため、経験豊富なイメージ アナリストが ArcGIS Pro 内で行います。ディープ ラーニング モデルは、データ サイエンティストやディープ ラーニング モデルのトレーニングの実績がある人物によって、ArcGIS Pro の外部でディープ ラーニング フレームワークを使用してトレーニングされます。モデルのトレーニングが終了すると、Esri モデル定義ファイル (*.emd) を使用してジオプロセシング ツールを実行し、ArcGIS Pro のフィーチャの検出や分類を行えるようになります。場合によっては、ディープ ラーニング モデルと ArcGIS Pro 画像分類の経験がある 1 人のアナリストが、3 つのステップをすべて完了することもあります。

ArcGIS Pro Python 環境に適切なディープ ラーニング フレームワークの Python API (TensorFlow、CNTK、Keras) をインストールする必要があります。インストールしない場合、Esri モデル定義ファイルをツールに追加するとエラーが発生します。Esri モデル定義ファイルの作成者から適切なフレームワーク情報を入手します。

インストールのヘルプについてはフレームワークのマニュアルをご参照ください。

Python 環境の変更またはクローン化については、Python Package Manager をご参照ください。

  1. トレーニング サンプルを作成し、エクスポートします。
    1. トレーニング サンプル マネージャーを使用し、分類スキーマを選択または作成します。
    2. クラス カテゴリか対象フィーチャのトレーニング サイト サンプルを作成します。トレーニング サンプル ファイルを保存します。
    3. [ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data for Deep Learning)] ジオプロセシング ツールを実行し、ソース画像とトレーニング サンプルをディープ ラーニング トレーニング データに変換します。ソース画像には画像サービス、モザイク データセット、またはラスター データセットを使用できます。ツールにより、ディープ ラーニング モデルのトレーニングに使用されるトレーニング サイトを含む画像チップやサンプルが出力されます。また、*.emd のテンプレート ファイルも追加で出力されます。このファイルはデータ サイエンティストが設定します。
  2. ディープ ラーニング モデルをトレーニングします。
    1. ArcGIS Pro で生成される画像チップを使用し、TensorFlow、CNTK、Keras などのディープ ラーニング フレームワークでモデルをトレーニングできます。
    2. *.emd ファイルの名前をディープ ラーニング フレームワーク、モデルの構成、その他の任意のオプション プロパティで更新します。*.emd ファイルの必須パラメーターおよび任意のパラメーターの詳細については、「Esri モデル定義ファイル」および「ディープ ラーニングを使用したオブジェクトの検出」をご参照ください。
  3. ArcGIS Pro の推論ジオプロセシングを実行します。
    1. [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] または [ディープ ラーニングを使用したピクセルの分類 (Classify Pixels Using Deep Learning)] ジオプロセシング ツールを使用し、画像を処理します。トレーニングされたモデルに、追加の変数 (パディング、感度を微調整するための信頼しきい値など) を含むカスタム Python ラスター関数が組み込まれている場合、これらの変数はジオプロセシング ツールのダイアログ ボックスに表示され、ユーザーによる入力を行えるようになっています。文字列や数値などのデータ型は、Python ラスター関数で指定されます。追加の推論パラメーターは 2 つまでに限定することをお勧めします。

      [入力モデル] には、Esri モデル定義の JSON ファイル (.emd) または JSON 文字列を指定することができます。JSON 文字列は、このツールがサーバーで使用されている場合に便利で、.emd ファイルをアップロードする代わりに JSON 文字列を貼り付けることができます。

      [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールを実行すると、モデルが検出したオブジェクトを示すフィーチャクラスが出力されます。また、[ディープ ラーニングをしようしたピクセルの分類 (Classify Pixels Using Deep Learning)] ツールでは、分類されたラスターが出力されます。
      備考:

      推論ツールを実行するには、ディープ ラーニング フレームワークは ArcGIS Pro がインストールされているコンピューターにインストールする必要があります。推論のロジックはフレームワークの Python API に組み込まれており、計算に必要だからです。

Esri モデル定義ファイル

*.emd ファイルは、トレーニングされたディープ ラーニング モデルを説明する JSON ファイルです。これには、推論ツールの実行に必要なモデル定義パラメーターが含まれており、モデルをトレーニングしたデータ サイエンティストが手を加えます。次のテーブルに示すように、必須のパラメーターと任意のパラメーターがあります。

*.emd ファイルの作成と検証が完了すると、推論において複数回使用できるようになります。ただし、入力画像が元のモデル入力と同じセンサーから取得されること、そして検出されるクラスやオブジェクトが同じである必要があります。たとえば、Sentinel-2 衛星画像を使用して油田を検出するモデルで定義された *.emd ファイルは、Sentinel-2 画像を使用する複数の対象地域および日付にわたって油田を検出するために使用できます。

モデル定義ファイルのパラメーター説明

フレームワーク

モデルのトレーニングに使用されるディープ ラーニング フレームワークの名前。

3 つのディープ ラーニング フレームワークがサポートされています。

  • TensorFlow
  • CNTK
  • Keras

InferenceFunction

ModelConfiguration

モデル構成の名前。

モデル構成は、モデルの入力と出力、推論ロジック、モデルの入力と出力に関する仮説を定義します。標準的な入力および出力構成、および推論ロジックを定義する、既存のオープン ソースのディープ ラーニング ワークフローもあります。ArcGIS はあらかじめ定義された、次のような構成をサポートしています。

TensorFlow

CNTK

事前定義された構成のいずれかを使用する場合、*.emd ファイルに構成の名前を入力します。カスタム構成を使用してディープ ラーニング モデルをトレーニングした場合、*.emd ファイルまたはカスタム Python ファイルで入力と出力を完全に説明する必要があります。

ModelFile

トレーニングしたディープ ラーニング モデル ファイルへのパス。モデル フレームワーク ファイル形式の多くはプロトコル バッファーに基づいているため、トレーニングされたディープ ラーニング モデルは *.pb ファイルです。ただし、他のファイル形式もサポートされています。

ModelType

モデルのタイプ。タイプは次のいずれかです。

  • ImageClassification - ピクセルの分類
  • ObjectDetection - オブジェクトまたはフィーチャの検出

InferenceFunction

(オプション)

推論関数のパス。

推論関数はトレーニングされたモデル データ ファイルを理解し、推論ロジックを提供します。ArcGIS Pro のディープ ラーニング ジオプロセシング ツールでは、4 つの推論関数がサポートされています。

  • TensorFlow 用オブジェクトの検出 (Detect Objects)
  • Tensor Flow 用ピクセルの分類 (Classify Pixels)
  • CNTK 用オブジェクトの検出 (Detect Objects)
  • CNTK 用ピクセルの分類 (Classify Pixels)
  • Keras 用オブジェクトの検出 (Detect Objects)
  • Keras 用ピクセルの分類 (Classify Pixels)
上記の推論関数のいずれかを使用した場合、*.emd ファイルで指定する必要はありません。サポートされていないディープ ラーニング モデル構成でモデルをトレーニングした場合、または特別な推論ロジックが必要である場合は、カスタム推論関数 (Python モジュール) とトレーニング済みモデルが必要になります。その場合は、[InferenceFunction] を Python モジュール パスに設定します。推論 Python モジュール ファイルは、ArcGIS Pro によってアクセス可能な場所であればどこにでも置くことができます。

ImageHeight

(オプション)

分類または処理される画像の行数。

ImageWidth

(オプション)

分類または処理される画像の列数。

ExtractBands

(オプション)

入力画像から抽出するバンド インデックスまたはバンド名。

クラス

(オプション)

出力クラス カテゴリまたはオブジェクトに関する情報。

次に、標準的なモデル構成を使用するモデル定義ファイル (*.emd) の例を示します。

{
    "Framework": "TensorFlow",
    "ModelConfiguration": "ObjectDetectionAPI",
    "ModelFile":"C:\\ModelFolder\\ObjectDetection\\tree_detection.pb",
    "ModelType":"ObjectionDetection",
    "ImageHeight":850,
    "ImageWidth":850,
    "ExtractBands":[0,1,2],
    "Classes" : [
      {
        "Value": 0,
        "Name": "Tree",
        "Color": [0, 255, 0]
      }
    ]
}

関連トピック