ディープ ラーニング解析の準備

このチュートリアルでは、最初に、ArcGIS Pro プロジェクトのセットアップ、事前トレーニング済みディープ ラーニング モデルの選択、モデルにより適合する画像の準備を行うとともに、転移学習の必要性を理解します。

プロジェクトの設定

まず、このチュートリアルのデータをすべて含むプロジェクトをダウンロードし、ArcGIS Pro で開きます。 次に、画像をプロジェクト マップに追加します。

  1. Seattle_Building_Detection.zip ファイルをダウンロードし、コンピューター上でそのファイルを選択します。
    注意:

    ほとんどの Web ブラウザーでは、デフォルトでコンピューターのダウンロード フォルダーにファイルがダウンロードされます。

  2. Seattle_Building_Detection.zip ファイルを右クリックし、コンピューター上の場所 (C:ドライブ上のフォルダーなど) に展開します。
  3. 展開した [Seattle_Building_Detection] フォルダーを開き、[Seattle_Building_Detection.aprx] をダブルクリックして ArcGIS Pro でプロジェクトを開きます。

    プロジェクト フォルダーの .aprx ファイル

  4. プロンプトが表示されたら、ArcGIS の組織アカウントまたは指定ユーザー アカウントを使用して ArcGIS Enterprise にサイン インします。
    注意:

    ArcGIS Pro へのアクセス権限または組織アカウントがない場合は、ソフトウェア アクセスのオプションをご参照ください

    プロジェクトが開きます。

    初期表示

    マップには、デフォルトの地形図ベースマップのみが含まれています。 このワークフローでは、航空写真を使用して建物を検出します。 今からマップに画像を追加します。

  5. リボンの [表示] タブをクリックします。 [ウィンドウ] グループで、[カタログ ウィンドウ] をクリックします。

    カタログ ウィンドウ ボタン

    [カタログ] ウィンドウが表示されます。

  6. [カタログ] ウィンドウで [フォルダー][Seattle_Building_Detection]、および [Imagery_data] を展開します。

    展開したフォルダー、Seattle_Building_Detection、および Imagery_data

  7. [Seattle_imagery.jp2] を右クリックして、[現在のマップに追加] を選択します。

    現在のマップに追加メニュー オプション

  8. 統計を計算するよう求められた場合は、[はい] をクリックします。

    統計は、ストレッチでレンダリングする場合など、画像に対して所定のタスクを実行する際に必要です。 マップに画像が表示されます。 このマップはシアトルの地域を表します。

    マップ上の Seattle_imagery.jp2

    注意:

    この航空写真は、U.S. National Agriculture Imagery Program (NAIP) Web サイトにあります。 米国全土を含む NAIP 画像は、USGS Earth Explorer Web サイトからダウンロードできます。

  9. ズームおよび画面移動して画像を調べます。 この画像には多数の建物があることがわかります。

事前トレーニング済みモデルを選択して調べます。

ディープ ラーニングを使用して、航空写真から建物フットプリントを抽出しましょう。 ディープ ラーニング モデルが準備できていない場合は、まずモデルを最初からトレーニングして、モデルに何が建物かを示すために多数のサンプルを入力する必要があります。 高パフォーマンス モデルでは、場合によっては数万のサンプルを入力する必要があります。 そうでなければ、すでにトレーニングされたモデルを使用します。 ここではトレーニング済みのモデルを入手し、その仕様について学びます。

注意:

ディープ ラーニング ツールを ArcGIS Pro で使用するには、正しいディープ ラーニング ライブラリがコンピューター上にインストールされている必要があります。 これらのファイルがインストールされていない場合は、プロジェクトを保存し、ArcGIS Pro を終了して、「ArcGIS Pro でのディープ ラーニングの準備」に記載された手順に従います。 これらの手順では、お使いのコンピューター ハードウェアとソフトウェアでディープ ラーニング ワークフローを実行できるかどうかを確認する方法と他の有用なヒントについても説明します。 インストールが完了したら、プロジェクトを再度開いてチュートリアルを続行できます。

  1. ArcGIS Living Atlas of the World Web サイトに移動します。
  2. 検索ボックスに「Pretrained model」と入力して Enter キーを押します。

    検索ボックス内の事前トレーニング済みモデル

  3. 結果リストを参照すると、50 を超える事前トレーニング済みモデルを利用できることがわかります。

    事前トレーニング済みモデルの結果リスト

  4. 検索ボックスに「Building Footprint」と入力して Enter キーを押します。

    検索ボックスの Building Footprint Extraction

    結果リストには、世界中のさまざまな地域のトレーニング済みディープ ラーニング モデルが表示されます。 対象地域は米国なので、米国でトレーニングされたモデルを選択します。

    Building Footprint Extraction 結果リスト

  5. 結果リストで、[Building Footprint Extraction – USA] をクリックします。

    検索結果の Building Footprint Extraction – USA

    モデルの説明ページが表示されます。 このページには、モデルに関連する情報が多数含まれています。 最も重要なのは、モデルが求めている入力タイプを理解することです。 入力データがモデルのトレーニングに使用されたデータのタイプと十分に類似していない場合、モデルは適切に実行されません。

  6. このページの内容を、時間をかけて確認します。 特に、次の画像例に示されているセクションを確認してください。

    アイテム詳細ページの内容

    このモデルに関するいくつかの情報を確認します。

    • [入力] - モデルは、入力として 8 ビット、3 バンドの高解像度 (10 ~ 40 cm) の画像を求めています。 データがこれらの仕様に合致しているかどうかを確認するため、さらに調べる必要があります。 チュートリアルでは、もう少し詳しく調査します。
    • [出力] - モデルは、建物フットプリントを含むフィーチャクラスを生成します。 必要なのは、まさに建物フットプリント ポリゴンを出力として取得することです。
    • [適用できる地域] - このモデルは、米国で適切に機能します。 対象地域が米国内にあるので、これで問題ありません。
    • [モデル アーキテクチャ] - このモデルは、MaskRCNN モデル アーキテクチャを使用します。 ワークフローの後半で必要になるので、この情報を記録しておいてください。

    このモデルはプロジェクトにとって非常に有効と考えられるので、ダウンロードします。

  7. [オーバービュー][ダウンロード] をクリックします。

    ダウンロード ボタン

    しばらくすると、ダウンロードが完了します。

  8. コンピューター上で、ダウンロードした [usa_building_footprints.dlpk] ファイルを探します。
    ヒント:

    ほとんどの Web ブラウザーでは、デフォルトでコンピューターの [ダウンロード] フォルダーにファイルがダウンロードされます。

  9. [Seattle_Building_Detection] フォルダー内に [Pretrained_model] という名前のフォルダーを作成します。

    Pretrained_model フォルダー

  10. [usa_building_footprints.dlpk] モデル ファイルを、ダウンロードした場所から [Pretrained_model] フォルダーに移動します。

