ディープ ラーニング解析の準備
このチュートリアルでは、最初に、ArcGIS Pro プロジェクトのセットアップ、事前トレーニング済みディープ ラーニング モデルの選択、モデルにより適合する画像の準備を行うとともに、転移学習の必要性を理解します。
プロジェクトの設定
まず、このチュートリアルのデータをすべて含むプロジェクトをダウンロードし、ArcGIS Pro で開きます。 次に、画像をプロジェクト マップに追加します。
- Seattle_Building_Detection.zip ファイルをダウンロードし、コンピューター上でそのファイルを選択します。
注意:
ほとんどの Web ブラウザーでは、デフォルトでコンピューターのダウンロード フォルダーにファイルがダウンロードされます。
- Seattle_Building_Detection.zip ファイルを右クリックし、コンピューター上の場所 (C:ドライブ上のフォルダーなど) に展開します。
- 展開した [Seattle_Building_Detection] フォルダーを開き、[Seattle_Building_Detection.aprx] をダブルクリックして ArcGIS Pro でプロジェクトを開きます。
- プロンプトが表示されたら、ArcGIS の組織アカウントまたは指定ユーザー アカウントを使用して ArcGIS Enterprise にサイン インします。
注意:
ArcGIS Pro へのアクセス権限または組織アカウントがない場合は、ソフトウェア アクセスのオプションをご参照ください。
プロジェクトが開きます。
マップには、デフォルトの地形図ベースマップのみが含まれています。 このワークフローでは、航空写真を使用して建物を検出します。 今からマップに画像を追加します。
- リボンの [表示] タブをクリックします。 [ウィンドウ] グループで、[カタログ ウィンドウ] をクリックします。
[カタログ] ウィンドウが表示されます。
- [カタログ] ウィンドウで [フォルダー]、[Seattle_Building_Detection]、および [Imagery_data] を展開します。
- [Seattle_imagery.jp2] を右クリックして、[現在のマップに追加] を選択します。
- 統計を計算するよう求められた場合は、[はい] をクリックします。
統計は、ストレッチでレンダリングする場合など、画像に対して所定のタスクを実行する際に必要です。 マップに画像が表示されます。 このマップはシアトルの地域を表します。
注意:
この航空写真は、U.S. National Agriculture Imagery Program (NAIP) Web サイトにあります。 米国全土を含む NAIP 画像は、USGS Earth Explorer Web サイトからダウンロードできます。
- ズームおよび画面移動して画像を調べます。 この画像には多数の建物があることがわかります。
事前トレーニング済みモデルを選択して調べます。
ディープ ラーニングを使用して、航空写真から建物フットプリントを抽出しましょう。 ディープ ラーニング モデルが準備できていない場合は、まずモデルを最初からトレーニングして、モデルに何が建物かを示すために多数のサンプルを入力する必要があります。 高パフォーマンス モデルでは、場合によっては数万のサンプルを入力する必要があります。 そうでなければ、すでにトレーニングされたモデルを使用します。 ここではトレーニング済みのモデルを入手し、その仕様について学びます。
注意:
ディープ ラーニング ツールを ArcGIS Pro で使用するには、正しいディープ ラーニング ライブラリがコンピューター上にインストールされている必要があります。 これらのファイルがインストールされていない場合は、プロジェクトを保存し、ArcGIS Pro を終了して、「ArcGIS Pro でのディープ ラーニングの準備」に記載された手順に従います。 これらの手順では、お使いのコンピューター ハードウェアとソフトウェアでディープ ラーニング ワークフローを実行できるかどうかを確認する方法と他の有用なヒントについても説明します。 インストールが完了したら、プロジェクトを再度開いてチュートリアルを続行できます。
- ArcGIS Living Atlas of the World Web サイトに移動します。
- 検索ボックスに「Pretrained model」と入力して Enter キーを押します。
- 結果リストを参照すると、50 を超える事前トレーニング済みモデルを利用できることがわかります。
- 検索ボックスに「Building Footprint」と入力して Enter キーを押します。
結果リストには、世界中のさまざまな地域のトレーニング済みディープ ラーニング モデルが表示されます。 対象地域は米国なので、米国でトレーニングされたモデルを選択します。
- 結果リストで、[Building Footprint Extraction – USA] をクリックします。
モデルの説明ページが表示されます。 このページには、モデルに関連する情報が多数含まれています。 最も重要なのは、モデルが求めている入力タイプを理解することです。 入力データがモデルのトレーニングに使用されたデータのタイプと十分に類似していない場合、モデルは適切に実行されません。
- このページの内容を、時間をかけて確認します。 特に、次の画像例に示されているセクションを確認してください。
このモデルに関するいくつかの情報を確認します。
- [入力] - モデルは、入力として 8 ビット、3 バンドの高解像度 (10 ~ 40 cm) の画像を求めています。 データがこれらの仕様に合致しているかどうかを確認するため、さらに調べる必要があります。 チュートリアルでは、もう少し詳しく調査します。
- [出力] - モデルは、建物フットプリントを含むフィーチャクラスを生成します。 必要なのは、まさに建物フットプリント ポリゴンを出力として取得することです。
- [適用できる地域] - このモデルは、米国で適切に機能します。 対象地域が米国内にあるので、これで問題ありません。
- [モデル アーキテクチャ] - このモデルは、MaskRCNN モデル アーキテクチャを使用します。 ワークフローの後半で必要になるので、この情報を記録しておいてください。
このモデルはプロジェクトにとって非常に有効と考えられるので、ダウンロードします。
- [オーバービュー] で [ダウンロード] をクリックします。
しばらくすると、ダウンロードが完了します。
- コンピューター上で、ダウンロードした [usa_building_footprints.dlpk] ファイルを探します。
ヒント:
ほとんどの Web ブラウザーでは、デフォルトでコンピューターの [ダウンロード] フォルダーにファイルがダウンロードされます。
- [Seattle_Building_Detection] フォルダー内に [Pretrained_model] という名前のフォルダーを作成します。
- [usa_building_footprints.dlpk] モデル ファイルを、ダウンロードした場所から [Pretrained_model] フォルダーに移動します。
画像のプロパティの確認
次に、データが、理想的な 8 ビット、3 バンドの高解像度 (10 ~ 40 cm) の画像入力とどの程度一致しているかを調べて確認します。
- ArcGIS Pro の [Seattle_Building_Detection] プロジェクトに戻ります。
- [コンテンツ] ウィンドウで、[Seattle_imagery.jp2] を右クリックして [プロパティ] を選択します。
- [レイヤー プロパティ] ウィンドウで [ソース] をクリックし、[ラスター情報] を展開します。
- [バンド数] フィールドを見つけます。
値は [4] です。 NAIP プログラムは、4 つのスペクトル バンド (青、緑、赤、短波赤外) で構成されたマルチスペクトル画像を収集します。 短波赤外バンドは通常、植生の健全性を視覚化するために使用されます。 モデルは、4 つではなく 3 つのバンド (赤、緑、青) を求めています。 この差を修正する必要があります。
- [セル サイズ X] フィールドと [セル サイズ Y] フィールドを探します。
どちらも値は 1 です。 つまり、画像の各セル (ピクセル) は 1 メートル四方を表します。 この NAIP 画像は、実際に 1 メートルの解像度で撮影されました。 これは、モデルが推奨する 10 ~ 40 cm の高解像度よりも低い解像度です。 この問題を修正する必要もあります。
- [ピクセル深度] フィールドを探します。
値は [8 ビット] になっています。これは、モデルで必要な [8 ビット] に一致しています。
- [OK] をクリックして、[レイヤー プロパティ] ウィンドウを閉じます。
バンド数を表示する別の方法について説明します。
- [コンテンツ] ウィンドウで、[Seattle_imagery.jp2] を右クリックして [シンボル] を選択します。
- [シンボル] ウィンドウで、[赤] の [Band_1] をクリックしてドロップダウン リストを開きます。
4 つのバンドがリスト表示されます。 マルチスペクトル画像を表示する場合、赤、緑、青のチャンネルを通じて一定時間に 3 つのバンドのみを表示し、選択した 3 つのバンドを RGB コンポジットに結合します。 ただし、画像には 4 つのバンドが存在し、さまざまな解析目的に使用できることがわかります。
- [シンボル] ウィンドウを閉じます。
画像と事前トレーニング済みモデルの期待値の間には、バンド数と解像度という 2 つの条件について不一致があることが判明しました。 このワークフローの後半では、この 2 つの問題を解消する方法について学びます。
関連する画像バンドの選択
バンドの不一致を解消します。 自分の画像には、4 つのスペクトル バンドがあります。
- バンド 1 ‐ 赤
- バンド 2 - 緑
- バンド 3 - 青
- バンド 4 - 短波赤外
モデルは、3 バンド入力 (赤、緑、青) を求めています。 問題を解消するため、NAIP 画像の最初の 3 つのバンドのみを含む新しいレイヤーを作成する必要があります。これにより、モデルの要求と一致します。 このステップは重要です。スキップするとモデルのパフォーマンスが低下します。
注意:
画像内のバンドの順序を正確に把握することが非常に重要です。 たとえば、他のタイプの画像では、バンド 1 が青、バンド 2 が緑、バンド 3 が赤というように、バンドの順序が異なることがあります。 その情報は、画像のプロパティまたはドキュメントで確認できます。
ラスター関数を使用して、新しい 3 バンド レイヤーを生成します。
- リボンの [画像] タブの [解析] グループで [ラスター関数] ボタンをクリックします。
- [ラスター関数] ウィンドウの検索ボックスに「バンド抽出」と入力します。 [データ管理] で [バンド抽出] をクリックします。
- 次の [バンド抽出] パラメーター値を設定します。
- [ラスター] で、[Seattle_imagery.jp2] を選択します。
- [組み合わせ] で、値が [1 2 3] であることを確認します。これは、バンド 1 (赤)、2 (緑)、3 (青) を参照します。
- [一致バンドがない場合の操作] で、[失敗] を選択します。
[一致バンドがない場合の操作] は、リスト内のいずれかのバンドを使用できない場合の操作を指定します。 [失敗] は、ラスター関数が中止され、失敗することを示します。 このチュートリアルを問題なく完了するには 3 つのバンドすべての存在が不可欠なので、このオプションを選択します。
- [新しいレイヤーの作成] をクリックします。
[Extract Bands_Seattle_imagery.jp2] という名前の新しいレイヤーが [コンテンツ] ウィンドウに表示されます。 ラスター関数によって作成されたレイヤーは動的に計算されるので、ディスクには保存されません。 この場合は、結果のレイヤーを TIFF ファイルとしてコンピューター上に保存します。 保存するには [ラスターのエクスポート] を使用します。
- [Extract Bands_Seattle_imagery.jp2] を右クリックして、[データ] と [ラスターのエクスポート] を選択します。
- [ラスターのエクスポート] ウィンドウの [出力ラスター データセット] で [参照] ボタンをクリックします。
- [出力場所] ウィンドウで、[フォルダー] → [Seattle_Building_Detection] → [Imagery Data] の順に参照し、[名前] に「Seattle_RGB.tif」と入力して、[保存] をクリックします。
- [出力場所] ウィンドウで、その他のデフォルト値をすべてそのままにして、[エクスポート] をクリックします。
注意:
画像が 16 ビットの場合は、この [ラスターのエクスポート] ステップで、モデルで期待される 8 ビット深度に変換するとよいでしょう。 [ピクセル タイプ] で、[符号なし 8 ビット] を選択して [ピクセル値のスケーリング] チェックをオンにします。 [ピクセル値のスケーリング] をオンにすることで、値が完全に (高い値が削除されることなく) 8 ビットスケールに変換されます [NoData 値] には、元の画像の NoData 値を入力します (例: 「0」)。
該当する NoData 値を調べるには、[コンテンツ] ウィンドウで元の画像を右クリックし、[プロパティ] を選択し、[ソース] → [ラスター情報] → [NoData 値] を確認します。
新しい [Seattle_RGB.tif] レイヤーが [コンテンツ] ウィンドウに表示されます。
- [ラスターのエクスポート] ウィンドウを閉じます。
バンド数を確認します。
- [コンテンツ] ウィンドウで、[Seattle_RGB.tif] を右クリックし、[プロパティ] を選択します。
- [レイヤー プロパティ] ウィンドウで [ソース] をクリックし、[ラスター情報] を展開します。
- [バンド数] フィールドを見つけます。
フィールド値は [3] です。事前トレーニング済みモデルが求めるとおり、レイヤーに 3 つのバンドがあることを確認できます。
- [レイヤー プロパティ] ウィンドウを閉じます。
ワークフローの残りの部分で必要ない画像レイヤーを削除します。
- [コンテンツ] ウィンドウで、[Extract Bands_Seattle_imagery.jp2] を右クリックして [削除] を選択します。
- 同様に、[Seattle_imagery.jp2] を削除します。
プロジェクトを保存します。
- [クイック アクセス ツールバー] の [保存] ボタンをクリックします。
事前トレーニング済みモデルが求める 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 を利用しているかご確認ください。
チュートリアルの残りの部分では、転移学習を実行して事前トレーニング済みモデルを微調整し、データのパフォーマンスを向上させる方法を学びます。
転移学習のトレーニング サンプルの準備
転移学習を実行するには、最初にトレーニング サンプルを生成し、データ内の建物の外観をモデルに示します。 モデルを最初からトレーニングする場合は、何万もの建物サンプルが必要です。 幸いなことに、転移学習では数百しか必要ありません。 チュートリアルのこの部分では、トレーニング サンプルの生成方法について学びます。 最初に、サンプルを格納する空のフィーチャクラスを作成します。 続いて建物を表すポリゴンを描画し、フィーチャクラスに追加します。 最後に、フィーチャクラスと画像を、転移学習で使用するトレーニング チップにエクスポートします。
フィーチャクラスの作成
最初に、フィーチャクラスを作成します。
- リボンの [表示] タブの [ウィンドウ] グループで、[ジオプロセシング] をクリックします。
[ジオプロセシング] ウィンドウが表示されます。
- [ジオプロセシング] ウィンドウの検索ボックスで「Create feature class」と入力します。 結果リストで、[フィーチャクラスの作成 (Create Feature Class)] ツールをクリックして開きます。
- 次のパラメーター値を設定します。
- [フィーチャクラス名] に「Training_examples」と入力します。
- [ジオメトリ タイプ] で、[ポリゴン] が選択されていることを確認します。
- [座標系] で [Seattle_RGB.tif] を選択します。
- その他のデフォルト値をそのままにして、[実行] をクリックします。
[コンテンツ] ウィンドウに、新しい [Training_examples] フィーチャクラスが表示されます。 現時点では空白です。
トレーニング サンプルの描画
[Training_examples] レイヤーにポリゴン フィーチャとして保存される建物フットプリントをトレースします。
- リボン上の [編集] タブの [フィーチャ] グループで [作成] をクリックします。
[フィーチャ作成] ウィンドウが表示されます。
- [フィーチャ作成] ウィンドウで、[Training_examples] をクリックして、[ポリゴン] ボタンをクリックします。
作図ツールバーがマップに表示されます。 デフォルトでは、直線を描画する [ライン] モードに設定されています。
- 作図ツールで [直角ライン] ボタンをクリックします。
- [直角ライン] モードには、直線になるすべてのラインと直角になるすべての角が含まれています。 多くの建物の角は 90 度なので、これは建物フットプリントを描画する際に便利です。 描画プロセス中に、必要に応じて、このモードと [ライン] モードを切り替えることができます。
- リボン上の [マップ] タブにある [ナビゲーション] グループで [ブックマーク] をクリックし、[ラベリング範囲] を選択します。
ここから、建物を定義するポリゴンの描画を開始します。 このプロセスはラベリングとも呼ばれます。対象オブジェクトが画像内のどこにあるかをモデルに伝えます。
注意:
画像内のトレーニング サンプルを作成する場所を決定する際は、地理的位置に応じて一般的な建物があるエリアを選択します。
- マップで、特定の建物を選択し、いずれかの角 (頂点) をクリックします。
- それぞれの角を時計回りにクリックします。
- 最後の角をダブルクリックしてポリゴンを完成させます。
注意:
フィーチャクラスの色 (ここではライト グリーン) はランダムに割り当てられるため、プロジェクトによっては異なる場合があります。
- 同様にして、同じエリアにさらに 2 ~ 3 個のポリゴンを作成します。
ヒント:
作成したポリゴンを気に入らない場合は削除できます。 リボンの [編集] タブの [選択] グループで、[選択] をクリックします。 マップでポリゴンをクリックします。 [編集] タブの [フィーチャ] グループにある [削除] をクリックします。
ポリゴン フィーチャをフィーチャクラスに保存します。
- 作図ツールバーで [完了] ボタンをクリックします。
- リボン上の [編集] タブにある [編集の管理] グループで、[保存] をクリックします。
- [フィーチャ作成] ウィンドウを閉じます。
実際のプロジェクトでは、さらに 200 ~ 300 の建物を定義する必要があります。 ただし、このチュートリアルを簡潔にするため、あらかじめ用意されているおよそ 200 のトレーニング サンプルのセットを使用します。
- [ジオプロセシング] ウィンドウの下部にある [カタログ] をクリックしてカタログ ウィンドウに戻ります。
- [カタログ] ウィンドウで、[データベース] と [Output_provided.gdb] を展開します。
- [Training_examples_larger_set] を右クリックして、[現在のマップに追加] を選択します。
トレーニング サンプルのセットが表示されます。
長方形の範囲が選択され、その範囲内のすべての建物にポリゴンが作成されたことを確認します。 [Training_examples] レイヤーは必要なくなったので、削除します。
- [コンテンツ] ウィンドウで、[Terrain_examples] レイヤーを右クリックして [削除] を選択します。
- Ctrl + S を押して、プロジェクトを保存します。
200 を超えるトレーニング サンプルを含むレイヤーが準備できました。
クラス フィールドの追加
建物フットプリント ポリゴンをトレースしたので、それらをすべて特定クラスに属するように指定する必要があります。 ワークフローによっては、建物フットプリント、樹木、車など、ラベル付きオブジェクトが異なるクラス (またはカテゴリ) に属する可能性があります。 このチュートリアルでは、建物フットプリント クラスのみがあります。 [Class] フィールドを [Training_examples_larger_set] レイヤーに追加して、データを入力します。
- [コンテンツ] ウィンドウで、[Training_examples_larger_set] レイヤーを右クリックして [属性テーブル] を選択します。
レイヤーの属性テーブルが開き、各ポリゴンの情報が表示されます。
- [Training_examples_larger_set] 属性テーブルで、[追加] をクリックします。
- [フィールド: Training_examples_larger_set] タブで、テーブルの最終行に次の情報を入力します。
- [フィールド名] に「Class」と入力します。
- [データ タイプ] で、[Long] をクリックして [Short] に変更します。
[Short] データ タイプには整数値が格納されます。
- リボンの [フィールド] タブの [変更] グループで、[保存] をクリックします。
- [フィールド: Training_examples_larger_set] ウィンドウを閉じます。
これで [Class] フィールドが作成できたので、数値を入力します。 建物フットプリント クラスを数値 [1] で表すことを任意に決定します。
- [Training_examples_larger_set] 属性テーブルで、[計算] をクリックします。
- [フィールド演算] ウィンドウで、以下のパラメーター値を設定します。
- [フィールド名] で、[Class] を選択します。
- [Class =] に「1」と入力します。
- その他はすべてデフォルト値のままにし、[OK] をクリックします。
- [Class] 列で、値 [1] が各ポリゴン フィーチャに割り当てられていることを確認します。
[Class] フィールドのおかげで、モデルは、すべてのトレーニング サンプルが同じ種類のオブジェクト、つまり 1 で表される建物フットプリントであることを認識します。
- [Training_examples_larger_set] 属性テーブルを閉じます。
トレーニング チップと画像クリップの詳細
ディープ ラーニング モデルは、1 回のパスでは広いエリアをトレーニングできず、チップと呼ばれる画像の小さな切り抜きに限定して処理を行います。 チップは、画像タイルと、オブジェクトの位置を示す対応するラベル タイル (この場合は buildings) から作成されます。 これらのチップは、転移学習トレーニング プロセス中にモデルに入力されます。
[Seattle_RGB.tif] 画像と [Training_examples] レイヤーを使用して、トレーニング チップを生成します。 重要なポイントは、ラベルが付いていない建物を含むチップの生成を回避することです。 このようなチップがあると、建物がまったくないことを表しながら、モデルに建物を表示することになります。 これはモデルを混乱させ、パフォーマンスに悪影響を与えます。 これを回避するため、トレーニング サンプルが存在する範囲に限定された画像クリップを作成します。
- [カタログ] ウィンドウの下部にある [ジオプロセシング] をクリックします。
- [ジオプロセシング] ウィンドウの [戻る] ボタンをクリックします。
- [ラスターのクリップ (Clip Raster)] ツールを検索して開きます。
- 次の [ラスターのクリップ] パラメーター値を設定します。
- [入力ラスター] で [Seattle_RGB.tif] を選択します。
- [出力範囲] で [Training_examples_larger_set] を選択します。
- [出力ラスター データセット] で、[参照] ボタンをクリックします。 [出力ラスター データセット] ウィンドウで、[フォルダー] → [Seattle_Building_Detection] → [Imagery_data] の順に参照し、[名前] に「Seattle_RGB_clip.tif」と入力して、[保存] をクリックします。
- [実行] をクリックします。
[コンテンツ] ウィンドウに [Seattle_RGB_clip.tif] レイヤーが表示されます。
- [コンテンツ] ウィンドウで、[Seattle_RGB_clip.tif] の横にあるチェックボックスをクリックして、レイヤーをオフにします。
マップには、クリップされたレイヤーとトレーニング サンプルのみが表示されています。 画像に表示されるすべての建物には、対応する建物ポリゴンがあります。
トレーニング チップの生成
トレーニング チップを生成します。 また、転移学習プロセスに関連するデータ エレメントを保存するフォルダーを作成します。
- [カタログ] タブをクリックしてウィンドウを切り替えます。
- 必要に応じて、[フォルダー] と [Seattle_Building_Detection] を展開します。
- [Seattle_Building_Detection] を右クリックし、[新規] をポイントして、[フォルダー] を選択します。
- [新しいフォルダー] の名前として「Transfer_learning_data」と入力して、Enter キーを押します。
- [ジオプロセシング] タブをクリックしてウィンドウを切り替えます。
- [ジオプロセシング] ウィンドウの [戻る] ボタンをクリックします。
- [ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data For Deep Learning)] ツールを検索して開きます。
- [ディープ ラーニング用のトレーニング データをエクスポート (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] というフォルダーに格納されます。
- [クラス値フィールド] で、[Class] を選択します。
前半で定義した [Class] フィールドは、どのオブジェクトがどのラベルに属するかを指定します (この場合は、すべてのオブジェクトが建物フットプリントを示すクラス [1] に属します)。
- [タイル サイズ 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" の行を探します。
- [ストライド X] と [ストライド Y] に「64」と入力します。
このパラメーターは、次の画像チップを作成する際に X および Y 方向に移動する距離 (ピクセル単位) を制御します。 この値は、トレーニング データの量によって決まります。 この値を小さく設定することで、生成されるチップの数を最大にできます。 この値を試してみることもできますが、このチュートリアルでは、値 [64] が適切に機能することがわかりました。
- [メタデータ形式] で [RCNN マスク] を選択します。
ディープ ラーニング モデルの種類が異なれば、チップに必要なメタデータ形式も異なります。 ワークフローの前半で、事前トレーニング済みモデルが MaskRCNN アーキテクチャに基づいていることに着目しました。 ここでは、そのモデルに対応した値を選択する必要があります。
ヒント:
ツールのパラメーターの詳細については、パラメーターをポイントして、横にある情報ボタンをクリックします。
- その他のデフォルト値をそのままにして、[実行] をクリックします。
しばらくすると、処理が完了します。
トレーニング チップの検査
生成したチップの一部を調べます。
- [カタログ] ウィンドウで [フォルダー]、[Seattle_Building_Detection]、[Transfer_learning_data]、および [Training_chips] を展開します。
- 画像タイルは [images] フォルダーに、ラベル タイルは [labels] フォルダーにあります。
- [images] フォルダーを展開して、1 つ目の画像である [000000000000.tif] を右クリックし、[現在のマップに追加] を選択します。 統計を計算するよう求められた場合は、[いいえ] をクリックします。
- [コンテンツ] ウィンドウで [Training_examples_larger_set] および [Seattle_RGB_clip.tif] をオフにして、タイルを見やすくします。
- [カタログ] ウィンドウで、[images] フォルダーを折りたたんで [labels] および [1] フォルダーを展開し、1 つ目のラベル タイルである [000000000000.tif] をマップに追加します。 統計を計算するよう求められた場合は、[いいえ] をクリックします。
注意:
画像とラベルのペアは、同じ名前で認識できます。
- [コンテンツ] ウィンドウで、ラベル タイルをクリックしてオンまたはオフにすると、その下の画像タイルが表示されます。
- ラベル タイルのピクセルの一部をクリックすると、情報ポップアップにその値が表示されます。
注意:
ラベル タイルで、建物を表さないピクセルの値は [0] になります。 建物を表すすべてのピクセルの値は [0] より大きくなります。 特定の値は、元の建物ポリゴンのオブジェクト ID (前のサンプル画像の [28] など) から得られます。
- 必要に応じて、さらに画像タイルとラベル タイルのペアをマップに追加し、確認します。
- 完了したら、[コンテンツ] ウィンドウからすべてのタイルを削除し、[Training_examples_larger_set] レイヤーと [Seattle_RGB.tif] レイヤーをオンに戻します。
- [カタログ] ウィンドウで、[Training_chips] フォルダーを折りたたみます。
- Ctrl + S キーを押して、プロジェクトを保存します。
トレーニング チップを生成したので、転移学習プロセスを開始できるようになりました。
転移学習の実行と建物の抽出
次に転移学習を実行します。 [usa_building_footprints.dlpk] 事前トレーニング済みモデルをさらにトレーニングするために生成したチップを使用します。 続いて、微調整されたモデルをシアトルの画像に適用し、パフォーマンスの大幅な向上を確認します。
モデルの微調整
まず、[ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールを使用してモデルを微調整します。
- [ジオプロセシング] ウィンドウに切り替えて、[戻る] ボタンをクリックします。
- [ジオプロセシング] ウィンドウで、[ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールを検索して開きます。
- [ディープ ラーニング モデルのトレーニング (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] が、転移学習プロセスの結果得られた、新しい微調整済みモデルの名前になります。
ヒント:
各モデルとそれに対応するトレーニング チップを同じフォルダーに保存すると、どのモデルがどのデータでトレーニングされたかを思い出しやすくなります。
- [高度な設定] セクションを展開して、次のパラメーター値を設定します。
- [事前トレーニング済みモデル] で [参照] ボタンをクリックします。 [usa_building_footprints.dlpk] 事前トレーニング済みモデルを保存したフォルダーを参照して選択し、[OK] をクリックします。
- [モデルの固定] チェックボックスがオンになっていることを確認します。
[モデルの固定] オプションを指定すると、モデルの最後のレイヤーのみが新しいトレーニング データの影響を受け、そのコア レイヤーは変更されません。 多くの転移学習の事例でこの設定が選択されます。それにより、モデルがその中核となる知識を学習しないリスクを回避できます。
注意:
[入力トレーニング データ] の横にエラー インジケーターが表示される場合は、インストールされているディープ ラーニング ライブラリのバージョンが正しくありません。 Ctrl + S キーを押してプロジェクトを保存し、ArcGIS Pro を終了して、「ArcGIS 用のディープ ラーニング フレームワークのインストール」の手順を実行します。 以前にディープ ラーニング ライブラリをインストールしている場合は、[以前のバージョンからのアップグレード] の下に一覧表示されている手順を実行します。 インストールが完了したら、ArcGIS Pro プロジェクトを再度開いてレッスンを続行できます。
- [モデル パラメーター] セクションを展開し、[バッチ サイズ] が [4] に設定されていることを確認します。
ヒント:
ツールのパラメーターの詳細については、横にある情報ボタンをクリックします。
- [ジオプロセシング] ウィンドウの [環境] タブをクリックします。 [プロセッサー タイプ] で、[GPU] を選択します。
注意:
このチュートリアルは、コンピューターに GPU が搭載されていることを前提とします。 GPU が搭載されていない場合は CPU で処理できますが、データの処理に時間がかかります。 後者の場合は、[CPU] オプションを選択します。
- その他のデフォルト値をそのままにして、[実行] をクリックします。
この処理の実行には 10 分以上かかる場合があります。
ヒント:
メモリ不足エラーが発生した場合は、原因として、コンピューターに 4 つのタイルを一括処理する十分なメモリがないことが考えられます。 [バッチ サイズ] の値を [4] から [2] または [1] に変更してみてください。 この値を小さくしてもモデルの品質には影響せず、モデルのトレーニング プロセスの効率にのみ影響します。
これで、データのパフォーマンスを向上させるよう微調整された強化モデルとして [Seattle_1m_Building_Footprints] ができました。
推測の実行
転移学習が完了したので、微調整されたモデルを使用して、[Seattle_RGB.tif] イメージ レイヤーで推測を実行し、レイヤー内の建物を検出します。
- [ジオプロセシング] ウィンドウの [戻る] ボタンをクリックします。
- [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールを検索して開きます。
- [ディープ ラーニングを使用したオブジェクトの検出 (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] をクリックします。
モデル定義を読み込むと、モデルの引数が自動的に入力されます。
- [パディング] で、値が [64] になっていることを確認します。
パディングは、検出時に無視される各画像チップ内の境界エリアを指定するものです。 建物の断片が画像チップのエッジに現れても、パディングによって、検出の対象とは見なされません。 [64] という値は、画像チップのすべての面でパディングが 64 ピクセル幅になることを意味します。
注意:
モデルは、パディングの値に合わせてストライドを調整します。 モデルが隣接エリアに進むにつれて、前の画像チップのエッジに断片として現れた建物は、すぐに次の画像チップのうちの 1 つの中心に全体で現れ、そこで正常に検出されます。 パディング (とその他の推論パラメーター) について詳しくは、「Deep Learning with ArcGIS Pro Tips & Tricks: Part 2」の「Understand parameters for inferencing」セクションをご参照ください。
- [batch_size] は、トレーニング プロセスで使用したのと同じ値 ([4] 以下) を使用します。
これにより、ツールは、コンピューター上で利用可能なメモリ量の範囲内で実行されます。
- [閾値] の値が [0.9] になっていることを確認します。
これは 0 と 1 の間のカットオフ値です。 この値は、オブジェクトを建物であると宣言する前に、モデルがどの程度確信している必要があるかを示します。 [0.9] という値は、モデルが 90 パーセントの確信を持つべきであることを示します。
- [tile_size] の値が [256] であることを確認します。
これは、モデルが推論を実行するために取り込む画像チップのサイズです。 この値は、モデルのトレーニングに使用されたチップと同サイズである必要があります。
- [Non Maximum Suppression] チェックボックスをオンにします。
オーバーラップしている建物フットプリントがオーバーラップしている場合は、[Non Maximum Suppression] オプションを使用すると、最も信頼できる建物ポリゴン フィーチャのみが保持され、他のポリゴン フィーチャは削除されます。
- [ジオプロセシング] ウィンドウの [環境] タブをクリックします。
- [プロセッサー タイプ] で、[GPU] を選択します。
この時点で、ツールをそのまま実行できます。ツールは、[Seattle_RGB.tif] 画像全体に対して建物の検出を続行します。この処理には、コンピューターの仕様に応じて 10 分から 1 時間かかる可能性があります。 このチュートリアルを簡素化するため、ここでは、画像入力の小さいサブセット内の建物のみを検出します。
- リボンの [マップ] タブの [ナビゲーション] グループで、[ブックマーク] をクリックして [Inference extent] を選択します。
マップに、シアトルのより狭い地域が拡大表示されます。
- [ジオプロセシング] ウィンドウの [環境] タブにある [処理範囲] の [範囲] で、[現在の表示範囲] を選択します。
- [実行] をクリックします。
数分後に処理が完了し、[Seattle_buildings] 出力レイヤーが [コンテンツ] ウィンドウとマップに表示されます。 今回は、ほぼすべての建物が検出されたことを確認できます。
転移学習によって微調整された事前トレーニング済みモデルを使用して、シアトルのエリアにある建物を検出することができました。
結果の比較
次に、既製の事前トレーニング済みモデルと転移学習で微調整したモデルを実行して取得した 2 つの建物フットプリント レイヤーを比較します。 いずれも、画像の範囲全体に対する結果を示しています。 前のセクションで学んだ手法を使用して両レイヤーを自分で生成することもできますが、時間の都合上、用意されたレイヤーを使用します。 まず、これらのレイヤーを含むマップを開きます。
- [カタログ] ウィンドウで、[マップ] を展開します。 [全体表示の結果] を右クリックして [開く] を選択します。
マップが開きます。 次の 2 つのポリゴン フィーチャクラスが含まれています。
- Seattle_buildings_off_the_shelf
- Seattle_buildings_with_transfer_learning
[スワイプ] ツールを使用して 2 つのレイヤーを比較します。
- [コンテンツ] ウィンドウで、[Seattle_buildings_off_the_shelf] をクリックして選択します。
- リボンの [フィーチャ レイヤー] タブの [比較] グループで、[スワイプ] をクリックします。
- マップで、スワイプ ハンドルを使用して上下または左右に繰り返しドラッグし、上のレイヤーをめくって下のレイヤーを表示します。
- 拡大/縮小および画面移動してさまざまなエリアを調べ、結果の品質の違いを視覚的に評価します。
ヒント:
スワイプ モードでは、マウス ホイールを使用して表示を拡大/縮小できます。また、キーボードで C キーを押してマウスをドラッグすることで画面移動できます。
微調整されたモデルは、画像内のより小さい建物の建物フットプリントを識別する場合に、既製のモデルと比較してはるかに優れています。 [スワイプ] ツールを使用して、転移学習レイヤーの結果を、画像で視覚的に確認できる建物と比較します。
- [コンテンツ] ウィンドウで、[Seattle_buildings_off_the_shelf] レイヤーをオフにし、[Seattle_buildings_with_transfer_learning] レイヤーを選択します。
- [スワイプ] ツールを使用して 2 つのレイヤーを比較します。
微調整されたモデルの結果として得られたレイヤーはまだ不完全で、あちらこちらでいくつかの建物が欠落していることを確認できるかもしれません。 転移学習によるモデルの微調整は、反復的なプロセスになる傾向があります。 さらに多くのトレーニング サンプルを収集し、転移学習トレーニングをもう一度実施することで、引き続きモデルのパフォーマンスを向上できます。 手短に概観すると、手順は次のようになります。
- まず、モデルが見落とした建物のタイプを確認します。
- その建物タイプを対象とする新しいサンプル ポリゴンを収集し、新しいトレーニング チップを生成して、新しいフォルダーに保存します。 前と同じガイドラインに沿って、ラベルのない建物がチップに含まれないように画像をクリップしてください。
- 新しいトレーニング セッションを実行します。既製の事前トレーニング済みモデルから始めて、これまでに作成したすべてのチップを入力 (つまり、[入力フィーチャトレーニング データ] パラメーターにすべてのチップ フォルダーをリスト) します。 これは、モデルがすべてのトレーニング チップを同等に処理するためのベスト プラクティスです。
- 画像の探索を終了したら、リボンの [マップ] タブの [ナビゲーション] グループで [マップ操作] ボタンをクリックしてスワイプ モードを終了します。
- Ctrl + S キーを押して、プロジェクトを保存します。
このチュートリアルでは、ディープ ラーニングを使用して、ArcGIS Pro の航空写真から建物フットプリントを抽出しました。 ArcGIS Living Atlas から事前トレーニング済みモデルを選択し、入力データをモデルの要求と一致させることの重要性を学びました。 必要なバンド数を含む新しいイメージ レイヤーを作成しました。 次に、転移学習を適用して解像度の不一致を修正し、画像に対するモデルのパフォーマンスを微調整しました。少数の新しいトレーニング サンプルを入力して、モデルをさらにトレーニングしました。 続いて、微調整されたモデルをシアトル地域に適用して、強化された結果を得ました。