オブジェクトの検出

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

入力画像のオブジェクトを検出するには、ディープ ラーニングを使用したオブジェクトの検出ツールを使用します。画像内のオブジェクトまたはフィーチャが線で囲まれ、その位置を特定できます。 下の画像は、ArcGIS でディープ ラーニング ツールを使用してヤシの木を検出する場合の例です。

ヤシの木の検出

ディープ ラーニングを使用した通常のオブジェクト検出ワークフローは、主に以下の 3 つのステップで構成されます。

  1. トレーニング サンプルを作成し、エクスポートします。 ディープ ラーニングのオブジェクトのラベル付けウィンドウを使用してトレーニング サンプルを作成し、[ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data For Deep Learning)] ツールを使用して、サンプルをディープ ラーニング トレーニング データに変換します。
  2. ディープ ラーニング モデルをトレーニングします。 [ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールで、前のステップで作成したトレーニング サンプルを使用してモデルをトレーニングします。
  3. 推論の実行 - [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールを使用します。 ステップ 2 で作成したモデルを使用します。

オブジェクト検出ワークフローを完了したら、品質管理解析を行って結果を確認することをお勧めします。 結果に納得できない場合は、トレーニング サンプルを追加してモデルを改善し、ワークフローを再度実施できます。 結果を確認するため、[属性] ウィンドウを使用します。 結果の精度を検証するには、[オブジェクト検出精度の計算 (Compute Accuracy For Object Detection)] ツールを使用します。

その他の例、サポート対象のメタデータ形式、モデル タイプ アーキテクチャについては、「ディープ ラーニング モデルのアーキテクチャ」をご参照ください。

トレーニング サンプルを作成し、エクスポートする

トレーニング スキーマとトレーニング サンプルを作成し、トレーニング データをエクスポートします。

ラスター データセットまたはフィーチャクラスに既存のトレーニング サンプルがある場合は、[ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data For Deep Learning)] ツールを使用して、以下のディープ ラーニング モデルのトレーニング セクションに進むことができます。

  1. トレーニング スキーマを作成します。
    1. トレーニング サンプルの生成に使用する画像をマップに追加します。
    2. [コンテンツ] ウィンドウで、追加した画像を選択します。
    3. [衛星画像] タブをクリックします。
    4. [ディープ ラーニング ツール] をクリックし、[ディープ ラーニングに使用するラベル オブジェクト] をクリックします。

      [画像分類] ウィンドウに、空白のスキーマが表示されます。

    5. [画像分類] ウィンドウで、[新しいスキーマ] を右クリックし、[プロパティの編集] をクリックします。

      新しいスキーマの編集

    6. スキーマに名前を付けます。

      スキーマ名を編集する

    7. [保存] をクリックします。

    スキーマの名前が [画像分類] ウィンドウで変更され、このスキーマにクラスを追加することができます。

  2. スキーマに新しいクラスを追加します。
    1. 作成したスキーマを右クリックして、[新しいクラスの追加] をクリックします。

      新しいクラスの追加オプション

    2. クラスに名前を付けます。

      新しいクラス名

    3. クラスの値を指定します。

      値を 0 にすることはできません。

    4. 必要に応じて、クラスの色を選択します。
    5. [OK] をクリックします。

      [画像分類] ウィンドウで、クラスがスキーマに追加されます。

    6. 必要に応じて、ステップ 2a 〜 2e を繰り返し、クラスをさらに追加します。
  3. トレーニング サンプルを作成します。
    1. 円などの描画ツールを選択し、このツールを使用してオブジェクトの周囲に境界を描画します。

      円ツール

      ヤシの木の例
      このヤシの木のトレーニング サンプルは、[円] ツールを使用して作成しました。

      オブジェクトが不明な場合は、オブジェクトを含めないでください。 境界は重複させることができます。

    2. 描画ツールを使用して、より多くのフィーチャを選択します。

      最終モデルでは指定したオブジェクトのサイズが考慮されるため、さまざまなサイズのオブジェクトを選択できます。

      トレーニング サンプル
      これらのトレーニング サンプルはさまざまなエリアで作成され、さまざまなサンプルを表示するために異なるサイズが含まれています。

  4. トレーニング サンプルを作成したら、[画像分類] ウィンドウの [保存] をクリックします。

    保存ボタン

    1. [現在のトレーニング サンプルの保存] ウィンドウで、ジオデータベースを参照します。
    2. フィーチャクラスの名前を指定し、[保存] をクリックします。

    モデルをトレーニングする前に、トレーニング サンプルを画像チップとしてエクスポートする必要があります。 画像チップは、検出可能なオブジェクトを 1 つ以上含む小さな画像です。

  5. [画像の分類] ウィンドウで、[トレーニング データのエクスポート] タブをクリックし、次の手順を実行します。
    1. [出力フォルダー] の値を指定します。

      これが、出力画像チップとメタデータを格納するフォルダーのパスと名前になります。

    2. 必要に応じて、[マスク ポリゴン] の値を指定します。

      これが、画像チップを作成できる領域を描画するポリゴン フィーチャクラスになります。 このポリゴンに完全に含まれる画像チップのみが作成されます。

    3. 必要に応じて、チップの [画像形式] の値を選択します。

      サポートされている形式は TIFF、PNG、JPEG、および MRF です。

    4. 必要に応じて、[タイル サイズ X][タイル サイズ Y] の値を指定します。

      これらが、画像チップの X ディメンションと Y ディメンションになります。 デフォルト値を使用すると、通常は良好な結果が得られます。 一般的に、両方のディメンションに同じサイズが指定されます。

    5. 必要に応じて、[ストライド X][ストライド Y] の値を指定します。

      これが、次の画像チップを作成する際に X 方向および Y 方向に移動する距離になります。 ストライドがタイル サイズと等しい場合、オーバーラップは発生しません。 ストライドがタイル サイズの半分と等しい場合は、50% のオーバーラップが発生します。

    6. 必要に応じて、[回転角度] の値を指定します。

      画像チップは、追加の画像チップを作成するために、指定した角度で回転されます。 画像チップが完全に回転するまで、各角度に対して追加の画像チップが作成されます。 たとえば、回転角度を 45 度に指定すると、8 つの画像チップが作成されます。 これらの画像チップは、45 度、90 度、135 度、180 度、225 度、270 度、および 315 度に対して作成されます。

    7. 必要に応じて、[参照系] の値を選択します。

      これが、入力画像を解釈するために使用する参照系になります。 オプションは [マップ空間] または [ピクセル空間] です。 マップ空間はマップベースの座標系を使用し、入力ラスターに空間参照が定義されている場合はデフォルトです。 ピクセル空間は、回転または変形のない画像空間座標系を使用します。 [ピクセル空間] オプションは、入力画像が方向付き画像または傾め画像の場合に推奨されます。 指定する参照系は、ディープ ラーニング モデルをトレーニングするために使用する参照系と一致する必要があります。

    8. 必要に応じて、[フィーチャなしのタイルを出力] チェックボックスをオンにします。

      このオプションをオンにすると、トレーニング サンプルを取得しないものも含め、すべての画像チップをエクスポートします。 このオプションをオフのままにすると、トレーニング サンプルを取得する画像チップのみをエクスポートします。 デフォルトはオフです。

    9. 必要に応じて、[メタデータ形式] の値を選択します。

      オブジェクト検出でサポートされているメタデータ形式は、ラベル付きタイル、Pascal Visual Object Class、および RCNN マスクです。

    10. [実行] をクリックして、トレーニング データをエクスポートします。

トレーニング データのエクスポート タブ

ディープ ラーニング モデルのトレーニング

[ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールは、ラベル付けされた画像チップを使用して、オブジェクトを表す各画像内のピクセルの組み合わせを判別します。 これらのトレーニング サンプルを使用して、ディープ ラーニング モデルをトレーニングします。 このツールでは、[入力トレーニング データ] パラメーターと [出力モデル] パラメーターのみが必須です。

入力トレーニング データは、[メタデータ形式] の値に基づいているため、適切な [モデル タイプ] の値がデフォルトで割り当てられます。 たとえば、エクスポート プロセスで [PASCAL Visual Object Classes] メタデータ形式を指定した場合、[モデル タイプ] の値は [シングル ショット検出器] となります。 [モデル タイプ] パラメーターのドロップダウン リストも、Pascal Visual Objects Classes メタデータ形式をサポートするモデル タイプを反映した形で更新されます。 [バッチ サイズ][モデル引数][バックボーン モデル] の各パラメーターには、[モデル タイプ] の値に基づき値が入力されます。

  1. [ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールを開きます。
  2. [入力トレーニング データ] パラメーターで、画像チップが格納されているトレーニング データ フォルダーを参照して選択します。
  3. [出力モデル] パラメーターに、トレーニング後の出力モデルを保存するフォルダーのファイル パスと名前を指定します。
  4. 必要に応じて、[最大エポック] パラメーターに値を指定します。

    エポックとは、トレーニング データセットを処理する完全な 1 サイクルをいいます。 エポックごとに、画像チップ フォルダーに保存したトレーニング データセットがニューラル ネットワークを通って前方/後方に 1 回渡されます。 一般的に、初期レビューには 20 ~ 50 エポックが使用されます。 デフォルト値は 20 です。 モデルをさらに改善できる場合は、同じツールを使用して再トレーニングできます。

  5. 必要に応じて、ドロップダウン リストで [モデル タイプ] パラメーターの値を変更します。

    モデル タイプによって、[シングル ショット検出器 (SSD)] オプションなど、モデルのトレーニングに使用されるディープ ラーニング アルゴリズムとニューラル ネットワークが決まります。 モデルに関する詳細については、「ArcGIS のディープ ラーニング モデル」をご参照ください。 ドキュメントの例、サポート対象のメタデータ、モデル アーキテクチャの詳細については、「ディープ ラーニング モデルのアーキテクチャ」をご参照ください。

  6. 必要に応じて、[モデル引数] パラメーター値を変更します。

    [モデル引数] パラメーターに、モデル定義の情報が入力されます。 これらの引数は、指定されたモデル アーキテクチャによって変わります。 ツールでサポートされているモデル引数のリストは、[モデル引数] パラメーターで使用できます。

  7. 必要に応じて、[バッチ サイズ] パラメーター値を設定します。

    このパラメーターでは、一度にトレーニングされるトレーニング サンプルの数を指定します。 バッチ サイズの値は、画像チップの数、GPU メモリ (GPU が使用されている場合)、カスタム値が使用されている場合の学習率など、さまざまな要因によって決まります。 デフォルトのバッチ サイズを使用すると、通常は良好な結果が得られます。

  8. 必要に応じて、[学習率] パラメーター値を指定します。

    値を指定しないと、トレーニング プロセス中に最適な学習率が学習曲線から抽出されます。

  9. 必要に応じて、[バックボーン モデル] パラメーター値を指定します。

    デフォルト値はモデル アーキテクチャに基づきます。 ドロップダウン リストを使用して、デフォルトのバックボーン モデルを変更できます。

  10. 必要に応じて、[事前トレーニング済みモデル] パラメーター値を指定します。

    類似したクラスを持つ事前トレーニング済みモデルは、新しいモデルに合わせて微調整することができます。 事前トレーニング済みモデルは、新しいモデルのトレーニングに使用される同じモデル タイプおよびバックボーン モデルでトレーニングされている必要があります。

  11. 必要に応じて、[検証 %] パラメーター値を変更します。

    これが、モデルの検証に使用するトレーニング サンプルの割合になります。 この値は、トレーニング サンプルの数やモデル アーキテクチャなど、さまざまな要因によって異なります。 一般的に、トレーニング データの量が少ない場合、検証には 10% 〜 20% を使用するのが適切です。 数千サンプルのような大量のトレーニング データが存在する場合、検証には 2% 〜 5% 程度の低い割合のデータを使用するのが適切です。 デフォルト値は 10 です。

  12. 必要に応じて、[モデルが改善しなくなったら停止] パラメーターをオンにします。

    オンにすると、指定した [最大エポック] 値にかかわらず、モデルの改善がなくなった時点でモデルのトレーニングを停止します。 デフォルト設定はオンです。

  13. 必要に応じて、[モデルの固定] パラメーターをオンにします。

    このパラメーターは、事前トレーニング済みモデルのバックボーン層が固定されるかどうかを指定します。これにより、ウェイトとバイアスが本来の設計どおりになります。 このパラメーターをオンにすると、バックボーン層が固定され、事前定義済みのウェイトとバイアスは [バックボーン モデル] パラメーターで変更されません。 このオプションをオフにすると、バックボーン層は固定されず、トレーニング サンプルに合わせて [バックボーン モデル] パラメーター値のウェイトとバイアスを変更できます。 この処理には時間がかかりますが、通常は優れた結果が得られます。 デフォルト設定はオンです。

  14. [実行] をクリックして、トレーニングを開始します。

下の画像は、[シングル ショット検出器 (オブジェクト検出)][モデル タイプ] パラメーターの値として指定した場合の [ディープ ラーニング モデルのトレーニング] ウィンドウを示しています。

ディープ ラーニング モデルのトレーニング ツールのパラメーター

推論の実行

推論を実行するには、トレーニングしたディープ ラーニング モデルを使用して、新しいデータを解析します。 推論は、ディープ ラーニングのトレーニング中に学習された情報を使用して、データセット内の類似のフィーチャを検出するプロセスです。 オブジェクト検出ワークフローを実施するため、[ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールを使用します。

  1. [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールを開きます。
  2. [入力ラスター] で、オブジェクトを検出したい入力ラスター データを参照して選択します。

    この入力には、モザイク データセット、イメージ サービス、画像のフォルダー、または画像の添付ファイルを含むフィーチャクラス内の単一のラスター データセットまたは複数のラスターを指定することができます。

  3. [出力検出オブジェクト] で、出力フィーチャクラスの名前を入力します。

    出力フィーチャクラスには、入力画像で検出されたオブジェクトを取り巻くジオメトリが含まれます。

  4. [モデル定義] の値を指定します (*.emd または *.dlpk)。

    これが、トレーニング出力を含むモデル ファイルになります。 これが、ディープ ラーニングのトレーニング セクションの出力になります。

  5. [引数] パラメーターに [モデル定義] パラメーターの値に基づき値が入力されます。 これらの引数は、どのモデル アーキテクチャを使用するかによって異なります。 この例では、[シングル ショット検出器] モデルが使用されるため、以下の引数に値が入力されます。 デフォルト値をそのまま使用することも、編集することもできます。

    これらの引数は、どのモデル アーキテクチャを使用するかによって異なります。 この例では、[シングル ショット検出器] モデルが使用されるため、以下の引数に値が入力されます。 デフォルト値をそのまま使用することも、編集することもできます。

    1. padding - 隣接するタイルの予測がブレンドされる画像タイルの境界のピクセル数。 値を大きくすると、出力が滑らかになり、アーティファクトが減少します。 パディングの最大値には、タイル サイズの値の半分を設定できます。
    2. threshold - この値よりも信頼度スコアが高い検出が、結果に追加されます。 可能な値の範囲は 0 ~ 1.0 です。
    3. batch_size - モデル推論の各ステップで処理された画像タイルの数。 これはグラフィックス カードのメモリ サイズに応じて異なります。
    4. nms_overlap - 2 つの重複したフィーチャの最大オーバーラップ率。結合領域に対する交差領域の比率として定義されます。 デフォルトは 0.1 です。
    5. exclude_pad_detections - true の場合、ツールは画像チップのパディングされた領域にあるエッジ付近で切り捨てられる可能性のある検出をフィルター処理します。
    6. test_time_augmentation - 予測中にテスト時間の延長を実行します。 true の場合、入力画像の反転および回転バリアントの予測は、最終出力にマージされます。
  6. 必要に応じて、[Non Maximum Suppression] チェックボックスをオンにします。

    このチェックボックスをオンにすると、重複する検出オブジェクトが出力から削除され、以下の 3 つのパラメーターの情報を入力するよう求められます。

    1. [信頼度スコア フィールド] - オブジェクト検出方法により出力される信頼度スコアを格納するフィーチャクラスのフィールド名。
    2. [クラス値フィールド] - 入力フィーチャクラスのクラス値フィールドの名前。
    3. [最大オーバーラップ率] - 2 つの重複したフィーチャの最大オーバーラップ率。ユニオン領域に対する交差領域の比率として定義されます。
  7. [実行] をクリックして推論を実行します。

    ディープ ラーニングを使用したオブジェクトの検出ツールのパラメーター

下の結果画像では、検出されたヤシの木がポリゴン ボックスで囲まれています。

ヤシの木の検出結果

詳細なオブジェクト検出例については、「ディープ ラーニングを使用したヤシの木の健康状態の評価」をご参照ください。

関連トピック