画像のプロパティの確認

次に、データが、理想的な 8 ビット、3 バンドの高解像度 (10 ~ 40 cm) の画像入力とどの程度一致しているかを調べて確認します。

  1. ArcGIS Pro[Seattle_Building_Detection] プロジェクトに戻ります。
  2. [コンテンツ] ウィンドウで、[Seattle_imagery.jp2] を右クリックして [プロパティ] を選択します。

    プロパティ メニュー オプション

  3. [レイヤー プロパティ] ウィンドウで [ソース] をクリックし、[ラスター情報] を展開します。

    ラスター情報セクション

  4. [バンド数] フィールドを見つけます。

    バンド数フィールド

    値は [4] です。 NAIP プログラムは、4 つのスペクトル バンド (青、緑、赤、短波赤外) で構成されたマルチスペクトル画像を収集します。 短波赤外バンドは通常、植生の健全性を視覚化するために使用されます。 モデルは、4 つではなく 3 つのバンド (赤、緑、青) を求めています。 この差を修正する必要があります。

  5. [セル サイズ X] フィールドと [セル サイズ Y] フィールドを探します。

    セル サイズ X フィールドとセル サイズ Y フィールド

    どちらも値は 1 です。 つまり、画像の各セル (ピクセル) は 1 メートル四方を表します。 この NAIP 画像は、実際に 1 メートルの解像度で撮影されました。 これは、モデルが推奨する 10 ~ 40 cm の高解像度よりも低い解像度です。 この問題を修正する必要もあります。

  6. [ピクセル深度] フィールドを探します。

    ピクセル深度フィールド

    値は [8 ビット] になっています。これは、モデルで必要な [8 ビット] に一致しています。

  7. [OK] をクリックして、[レイヤー プロパティ] ウィンドウを閉じます。

    バンド数を表示する別の方法について説明します。

  8. [コンテンツ] ウィンドウで、[Seattle_imagery.jp2] を右クリックして [シンボル] を選択します。

    シンボル メニュー オプション

  9. [シンボル] ウィンドウで、[赤][Band_1] をクリックしてドロップダウン リストを開きます。

    赤の値ドロップダウン リスト

    4 つのバンドがリスト表示されます。 マルチスペクトル画像を表示する場合、赤、緑、青のチャンネルを通じて一定時間に 3 つのバンドのみを表示し、選択した 3 つのバンドを RGB コンポジットに結合します。 ただし、画像には 4 つのバンドが存在し、さまざまな解析目的に使用できることがわかります。

  10. [シンボル] ウィンドウを閉じます。

    閉じるボタン

画像と事前トレーニング済みモデルの期待値の間には、バンド数と解像度という 2 つの条件について不一致があることが判明しました。 このワークフローの後半では、この 2 つの問題を解消する方法について学びます。

関連する画像バンドの選択

バンドの不一致を解消します。 自分の画像には、4 つのスペクトル バンドがあります。

  • バンド 1 ‐ 赤
  • バンド 2 - 緑
  • バンド 3 - 青
  • バンド 4 - 短波赤外

モデルは、3 バンド入力 (赤、緑、青) を求めています。 問題を解消するため、NAIP 画像の最初の 3 つのバンドのみを含む新しいレイヤーを作成する必要があります。これにより、モデルの要求と一致します。 このステップは重要です。スキップするとモデルのパフォーマンスが低下します。

注意:

画像内のバンドの順序を正確に把握することが非常に重要です。 たとえば、他のタイプの画像では、バンド 1 が青、バンド 2 が緑、バンド 3 が赤というように、バンドの順序が異なることがあります。 その情報は、画像のプロパティまたはドキュメントで確認できます。

ラスター関数を使用して、新しい 3 バンド レイヤーを生成します。

  1. リボンの [画像] タブの [解析] グループで [ラスター関数] ボタンをクリックします。

    ラスター関数ボタン

  2. [ラスター関数] ウィンドウの検索ボックスに「バンド抽出」と入力します。 [データ管理][バンド抽出] をクリックします。

    バンド抽出ラスター関数

  3. 次の [バンド抽出] パラメーター値を設定します。
    • [ラスター] で、[Seattle_imagery.jp2] を選択します。
    • [組み合わせ] で、値が [1 2 3] であることを確認します。これは、バンド 1 (赤)、2 (緑)、3 (青) を参照します。
    • [一致バンドがない場合の操作] で、[失敗] を選択します。

    [一致バンドがない場合の操作] は、リスト内のいずれかのバンドを使用できない場合の操作を指定します。 [失敗] は、ラスター関数が中止され、失敗することを示します。 このチュートリアルを問題なく完了するには 3 つのバンドすべての存在が不可欠なので、このオプションを選択します。

    バンド抽出パラメーター値

  4. [新しいレイヤーの作成] をクリックします。

    [Extract Bands_Seattle_imagery.jp2] という名前の新しいレイヤーが [コンテンツ] ウィンドウに表示されます。 ラスター関数によって作成されたレイヤーは動的に計算されるので、ディスクには保存されません。 この場合は、結果のレイヤーを TIFF ファイルとしてコンピューター上に保存します。 保存するには [ラスターのエクスポート] を使用します。

  5. [Extract Bands_Seattle_imagery.jp2] を右クリックして、[データ][ラスターのエクスポート] を選択します。

    ラスターのエクスポート メニュー オプション

  6. [ラスターのエクスポート] ウィンドウの [出力ラスター データセット][参照] ボタンをクリックします。

    参照ボタン

  7. [出力場所] ウィンドウで、[フォルダー][Seattle_Building_Detection][Imagery Data] の順に参照し、[名前] に「Seattle_RGB.tif」と入力して、[保存] をクリックします。

    [出力場所] ウィンドウ

  8. [出力場所] ウィンドウで、その他のデフォルト値をすべてそのままにして、[エクスポート] をクリックします。

    エクスポート ボタン

    注意:

    画像が 16 ビットの場合は、この [ラスターのエクスポート] ステップで、モデルで期待される 8 ビット深度に変換するとよいでしょう。 [ピクセル タイプ] で、[符号なし 8 ビット] を選択して [ピクセル値のスケーリング] チェックをオンにします。 [ピクセル値のスケーリング] をオンにすることで、値が完全に (高い値が削除されることなく) 8 ビットスケールに変換されます [NoData 値] には、元の画像の NoData 値を入力します (例: 「0」)。

    該当する NoData 値を調べるには、[コンテンツ] ウィンドウで元の画像を右クリックし、[プロパティ] を選択し、[ソース][ラスター情報][NoData 値] を確認します。

    新しい [Seattle_RGB.tif] レイヤーが [コンテンツ] ウィンドウに表示されます。

  9. [ラスターのエクスポート] ウィンドウを閉じます。

    バンド数を確認します。

  10. [コンテンツ] ウィンドウで、[Seattle_RGB.tif] を右クリックし、[プロパティ] を選択します。
  11. [レイヤー プロパティ] ウィンドウで [ソース] をクリックし、[ラスター情報] を展開します。
  12. [バンド数] フィールドを見つけます。

    バンド数フィールド

    フィールド値は [3] です。事前トレーニング済みモデルが求めるとおり、レイヤーに 3 つのバンドがあることを確認できます。

  13. [レイヤー プロパティ] ウィンドウを閉じます。

    ワークフローの残りの部分で必要ない画像レイヤーを削除します。

  14. [コンテンツ] ウィンドウで、[Extract Bands_Seattle_imagery.jp2] を右クリックして [削除] を選択します。
  15. 同様に、[Seattle_imagery.jp2] を削除します。

    プロジェクトを保存します。

  16. [クイック アクセス ツールバー][保存] ボタンをクリックします。

    保存ボタン

事前トレーニング済みモデルが求める 3 バンド画像レイヤーが完成しました。

転移学習の必要性の理解

次に、解像度の不一致を解消する必要があります。モデルは 10 ~ 40 cm の高解像度を求めており、NAIP 画像はそれよりも低い 1 メートルの解像度で撮影されています。 [Building Footprint Extraction – USA] 事前トレーニング済みモデルを直接 [Seattle_RGB.tif] レイヤーに適用する場合は、次の画像例に示すように、不十分な結果になります。

直接適用された事前トレーニング済みモデルの結果

この画像では、検出された建物がピンク色で表されています。 解像度が一致しないため、モデルは、大きい建物を検出できましたが、小さい建物を適切に識別できませんでした。

注意:

事前トレーニング済みモデルを直接使用するワークフローの例については、「ディープ ラーニング事前トレーニング済みモデルを使用したオブジェクトの検出」チュートリアルをご参照ください。

この問題を解消する方法の 1 つに、転移学習があります。 転移学習は、機械学習の手法です。タスクから学んだ知識が、関連タスクのパフォーマンス向上のために再利用されます。 ここでは、元のタスクは 10 ~ 40 cm の解像度の画像で建物を検出することでしたが、新しいタスクは 1 メートルの解像度の画像で建物を検出することです。

注意:

転移学習は、画像の解像度の不一致以外の理由でも使用できます。 たとえば、特定の国の建物を検出するようトレーニングされたモデルから始め、転移学習を使用してモデルに別の国の建物を検出するよう学習させることができます。

転移学習の主な利点は、モデルを最初からトレーニングする場合に比べて、必要なトレーニング データが比較的少なく、トレーニング時間も短くなることです。

注意:

画像と期待される入力の不一致が極端すぎると、転移学習で実行できる内容が制限されます。 たとえば、30 メートルの解像度の衛星画像があり、小さい建物がほとんど識別できない場合、その画像で成功するようモデルを微調整できると考えるのは非現実的です。 新しいタスクと元のタスクの類似性が低いほど、転移学習の効果も低くなります。

注意:

転移学習は、すべてのディープ ラーニング事前トレーニング済みモデルで機能するわけではありません。 たとえば、SAM と DeepForest を利用しているモデルは、転移学習にサポートしていません。 事前トレーニング済みモデルの説明は、ArcGIS Living Atlas の Web サイトで SAM または DeepForest を利用しているかご確認ください。

チュートリアルの残りの部分では、転移学習を実行して事前トレーニング済みモデルを微調整し、データのパフォーマンスを向上させる方法を学びます。


転移学習のトレーニング サンプルの準備

転移学習を実行するには、最初にトレーニング サンプルを生成し、データ内の建物の外観をモデルに示します。 モデルを最初からトレーニングする場合は、何万もの建物サンプルが必要です。 幸いなことに、転移学習では数百しか必要ありません。 チュートリアルのこの部分では、トレーニング サンプルの生成方法について学びます。 最初に、サンプルを格納する空のフィーチャクラスを作成します。 続いて建物を表すポリゴンを描画し、フィーチャクラスに追加します。 最後に、フィーチャクラスと画像を、転移学習で使用するトレーニング チップにエクスポートします。

フィーチャクラスの作成

最初に、フィーチャクラスを作成します。

  1. リボンの [表示] タブの [ウィンドウ] グループで、[ジオプロセシング] をクリックします。

    ジオプロセシング ボタン

    [ジオプロセシング] ウィンドウが表示されます。

  2. [ジオプロセシング] ウィンドウの検索ボックスで「Create feature class」と入力します。 結果リストで、[フィーチャクラスの作成 (Create Feature Class)] ツールをクリックして開きます。

    フィーチャクラスの作成 (Create Feature Class) ツール

  3. 次のパラメーター値を設定します。
    • [フィーチャクラス名] に「Training_examples」と入力します。
    • [ジオメトリ タイプ] で、[ポリゴン] が選択されていることを確認します。
    • [座標系][Seattle_RGB.tif] を選択します。

    フィーチャクラス パラメーターの作成

  4. その他のデフォルト値をそのままにして、[実行] をクリックします。

    [コンテンツ] ウィンドウに、新しい [Training_examples] フィーチャクラスが表示されます。 現時点では空白です。

トレーニング サンプルの描画

[Training_examples] レイヤーにポリゴン フィーチャとして保存される建物フットプリントをトレースします。

  1. リボン上の [編集] タブの [フィーチャ] グループで [作成] をクリックします。

    作成ボタン

    [フィーチャ作成] ウィンドウが表示されます。

  2. [フィーチャ作成] ウィンドウで、[Training_examples] をクリックして、[ポリゴン] ボタンをクリックします。
  3. ポリゴン ボタン

    作図ツールバーがマップに表示されます。 デフォルトでは、直線を描画する [ライン] モードに設定されています。

    ライン ボタン

  4. 作図ツールで [直角ライン] ボタンをクリックします。

    直角ライン ボタン

  5. [直角ライン] モードには、直線になるすべてのラインと直角になるすべての角が含まれています。 多くの建物の角は 90 度なので、これは建物フットプリントを描画する際に便利です。 描画プロセス中に、必要に応じて、このモードと [ライン] モードを切り替えることができます。
  6. リボン上の [マップ] タブにある [ナビゲーション] グループで [ブックマーク] をクリックし、[ラベリング範囲] を選択します。

    ラベリング範囲ブックマーク

    ここから、建物を定義するポリゴンの描画を開始します。 このプロセスはラベリングとも呼ばれます。対象オブジェクトが画像内のどこにあるかをモデルに伝えます。

    ラベリング範囲ブックマークの範囲

    注意:

    画像内のトレーニング サンプルを作成する場所を決定する際は、地理的位置に応じて一般的な建物があるエリアを選択します。

  7. マップで、特定の建物を選択し、いずれかの角 (頂点) をクリックします。
  8. それぞれの角を時計回りにクリックします。
  9. 最後の角をダブルクリックしてポリゴンを完成させます。

    ポリゴンのトレース

    注意:

    フィーチャクラスの色 (ここではライト グリーン) はランダムに割り当てられるため、プロジェクトによっては異なる場合があります。

  10. 同様にして、同じエリアにさらに 2 ~ 3 個のポリゴンを作成します。
    ヒント:

    作成したポリゴンを気に入らない場合は削除できます。 リボンの [編集] タブの [選択] グループで、[選択] をクリックします。 マップでポリゴンをクリックします。 [編集] タブの [フィーチャ] グループにある [削除] をクリックします。

    選択ボタンと削除ボタン

    ポリゴン フィーチャをフィーチャクラスに保存します。

  11. 作図ツールバーで [完了] ボタンをクリックします。

    完了ボタン

  12. リボン上の [編集] タブにある [編集の管理] グループで、[保存] をクリックします。

    保存ボタン

  13. [フィーチャ作成] ウィンドウを閉じます。

    実際のプロジェクトでは、さらに 200 ~ 300 の建物を定義する必要があります。 ただし、このチュートリアルを簡潔にするため、あらかじめ用意されているおよそ 200 のトレーニング サンプルのセットを使用します。

  14. [ジオプロセシング] ウィンドウの下部にある [カタログ] をクリックしてカタログ ウィンドウに戻ります。

    ジオプロセシング タブ

  15. [カタログ] ウィンドウで、[データベース][Output_provided.gdb] を展開します。
  16. [Training_examples_larger_set] を右クリックして、[現在のマップに追加] を選択します。

    現在のマップに追加メニュー オプション

    トレーニング サンプルのセットが表示されます。

    トレーニング サンプルのセット

    長方形の範囲が選択され、その範囲内のすべての建物にポリゴンが作成されたことを確認します。 [Training_examples] レイヤーは必要なくなったので、削除します。

  17. [コンテンツ] ウィンドウで、[Terrain_examples] レイヤーを右クリックして [削除] を選択します。

    削除メニュー オプション

  18. Ctrl + S を押して、プロジェクトを保存します。

200 を超えるトレーニング サンプルを含むレイヤーが準備できました。

クラス フィールドの追加

建物フットプリント ポリゴンをトレースしたので、それらをすべて特定クラスに属するように指定する必要があります。 ワークフローによっては、建物フットプリント、樹木、車など、ラベル付きオブジェクトが異なるクラス (またはカテゴリ) に属する可能性があります。 このチュートリアルでは、建物フットプリント クラスのみがあります。 [Class] フィールドを [Training_examples_larger_set] レイヤーに追加して、データを入力します。

  1. [コンテンツ] ウィンドウで、[Training_examples_larger_set] レイヤーを右クリックして [属性テーブル] を選択します。

    属性テーブル メニュー オプション

    レイヤーの属性テーブルが開き、各ポリゴンの情報が表示されます。

  2. [Training_examples_larger_set] 属性テーブルで、[追加] をクリックします。

    追加ボタン

  3. [フィールド: Training_examples_larger_set] タブで、テーブルの最終行に次の情報を入力します。
    • [フィールド名] に「Class」と入力します。
    • [データ タイプ] で、[Long] をクリックして [Short] に変更します。

    [Short] データ タイプには整数値が格納されます。

    新しい Class フィールド

  4. リボンの [フィールド] タブの [変更] グループで、[保存] をクリックします。

    保存ボタン

  5. [フィールド: Training_examples_larger_set] ウィンドウを閉じます。

    これで [Class] フィールドが作成できたので、数値を入力します。 建物フットプリント クラスを数値 [1] で表すことを任意に決定します。

  6. [Training_examples_larger_set] 属性テーブルで、[計算] をクリックします。

    計算ボタン

  7. [フィールド演算] ウィンドウで、以下のパラメーター値を設定します。
    • [フィールド名] で、[Class] を選択します。
    • [Class =] に「1」と入力します。

    フィールド演算ウィンドウ

  8. その他はすべてデフォルト値のままにし、[OK] をクリックします。
  9. [Class] 列で、値 [1] が各ポリゴン フィーチャに割り当てられていることを確認します。

    データが入力されたクラス列

    [Class] フィールドのおかげで、モデルは、すべてのトレーニング サンプルが同じ種類のオブジェクト、つまり 1 で表される建物フットプリントであることを認識します。

  10. [Training_examples_larger_set] 属性テーブルを閉じます。

トレーニング チップと画像クリップの詳細

ディープ ラーニング モデルは、1 回のパスでは広いエリアをトレーニングできず、チップと呼ばれる画像の小さな切り抜きに限定して処理を行います。 チップは、画像タイルと、オブジェクトの位置を示す対応するラベル タイル (この場合は buildings) から作成されます。 これらのチップは、転移学習トレーニング プロセス中にモデルに入力されます。

トレーニング チップの例
トレーニング チップが、その画像タイル (左) と、それに対応するラベル タイル (右) によって示されています。

[Seattle_RGB.tif] 画像と [Training_examples] レイヤーを使用して、トレーニング チップを生成します。 重要なポイントは、ラベルが付いていない建物を含むチップの生成を回避することです。 このようなチップがあると、建物がまったくないことを表しながら、モデルに建物を表示することになります。 これはモデルを混乱させ、パフォーマンスに悪影響を与えます。 これを回避するため、トレーニング サンプルが存在する範囲に限定された画像クリップを作成します。

一部の建物にラベルが付いていないトレーニング チップの例
一部の建物にラベルが付いていないチップを示した一例です。 そのようなチップは回避する必要があります。

  1. [カタログ] ウィンドウの下部にある [ジオプロセシング] をクリックします。

    ジオプロセシング タブ

  2. [ジオプロセシング] ウィンドウの [戻る] ボタンをクリックします。

    戻るボタン

  3. [ラスターのクリップ (Clip Raster)] ツールを検索して開きます。

    ラスターのクリップ ツール

  4. 次の [ラスターのクリップ] パラメーター値を設定します。
    • [入力ラスター][Seattle_RGB.tif] を選択します。
    • [出力範囲][Training_examples_larger_set] を選択します。
    • [出力ラスター データセット] で、[参照] ボタンをクリックします。 [出力ラスター データセット] ウィンドウで、[フォルダー][Seattle_Building_Detection][Imagery_data] の順に参照し、[名前] に「Seattle_RGB_clip.tif」と入力して、[保存] をクリックします。

    ラスターのクリップのパラメーター

  5. [実行] をクリックします。

    [コンテンツ] ウィンドウに [Seattle_RGB_clip.tif] レイヤーが表示されます。

  6. [コンテンツ] ウィンドウで、[Seattle_RGB_clip.tif] の横にあるチェックボックスをクリックして、レイヤーをオフにします。

    オフになった Seattle_RGB.tif

    マップには、クリップされたレイヤーとトレーニング サンプルのみが表示されています。 画像に表示されるすべての建物には、対応する建物ポリゴンがあります。

    マップ上の、クリップされたレイヤーとトレーニング サンプル

トレーニング チップの生成

トレーニング チップを生成します。 また、転移学習プロセスに関連するデータ エレメントを保存するフォルダーを作成します。

  1. [カタログ] タブをクリックしてウィンドウを切り替えます。
  2. 必要に応じて、[フォルダー][Seattle_Building_Detection] を展開します。
  3. [Seattle_Building_Detection] を右クリックし、[新規] をポイントして、[フォルダー] を選択します。

    フォルダー メニュー オプション

  4. [新しいフォルダー] の名前として「Transfer_learning_data」と入力して、Enter キーを押します。

    新しい Transfer_learning_data フォルダー

  5. [ジオプロセシング] タブをクリックしてウィンドウを切り替えます。
  6. [ジオプロセシング] ウィンドウの [戻る] ボタンをクリックします。
  7. [ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data For Deep Learning)] ツールを検索して開きます。

    ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data For Deep Learning) ツール

  8. [ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data For Deep Learning)] ツールに、次のパラメーター値を設定します。
    • [入力ラスター][Seattle_RGB_clip.tif] を選択します。
    • [出力フォルダー] で、[参照] ボタンをクリックします。 [出力フォルダー] ウィンドウで、[フォルダー][Seattle_Building_Detection][Transfer_learning_data] の順に参照します。 [名前] に「Training_chips」と入力し、[OK] をクリックします。
    • [入力フィーチャクラス][Training_examples_larger_set] を選択します。

    クリップされた画像とトレーニング サンプルから生成されたチップは、[Training_chips] というフォルダーに格納されます。

    ディープ ラーニング用のトレーニング データをエクスポートのパラメーター

  9. [クラス値フィールド] で、[Class] を選択します。

    前半で定義した [Class] フィールドは、どのオブジェクトがどのラベルに属するかを指定します (この場合は、すべてのオブジェクトが建物フットプリントを示すクラス [1] に属します)。

    クラス値フィールド パラメーター

  10. [タイル サイズ X] および [タイル サイズ Y] の値が [256] であることを確認します。

    これらのパラメーターは、チップの X 方向と Y 方向のサイズ (ピクセル単位) を決定します。 この場合は、デフォルト値の [256] が適しています。

    注意:

    トレーニング チップは、元のモデルのトレーニングで使用したチップとできるだけ似たものにすることをお勧めします。 元のモデルは、解像度 10 ~ 40 cm のデータから生成された 512 x 512 チップでトレーニングされました。 NAIP 画像は 1 メートルの解像度です。 この解像度の 256 x 256 ピクセルのチップは、解像度が 40 cm の 512 x 512 チップとほぼ同じエリアを含みます。 したがって、選択すべき適切なチップ サイズは 256 x 256 です。

    事前トレーニング済みモデルで最初に使用されたチップ サイズを知る方法の 1 つは、dlpk パッケージの内容を調べることです。 Microsoft File Explorer で、別のフォルダーに [usa_building_footprints.dlpk] ファイルをコピーし、拡張子を [.dlpk] から [.zip] に変更します。 [.zip] ファイルを右クリックして展開します。 展開したファイルから [usa_building_footprints.emd] を見つけて、拡張子を [.txt] に変更します。 [usa_building_footprints.txt] をテキスト エディターで開き、"ImageHeight""ImageWidth" の行を探します。

    ImageHeight および ImageWidth パラメーター

  11. [ストライド X][ストライド Y] に「64」と入力します。

    このパラメーターは、次の画像チップを作成する際に X および Y 方向に移動する距離 (ピクセル単位) を制御します。 この値は、トレーニング データの量によって決まります。 この値を小さく設定することで、生成されるチップの数を最大にできます。 この値を試してみることもできますが、このチュートリアルでは、値 [64] が適切に機能することがわかりました。

  12. [メタデータ形式][RCNN マスク] を選択します。

    ディープ ラーニング モデルの種類が異なれば、チップに必要なメタデータ形式も異なります。 ワークフローの前半で、事前トレーニング済みモデルが MaskRCNN アーキテクチャに基づいていることに着目しました。 ここでは、そのモデルに対応した値を選択する必要があります。

    タイル サイズ X とタイル サイズ Y、およびその他のパラメーター

    ヒント:

    ツールのパラメーターの詳細については、パラメーターをポイントして、横にある情報ボタンをクリックします。

    情報ボタン

  13. その他のデフォルト値をそのままにして、[実行] をクリックします。

    しばらくすると、処理が完了します。

トレーニング チップの検査

生成したチップの一部を調べます。

  1. [カタログ] ウィンドウで [フォルダー][Seattle_Building_Detection][Transfer_learning_data]、および [Training_chips] を展開します。
  2. 画像タイルは [images] フォルダーに、ラベル タイルは [labels] フォルダーにあります。

    images フォルダーと labels フォルダー

  3. [images] フォルダーを展開して、1 つ目の画像である [000000000000.tif] を右クリックし、[現在のマップに追加] を選択します。 統計を計算するよう求められた場合は、[いいえ] をクリックします。

    images フォルダーの 000000000000.tif ファイル

  4. [コンテンツ] ウィンドウで [Training_examples_larger_set] および [Seattle_RGB_clip.tif] をオフにして、タイルを見やすくします。

    マップ上のタイルの例

  5. [カタログ] ウィンドウで、[images] フォルダーを折りたたんで [labels] および [1] フォルダーを展開し、1 つ目のラベル タイルである [000000000000.tif] をマップに追加します。 統計を計算するよう求められた場合は、[いいえ] をクリックします。

    labels フォルダーの 000000000000.tif ファイル

    注意:

    画像とラベルのペアは、同じ名前で認識できます。

  6. [コンテンツ] ウィンドウで、ラベル タイルをクリックしてオンまたはオフにすると、その下の画像タイルが表示されます。

    トレーニング チップの例

  7. ラベル タイルのピクセルの一部をクリックすると、情報ポップアップにその値が表示されます。

    値 28 を表示するポップアップ

    注意:

    ラベル タイルで、建物を表さないピクセルの値は [0] になります。 建物を表すすべてのピクセルの値は [0] より大きくなります。 特定の値は、元の建物ポリゴンのオブジェクト ID (前のサンプル画像の [28] など) から得られます。

  8. 必要に応じて、さらに画像タイルとラベル タイルのペアをマップに追加し、確認します。
  9. 完了したら、[コンテンツ] ウィンドウからすべてのタイルを削除し、[Training_examples_larger_set] レイヤーと [Seattle_RGB.tif] レイヤーをオンに戻します。

    オンに戻った Training_examples_larger_set および Seattle_RGB.tif レイヤー

  10. [カタログ] ウィンドウで、[Training_chips] フォルダーを折りたたみます。

    折りたたまれた Training_chips フォルダー

  11. Ctrl + S キーを押して、プロジェクトを保存します。

トレーニング チップを生成したので、転移学習プロセスを開始できるようになりました。


転移学習の実行と建物の抽出

次に転移学習を実行します。 [usa_building_footprints.dlpk] 事前トレーニング済みモデルをさらにトレーニングするために生成したチップを使用します。 続いて、微調整されたモデルをシアトルの画像に適用し、パフォーマンスの大幅な向上を確認します。

モデルの微調整

まず、[ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールを使用してモデルを微調整します。

  1. [ジオプロセシング] ウィンドウに切り替えて、[戻る] ボタンをクリックします。
  2. [ジオプロセシング] ウィンドウで、[ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールを検索して開きます。

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

  3. [ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールに、以下のパラメーター値を設定します。
    • [入力トレーニング データ] で、[参照] ボタンをクリックします。 [フォルダー][Seattle_Building_Detection][Transfer_learning_data] の順に参照します。 [Training_chips] を選択して [OK] をクリックします。
    • [出力モデル][参照] ボタンをクリックします。 [フォルダー][Seattle_Building_Detection][Imagery_data][Transfer_learning_data] の順に参照します。 「Seattle_1m_Building_Footprints_model」と入力して [OK] をクリックします。

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

    [Seattle_1m_Building_Footprints_model] が、転移学習プロセスの結果得られた、新しい微調整済みモデルの名前になります。

    ヒント:

    各モデルとそれに対応するトレーニング チップを同じフォルダーに保存すると、どのモデルがどのデータでトレーニングされたかを思い出しやすくなります。

  4. [高度な設定] セクションを展開して、次のパラメーター値を設定します。
    • [事前トレーニング済みモデル][参照] ボタンをクリックします。 [usa_building_footprints.dlpk] 事前トレーニング済みモデルを保存したフォルダーを参照して選択し、[OK] をクリックします。
    • [モデルの固定] チェックボックスがオンになっていることを確認します。

    高度な設定セクション

    [モデルの固定] オプションを指定すると、モデルの最後のレイヤーのみが新しいトレーニング データの影響を受け、そのコア レイヤーは変更されません。 多くの転移学習の事例でこの設定が選択されます。それにより、モデルがその中核となる知識を学習しないリスクを回避できます。

    注意:

    [入力トレーニング データ] の横にエラー インジケーターが表示される場合は、インストールされているディープ ラーニング ライブラリのバージョンが正しくありません。 Ctrl + S キーを押してプロジェクトを保存し、ArcGIS Pro を終了して、「ArcGIS 用のディープ ラーニング フレームワークのインストール」の手順を実行します。 以前にディープ ラーニング ライブラリをインストールしている場合は、[以前のバージョンからのアップグレード] の下に一覧表示されている手順を実行します。 インストールが完了したら、ArcGIS Pro プロジェクトを再度開いてレッスンを続行できます。

  5. [モデル パラメーター] セクションを展開し、[バッチ サイズ][4] に設定されていることを確認します。

    モデル パラメーター セクション

    ヒント:

    ツールのパラメーターの詳細については、横にある情報ボタンをクリックします。

  6. [ジオプロセシング] ウィンドウの [環境] タブをクリックします。 [プロセッサー タイプ] で、[GPU] を選択します。

    環境タブ

    注意:

    このチュートリアルは、コンピューターに GPU が搭載されていることを前提とします。 GPU が搭載されていない場合は CPU で処理できますが、データの処理に時間がかかります。 後者の場合は、[CPU] オプションを選択します。

  7. その他のデフォルト値をそのままにして、[実行] をクリックします。

    この処理の実行には 10 分以上かかる場合があります。

    ヒント:

    メモリ不足エラーが発生した場合は、原因として、コンピューターに 4 つのタイルを一括処理する十分なメモリがないことが考えられます。 [バッチ サイズ] の値を [4] から [2] または [1] に変更してみてください。 この値を小さくしてもモデルの品質には影響せず、モデルのトレーニング プロセスの効率にのみ影響します。

これで、データのパフォーマンスを向上させるよう微調整された強化モデルとして [Seattle_1m_Building_Footprints] ができました。

推測の実行

転移学習が完了したので、微調整されたモデルを使用して、[Seattle_RGB.tif] イメージ レイヤーで推測を実行し、レイヤー内の建物を検出します。

  1. [ジオプロセシング] ウィンドウの [戻る] ボタンをクリックします。
  2. [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールを検索して開きます。

    ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning) ツール

  3. [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールに、以下のパラメーター値を設定します。
    • [入力ラスター][Seattle_RGB.tif] を選択します。
    • [出力検出オブジェクト] に、「Seattle_buildings」と入力します。
    • [モデル定義][参照] ボタンをクリックします。 [Seattle_Building_Detection] フォルダーを参照して [Transfer_learning_data] および [Seattle_1m_Building_Footprints_model] を展開し、[Seattle_1m_Building_Footprints_model.dlpk] を選択して [OK] をクリックします。

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

    モデル定義を読み込むと、モデルの引数が自動的に入力されます。

  4. [パディング] で、値が [64] になっていることを確認します。

    パディングは、検出時に無視される各画像チップ内の境界エリアを指定するものです。 建物の断片が画像チップのエッジに現れても、パディングによって、検出の対象とは見なされません。 [64] という値は、画像チップのすべての面でパディングが 64 ピクセル幅になることを意味します。

    注意:

    モデルは、パディングの値に合わせてストライドを調整します。 モデルが隣接エリアに進むにつれて、前の画像チップのエッジに断片として現れた建物は、すぐに次の画像チップのうちの 1 つの中心に全体で現れ、そこで正常に検出されます。 パディング (とその他の推論パラメーター) について詳しくは、「Deep Learning with ArcGIS Pro Tips & Tricks: Part 2」の「Understand parameters for inferencing」セクションをご参照ください。

  5. [batch_size] は、トレーニング プロセスで使用したのと同じ値 ([4] 以下) を使用します。

    これにより、ツールは、コンピューター上で利用可能なメモリ量の範囲内で実行されます。

  6. [閾値] の値が [0.9] になっていることを確認します。

    これは 0 と 1 の間のカットオフ値です。 この値は、オブジェクトを建物であると宣言する前に、モデルがどの程度確信している必要があるかを示します。 [0.9] という値は、モデルが 90 パーセントの確信を持つべきであることを示します。

  7. [tile_size] の値が [256] であることを確認します。

    これは、モデルが推論を実行するために取り込む画像チップのサイズです。 この値は、モデルのトレーニングに使用されたチップと同サイズである必要があります。

    引数のリスト

  8. [Non Maximum Suppression] チェックボックスをオンにします。

    オーバーラップしている建物フットプリントがオーバーラップしている場合は、[Non Maximum Suppression] オプションを使用すると、最も信頼できる建物ポリゴン フィーチャのみが保持され、他のポリゴン フィーチャは削除されます。

    Non Maximum Suppression オプション

  9. [ジオプロセシング] ウィンドウの [環境] タブをクリックします。

    環境タブ

  10. [プロセッサー タイプ] で、[GPU] を選択します。

    GPU オプション値

    この時点で、ツールをそのまま実行できます。ツールは、[Seattle_RGB.tif] 画像全体に対して建物の検出を続行します。この処理には、コンピューターの仕様に応じて 10 分から 1 時間かかる可能性があります。 このチュートリアルを簡素化するため、ここでは、画像入力の小さいサブセット内の建物のみを検出します。

  11. リボンの [マップ] タブの [ナビゲーション] グループで、[ブックマーク] をクリックして [Inference extent] を選択します。

    Inference extent ブックマーク

    マップに、シアトルのより狭い地域が拡大表示されます。

    Inference extent ブックマークの範囲

  12. [ジオプロセシング] ウィンドウの [環境] タブにある [処理範囲][範囲] で、[現在の表示範囲] を選択します。

    現在の表示範囲メニュー オプション

  13. [実行] をクリックします。

    数分後に処理が完了し、[Seattle_buildings] 出力レイヤーが [コンテンツ] ウィンドウとマップに表示されます。 今回は、ほぼすべての建物が検出されたことを確認できます。

    マップ上の Seattle_buildings 出力レイヤー

転移学習によって微調整された事前トレーニング済みモデルを使用して、シアトルのエリアにある建物を検出することができました。

結果の比較

次に、既製の事前トレーニング済みモデルと転移学習で微調整したモデルを実行して取得した 2 つの建物フットプリント レイヤーを比較します。 いずれも、画像の範囲全体に対する結果を示しています。 前のセクションで学んだ手法を使用して両レイヤーを自分で生成することもできますが、時間の都合上、用意されたレイヤーを使用します。 まず、これらのレイヤーを含むマップを開きます。

  1. [カタログ] ウィンドウで、[マップ] を展開します。 [全体表示の結果] を右クリックして [開く] を選択します。

    開くメニュー オプション

    マップが開きます。 次の 2 つのポリゴン フィーチャクラスが含まれています。

    • Seattle_buildings_off_the_shelf
    • Seattle_buildings_with_transfer_learning

    [スワイプ] ツールを使用して 2 つのレイヤーを比較します。

  2. [コンテンツ] ウィンドウで、[Seattle_buildings_off_the_shelf] をクリックして選択します。

    選択された Seattle_buildings_off_the_shelf

  3. リボンの [フィーチャ レイヤー] タブの [比較] グループで、[スワイプ] をクリックします。

    スワイプ ボタン

  4. マップで、スワイプ ハンドルを使用して上下または左右に繰り返しドラッグし、上のレイヤーをめくって下のレイヤーを表示します。

    スワイプ カーソル

  5. 拡大/縮小および画面移動してさまざまなエリアを調べ、結果の品質の違いを視覚的に評価します。
    ヒント:

    スワイプ モードでは、マウス ホイールを使用して表示を拡大/縮小できます。また、キーボードで C キーを押してマウスをドラッグすることで画面移動できます。

    微調整されたモデルは、画像内のより小さい建物の建物フットプリントを識別する場合に、既製のモデルと比較してはるかに優れています。 [スワイプ] ツールを使用して、転移学習レイヤーの結果を、画像で視覚的に確認できる建物と比較します。

  6. [コンテンツ] ウィンドウで、[Seattle_buildings_off_the_shelf] レイヤーをオフにし、[Seattle_buildings_with_transfer_learning] レイヤーを選択します。

    選択された Seattle_buildings_with_transfer_learning レイヤー

  7. [スワイプ] ツールを使用して 2 つのレイヤーを比較します。

    微調整されたモデルの結果として得られたレイヤーはまだ不完全で、あちらこちらでいくつかの建物が欠落していることを確認できるかもしれません。 転移学習によるモデルの微調整は、反復的なプロセスになる傾向があります。 さらに多くのトレーニング サンプルを収集し、転移学習トレーニングをもう一度実施することで、引き続きモデルのパフォーマンスを向上できます。 手短に概観すると、手順は次のようになります。

    • まず、モデルが見落とした建物のタイプを確認します。
    • その建物タイプを対象とする新しいサンプル ポリゴンを収集し、新しいトレーニング チップを生成して、新しいフォルダーに保存します。 前と同じガイドラインに沿って、ラベルのない建物がチップに含まれないように画像をクリップしてください。
    • 新しいトレーニング セッションを実行します。既製の事前トレーニング済みモデルから始めて、これまでに作成したすべてのチップを入力 (つまり、[入力フィーチャトレーニング データ] パラメーターにすべてのチップ フォルダーをリスト) します。 これは、モデルがすべてのトレーニング チップを同等に処理するためのベスト プラクティスです。
  8. 画像の探索を終了したら、リボンの [マップ] タブの [ナビゲーション] グループで [マップ操作] ボタンをクリックしてスワイプ モードを終了します。

    マップ操作ボタン

  9. Ctrl + S キーを押して、プロジェクトを保存します。

このチュートリアルでは、ディープ ラーニングを使用して、ArcGIS Pro の航空写真から建物フットプリントを抽出しました。 ArcGIS Living Atlas から事前トレーニング済みモデルを選択し、入力データをモデルの要求と一致させることの重要性を学びました。 必要なバンド数を含む新しいイメージ レイヤーを作成しました。 次に、転移学習を適用して解像度の不一致を修正し、画像に対するモデルのパフォーマンスを微調整しました。少数の新しいトレーニング サンプルを入力して、モデルをさらにトレーニングしました。 続いて、微調整されたモデルをシアトル地域に適用して、強化された結果を得ました。