トレーニング サンプルの作成
トンガ王国のコロバイの農園にあるヤシの木それぞれの健康状態を目録に記入し、評価するには、大変な時間と労働力がかかります。 このプロセスを簡略化するために、ArcGIS Pro のディープ ラーニング モデルを使用して、樹木を識別し、植生の若さを計測することで健康状態を算出します。 最初に、トンガ王国のコロバイを表示する衛星画像として、樹木を識別できるだけの高い空間およびスペクトル解像度の衛星画像を検索します。 衛星画像を入手したら、トレーニング サンプルを作成し、それらをディープ ラーニング モデルで使用できる形式に変換します。 モデルが検索内容を認識できるように、ヤシの木の画像を定義して同じピクセルと樹木サイズを識別できるようにします。
注意:
ディープ ラーニング ツールを ArcGIS Pro で使用するには、正しいディープ ラーニング ライブラリがコンピューター上にインストールされている必要があります。 これらのファイルがインストールされていない場合は、ArcGIS Pro が閉じていることを確認して、「ArcGIS Pro でのディープ ラーニングの準備」に記載された手順に従います。 これらの手順では、お使いのコンピューター ハードウェアとソフトウェアでディープ ラーニング ワークフローを実行できるかどうかを確認する方法と他の有用なヒントについても説明します。 インストールが完了したら、このチュートリアルを続行できます。
画像のダウンロード
フィーチャの抽出には、正確で高解像度の衛星画像が不可欠です。 ピクセル サイズがヤシの林冠を識別できるほどに小さくなければ、モデルはヤシの木を識別できません。 さらに、樹木の健康状態を算出するには、画像に植生の健康状態指数を生成できるスペクトル バンドが必要です。 OpenAerialMap (高解像度でマルチスペクトルの画像のあるオープンソースのリポジトリ) からこのレッスンに必要な衛星画像を見つけてダウンロードします。
- OpenAerialMap Web サイトに移動します。
- [エクスポートの開始] をクリックします。
対話型マップ ビューで、地球上のあらゆる場所で使用できる衛星画像のズーム、画面移動、検索ができます。 マップはグリッドに分割されています。 グリッド ボックスをポイントすると、数字が表示されます。 この数字は、そのボックスの使用可能な画像数を示します。
- 検索ボックスに「Kolovai」と入力し、Enter キーを押します。 結果のリストで [Kolovai] をクリックします。
マップでコロバイが拡大表示されます。 これは、ココナッツの農園があるトンガタプ島にある町です。
- 必要に応じて、拡大表示してマップ上にコロバイのラベルを表示します。 コロバイの真上にあるグリッド ボックスをクリックします。
- サイド ウィンドウで、Cristiano Giovando による [Kolovai UAV4R Subset (OSM-Fit)] をクリックします。
- ダウンロード ボタンをクリックして、未加工の .tif ファイルをダウンロードします。 任意の場所に画像を保存します。
ファイル サイズによっては、ダウンロードに数分かかることがあります。
このファイルのデフォルト名は 5b1b6fb2-5024-4681-a175-9b667174f48c です。
データの調査
分類プロセスを開始するには、トレーニング サンプルの作成手順を示すいくつかのブックマークが含まれている ArcGIS Pro プロジェクトをダウンロードします。
- Palm_Tree_Detection.zip ファイルをダウンロードし、その内容をコンピューター上の適切な場所に展開します。
ファイル サイズによっては、ダウンロードに数分かかることがあります。
- 必要に応じて、展開された Palm_Tree_Detection フォルダーを開きます。 Kolovai フォルダーを開きます。 Kolovai ArcGIS プロジェクト ファイルをダブルクリックします。
サイン インを求められたら、ArcGIS Online または ArcGIS Enterprise アカウントにサイン インします。
注意:
組織アカウントがない場合は、ソフトウェア アクセスのオプションをご参照ください。
プロジェクトは空白のマップで開くため、ダウンロードした画像を追加します。
- リボンの [マップ] タブの [レイヤー] グループで、[データの追加] をクリックします。
[データの追加] ウィンドウが開きます。
- [データの追加] ウィンドウの [コンピューター] で、OpenAerialMap からダウンロードしたコロバイの画像 (ファイル名が [5b1b6fb2-5024-4681-a175-9b667174f48c] であることに注意してください) を参照します。 .tif ファイルを選択して [OK] をクリックします。
注意:
[統計情報の計算] ウィンドウが表示されたら、[はい] をクリックします。
コロバイの画像がマップに追加されます。 レイヤーは、一意の ID 別に [コンテンツ] ウィンドウに一覧表示されます。ID に意味はありません。 レイヤーをわかりやすい名前に変更することをお勧めします。
- [コンテンツ] ウィンドウで、現在のレイヤー名を 2 回クリックして「Imagery」と入力します。 Enter キーを押します。
- マップを画面移動しズームして、ヤシ農園の外観を確認します。
この画像には多数のココヤシの木があります。 現場で 1 つ 1 つ数えたり、画像を見ながら数えたりすると、数日かかります。 ディープ ラーニング モデルをこの作業に利用するために、モデルのトレーニングに使用できるヤシの木のサンプルを作成します。
トレーニング スキーマの作成
ディープ ラーニング モデル (画像分類モデル) をトレーニングする場合、すぐれたトレーニング サンプルを作成することが不可欠です。 多くの場合、これはプロセスの中で最も時間のかかる手順です。 画像内のすべてのヤシの木を抽出するのに必要な情報をディープ ラーニング モデルに提供するには、多数のヤシの木のフィーチャを作成して、ココヤシの大きさ、形状、およびスペクトル シグネチャをモデルに教えます。 これらのトレーニング サンプルは、[ディープ ラーニングのオブジェクトのラベル付け] ツールを使用して作成および管理されます。
注意:
トレーニング データセットを作成するには、数百個のフィーチャをデジタイズする必要があるため、時間がかかることがあります。 トレーニング サンプルを作成したくない場合は、[Provided Results] フォルダーの [Results] ジオデータベースにデータセットが用意されています。 「画像チップの作成」セクションに進むことができます。
- [コンテンツ] ウィンドウで、[Imagery] レイヤーが選択されていることを確認します。
- リボンの [画像] タブをクリックします。 [画像分類] グループで、[分類ツール] をクリックして、[ディープ ラーニングのオブジェクトのラベル付け] を選択します。
[画像分類] ウィンドウに、空白のスキーマが表示されます。 衛星画像からココヤシの木を抽出することのみが目的であるため、1 つのクラスのみを設定したスキーマを作成します。
- [画像分類] ウィンドウで、[新しいスキーマ] を右クリックし、[プロパティの編集] を選択します。
- [名前] に、「Coconut Palms」と入力します。
- [保存] をクリックします。
スキーマの名前が [画像分類] ウィンドウで変更されます。 これで、クラスを追加できるようになります。
- [Coconut Palms] を右クリックして [新しいクラスの追加] を選択します。
[新しいクラスの追加] ウィンドウが表示されます。 モデルをトレーニングするクラスのパラメーターをいくつか設定します。
- [名前] に、「Palm」と入力します。
次に、モデルをトレーニングする際にコンピューターによって使用される値 (コード) を設定します。 ヤシの木には値 1 が割り当てられます。
- [値] に、「1」と入力します。
最後に、フィーチャの識別に使用する色を選択します。 任意の色を選択できますが、大部分が緑色の画像上のフィーチャをデジタイズするため、黄色が最も目立ちます。
- [色] で、[ソーラー イエロー] などの明るい黄色を選択します。
ヒント:
色の名前を表示するには、色の四角形にポインターを合わせます。
- [OK] をクリックします。
[画像分類] ウィンドウで、[Palm] クラスが [Coconut Palms] スキーマに追加されます。 ディープ ラーニング モデルをトレーニングするために、[Palm] クラスを設定したフィーチャを作成します。
トレーニング サンプルの作成
エリア内の樹木の代表的なサンプルを確実に取得するために、画像全体のフィーチャをデジタイズします。 これらのフィーチャは、画像チップと呼ばれる形式で、ディープ ラーニング モデルに読み込まれます。 画像チップは、ソース画像からカットされた画像の小さいブロックです。 [画像分類] ウィンドウで十分な数のフィーチャを作成したら、メタデータを持つ画像チップとしてこれらのフィーチャをエクスポートします。
- リボンの [マップ] タブをクリックします。 [ナビゲーション] グループで、[ブックマーク] をクリックして [Training Location 1] を選択します。
マップで、識別するヤシの木のサンプルの 1 つ目のエリアが拡大表示されます。
- [画像分類] ウィンドウで、[Palm] クラスを選択し、[円] ツールをクリックします。
このツールを使用して、現在表示されている各ヤシの木の周囲に円を描きます。 フィーチャの中心から外側へ円が描画され、フィーチャの半径が計測されます。
- マップ上で、ヤシの木の中心をクリックし、1 本の木の周囲に円を描きます。
ヤシの新しいレコードが [画像分類] ウィンドウの [ラベル付きオブジェクト] グループに追加されます。 マップ内のすべてのヤシの木をマークして多数の画像チップを作成するために、すべての木のヤシ レコードを作成します。
- マップ表示内の各木の周囲に円を描きます。
注意:
これらの円の描画方法を理解するために追加のガイダンスが必要な場合や、樹木のデジタイズを省略したい場合には、ダウンロードしたフォルダー内にトレーニング サンプルのデータセットが用意されています。 リボンの [マップ] タブの [レイヤー] グループで、[データの追加] をクリックします。 [Databases] フォルダーを参照し、[Results] ジオデータベースをダブルクリックします。 [PalmTraining] をクリックして、[OK] をクリックします。
この 1 つ目のブックマークの範囲が終了すると、[トレーニング サンプル マネージャー] ウィンドウにおよそ 180 のサンプルが記録されます。
樹木を識別する際には、次の点に注意してください。
- デジタイズを容易に行うためにマップの拡大や画面移動を行えますが、ブックマークの範囲内にあるできるだけ多くの樹木をデジタイズしてください。
- 樹木があるかどうかはっきりしない場所については、スキップしてください。 必ず正確なトレーニング サンプルを作成してください。
- 描く円が重なっていてもかまいません。
- 最終モデルでは識別した樹木のサイズが考慮されるため、小さいヤシの木と大きいヤシの木の両方必ずマークしてください。
- 残りの 6 つの [Training Location] ブックマークごとにすべてのヤシの木のトレーニング サンプルを作成します。
トレーニング サンプルのデジタイズは、時間のかかるプロセスですが、多数のサンプルを作成できるメリットがあります。 トレーニング データとしてモデルに提供するサンプルが多いほど、結果が正確になります。
たとえば、このチュートリアルで提供されているモデルのトレーニングに使用されたトレーニング データセットには 600 個以上のサンプルが含まれていました。
- サンプルの作成が完了したら、[画像分類] ウィンドウで [保存] をクリックします。
- [現在のトレーニング サンプルの保存] ウィンドウの [プロジェクト] で、[データベース] をクリックし、デフォルトのプロジェクト ジオデータベース [Kolovai.gdb] をダブルクリックします。
- フィーチャクラスに「PalmTraining」という名前を付けて [保存] をクリックします。
- [画像分類] ウィンドウを閉じます。 [オブジェクトのラベル付け] ウィンドウが表示されたら、[はい] をクリックします。
トレーニング サンプルをジオデータベースに保存しましたが、このデータセットにアクセスするにはジオデータベースを更新する必要があります。
- リボンの [表示] タブをクリックします。 [ウィンドウ] グループで、[カタログ ウィンドウ] をクリックします。
[カタログ] ウィンドウが表示されます。
- [データベース] を展開します。 [Kolovai] を右クリックして [更新] を選択します。
これで [PalmTraining] フィーチャクラスが表示されるようになりました。
- [クイック アクセス ツールバー] で、[保存] をクリックします。
画像チップの作成
モデルをトレーニングするための最後の手順として、トレーニング サンプルを画像チップとして正しい形式にエクスポートします。
- ArcGIS Pro アプリケーション ウィンドウの上部にある [コマンド検索] に「Export Training Data for Deep Learning」と入力します。 [ディープ ラーニング用のトレーニング データをエクスポート] をクリックします。
[ジオプロセシング] ウィンドウが表示されます。
画像チップ作成のパラメーターを設定します。 最初に、トレーニングに使用する画像を選択します。
- [入力ラスター] で、[Imagery] を選択します。
次に、画像チップを保存するフォルダーを作成します。
- [出力フォルダー] に、「imagechips」と入力します。
次に、作成したトレーニング サンプルが含まれているフィーチャクラスを選択します。
- [入力フィーチャクラス、分類ラスター、またはテーブル] で、[Kolovai] ジオデータベースを参照します。 [PalmTraining] をクリックして、[OK] をクリックします。
注意:
トレーニング サンプルを描画しなかった場合は、提供されているデータセットを使用できます。 [Databases] を参照し、[Results] ジオデータベースを開きます。 [PalmTraining] を選択して、[OK] をクリックします。
次に、描画した各フィーチャのクラス値が格納されているトレーニング データのフィールドを選択します。 ヤシの木のクラス値が 1 であったことを思い出してください。
- [クラス値フィールド] で、[Classvalue] を選択します。
次に、チップの出力形式を選択します。 選択する形式は、トレーニングするディープ ラーニング モデルのタイプに基づきます。
- [イメージ形式] で、[JPEG 形式] を選択します。
次に、各画像チップのサイズをピクセルで設定します。 画像チップのサイズは、検出しようとするフィーチャのサイズによって決まります。 フィーチャがタイルの X および Y ディメンションより大きい場合、そのモデルでは良好な結果が得られません。
- [タイル サイズ X] と [タイル サイズ Y] で、「448」と入力します。
次に、出力形式が正しいことを確認します。 これも、作成しているディープ ラーニング モデルのタイプによって異なります。
- [メタデータ形式] で、[PASCAL Visual Object Classes] が選択されていることを確認します。
ツールを実行して画像チップを作成する前に、ツールの環境を設定します。 特に、画像の解像度を確認する必要があります。 入力画像と同じ解像度で画像チップを作成することをお勧めします。
- [環境] タブをクリックします。
- [ラスター解析] の [セル サイズ] で、[レイヤー Imagery と同じ] を選択します。
- [実行] をクリックします。
コンピューターのハードウェアによっては、ツールの実行に数分かかります。
画像チップが作成され、ディープ ラーニング モデルのトレーニングに使用可能になりました。
- プロジェクトを保存します。
このモジュールでは、オープンソースの衛星画像をプロジェクトにダウンロードして追加し、[トレーニング サンプル マネージャー] ウィンドウを使用してトレーニング サンプルを作成し、トレーニング用のディープ ラーニング モデルに対応する形式にサンプルをエクスポートしました。 次に、ディープ ラーニング モデルを作成して、農園のすべての樹木を識別します。
ディープ ラーニング モデルを使用したヤシの木の検出
ヤシの木の検出を開始する前に、モデルをトレーニングする必要があります。 モデルをトレーニングするには、トレーニング サンプル データを取得し、ニューラル ネットワークに繰り返し読み込ませる必要があります。 計算負荷が高いこのプロセスはジオプロセシング ツールによって処理されますが、この過程でモデルは何がヤシの木で何がヤシの木でないかを学習します。 モデルが作成された後、このモデルを画像に適用して樹木を自動的に識別します。
ディープ ラーニング モデルのトレーニング
[ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ジオプロセシング ツールは、ラベル付けされた画像チップを使用して、指定された画像内でどのピクセルの組み合わせがヤシの木を表すかを判別します。 これらのトレーニング サンプルを使用してシングル ショット検出器 (SSD) ディープ ラーニング モデルをトレーニングします。
コンピューターのハードウェアによっては、モデルのトレーニングに 1 時間以上かかることがあります。 コンピューターに専用のグラフィックス処理装置 (GPU) が搭載されていることが推奨されます。 モデルをトレーニングしない場合は、プロジェクトの [Provided Results] フォルダーにディープ ラーニング モデルがユーザー用に用意されています。 必要に応じて、このセクションをスキップして、このチュートリアルの「ヤシの木の検出」セクションに進むこともできます。
- リボンの [コマンド検索] に、「ディープ ラーニング モデルのトレーニング」と入力します。 [ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] を選択します。
[ジオプロセシング] ウィンドウが表示されます。
最初に、トレーニング サンプルを使用するようにツールを設定します。
- [ジオプロセシング] ウィンドウの [入力トレーニング データ] で、Kolovai プロジェクト フォルダーを参照します。 imagechips フォルダーを選択し、[OK] をクリックします。
フォルダーの読み込みには数秒かかる場合があります。
imagechips フォルダーには 2 つのフォルダーと 2 つのテキスト ファイル (.json および .emd) があります。これらは、[ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data for Deep Learning)] ツールから作成されたものです。 esri_model_definition.emd ファイルは、モデルをトレーニングしたデータ サイエンティストが設定するテンプレートです。ディープ ラーニング フレームワーク、トレーニング済みモデルへのパス、クラス名、モデル タイプ、トレーニングで使用される画像の画像仕様などの情報があります。 .emd ファイルにより、トレーニング済みモデルと ArcGIS Pro が統合されます。
次に、モデルを保存するフォルダーを作成します。
- [出力モデル] に、「classify_palms」と入力します。
次に、モデルを実行するエポックの数を設定します。 エポックとは、トレーニング データセットを処理する完全な 1 サイクルをいいます。 エポックごとに、imagechips フォルダーに保存したトレーニング データセットがニューラル ネットワークを通って前方/後方に 1 回渡されます。
- [最大エポック] に、「50」と入力します。
次に、画像内のオブジェクトを検出するためにトレーニングするモデル タイプが正しいことを確認します。 モデル タイプによって、モデルのトレーニングに使用するディープ ラーニング アルゴリズムとニューラル ネットワークが決まります。 この例では、シングル ショット検出器手法を使用します。この手法がオブジェクト検出用に最適化されているためです。
- [モデル パラメーター] を展開して、[モデル タイプ] が [シングル ショット検出器 (オブジェクト検出)] に設定されていることを確認します。
次に、バッチ サイズを設定します。 このパラメーターでは、一度にトレーニングされるトレーニング サンプルの数を指定します。
- [バッチ サイズ] に、「8」と入力します。
次に、100 回のエポックすべてでモデルが実行されるようにします。
- [高度な設定] を展開し、[モデルが改善しなくなったら停止] チェックボックスをオフにします。
- 残りのパラメーターについてはデフォルト値をそのまま使用します。
モデル引数や、モデルのトレーニングに使用されるパラメーター値は、選択したモデル タイプによって異なり、カスタマイズ可能です。 モデル引数の選択の詳細については、「ディープ ラーニング モデルのトレーニング」のドキュメントをご参照ください。
最後に、GPU が搭載されている場合、コンピューターの GPU 上でこのツールを実行するように設定して高速で処理されるようにします。 そうでない場合、次の手順はスキップしてください。
- コンピューターに GPU が搭載されている場合、[環境] タブをクリックします。 [プロセッサー タイプ] で、[プロセッサー タイプ] として [GPU] を選択します。
- [実行] をクリックします。
注意:
このツールの実行には 1 時間以上かかることがあります。
モデルが実行に失敗した場合、[バッチ サイズ] パラメーターの値を小さくしてみてください。 このパラメーターを 4 または 2 に設定してツールを再実行します。 ただし、これによってトレーニングしたモデルの結果の精度が低くなることがあります。
ヤシの木の検出
衛星画像からフィーチャを抽出する主な作業は、データの準備、トレーニング サンプルの作成、モデルのトレーニングです。 これらの手順は完了しているため、トレーニング済みモデルを使用して、画像全体のヤシの木を検出します。 オブジェクト検出は、最適な結果を得るために一般的に複数回のテストが必要となるプロセスです。 モデルの最適なパフォーマンスを実現するためにユーザーが修正できるパラメーターがいくつかあります。 これらのパラメーターを簡単にテストするため、画像の一部内にあるヤシの木を検出してみましょう。 検出結果に問題がなければ、検出ツールの処理範囲を画像全体に広げます。
注意:
前のセクションでモデルをトレーニングしなかった場合、Provided Results フォルダー内にディープ ラーニング パッケージがユーザー用に用意されています。
フィーチャの分類は GPU 使用率の高いプロセスであり、コンピューターのハードウェアによっては、完了するのにしばらく時間がかかります。 ヤシの木を検出しない場合は、結果が提供されているので、「検出されたフィーチャの改善」セクションに進んでください。
- リボンの [マップ] タブをクリックします。 [ナビゲーション] グループで、[ブックマーク] をクリックします。 [Detection Area] を選択します。
- リボンの [コマンド検索] に、「ディープ ラーニングを使用したオブジェクトの検出」と入力します。 [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] を選択します。
最初に、フィーチャを検出する画像を設定します。
- [ディープ ラーニングを使用したオブジェクトの検出 (Detect Objects Using Deep Learning)] ツールの [入力ラスター] で、[Imagery] を選択します。
次に、検出されたオブジェクトのフィーチャクラスに名前を付けます。
- [出力検出オブジェクト] に、「DetectedPalms」と入力します。
次に、ヤシの木を検出するために作成したモデルを選択します。
- [モデル定義] で、classify_palms フォルダーを参照します。 [classify_palms.dlpk] ディープ ラーニング モデル パッケージ ファイルをクリックします。 [OK] をクリックします。
注意:
ディープ ラーニング モデルをトレーニングしなかった場合、プロジェクトのフォルダーを参照します。 [Provided Results] を開きます。 [classify_palms] を開きます。 [classify_palms.dlpk] ディープ ラーニング モデル パッケージ ファイルをクリックします。 [OK] をクリックします。
次に、モデルの引数のいくつかを設定します。 引数を使用して、モデルの実行によって最適な結果が得られるように調整します。
畳み込みニューラル ネットワーク モデリングで画像の畳み込みを実行する場合、実際には、データを縮小し、分析時に内側のピクセルに比べて画像のエッジのピクセルの使用を非常に少なくします。 [padding] パラメーターを使用して、画像の外側のエッジにピクセルの境界を追加します。 これにより、有効なエッジ ピクセルからの情報の損失および縮小が軽減します。 これをデフォルトのままにしておきます。
[threshold] 引数は、信頼度 (オブジェクトにヤシの木のラベル付けをする際に受容できる信頼度) の閾値です。 この数値を調整して、求める精度を達成します。
- [threshold] に、「0.2」と入力します。
次に、[nms_overlap] 引数を設定します。 これによって、各フィーチャの許容される交差領域を制御します。 この引数の数値が小さいほど、オブジェクトが個別のフィーチャと見なされるためのオーバーラップ制限が厳しくなります。
- [nms_overlap] は、デフォルト値 0.1 のままにします。
次に、バッチ サイズを設定します。
- [batch_size] に、「8」と入力します。
ツールを実行する前に、一部の環境を設定します。
- [環境] タブをクリックします。
次に、処理範囲を設定します。 このパラメーターを以下の図のように設定すると、ツールは現在のマップ範囲内にある画像だけを処理します。 オブジェクトの検出プロセスはハードウェアへの負荷が高いため、画像データセット全体に対してツールを実行する前に、小さい範囲に対してツールを実行してパラメーターをテストすることをお勧めします。
- [処理範囲] で、[範囲] を [現在の表示範囲] に設定します。
[現在の表示範囲] を選択すると、範囲の境界四角形の座標が表示されます。
- [ラスター解析] の [セル サイズ] から [レイヤー Imagery と同じ] を選択します。
- コンピューターに GPU が搭載されている場合、必要に応じて、[プロセッサー タイプ] で、[プロセッサー タイプ] として [GPU] を選択します。
- [実行] をクリックします。
使用しているハードウェアや、CPU、GPU、RAM のいずれで実行しているかに応じて、ツールの実行には数分かかります。
結果を確認します。 引数の値を変えて、その影響を確認してください。
良好な結果が得られる引数が見つかったら、画像全体でヤシの木を検出します。
- [環境] タブの [処理範囲] で、[デフォルト] を選択します。
- [実行] をクリックします。
画像データセット全体に対してツールを実行しているため、コンピューターのハードウェアによっては処理時間が長くなることがあります。
注意:
ヤシの木を検出するモデルを実行しない場合、ヤシの木のデータセットが用意されています。 [DetectedPalms] フィーチャクラスをマップに追加するため、リボンの [マップ] タブの [レイヤー] グループで、[データの追加] をクリックします。 [Kolovai] フォルダーを参照して [Provided Results] フォルダーを選択し、[Results] ジオデータベースを開いて [DetectedPalms] フィーチャクラスをダブルクリックします。
ツールの実行が終了したら、結果を確認します。 最終結果の色は、提供されている画像と異なる場合があります。
一部のヤシの木ではフィーチャが重なり合っていることがわかります。 つまり、複数回識別された木が多数あるため、木の総数が間違ってカウントされています。 この問題をわかりやすくするためにシンボルを変更した後で、ジオプロセシング ツールを使用して、これらの重なり合っているフィーチャを削除します。
- [コンテンツ] ウィンドウで、[DetectedPalms] レイヤーのシンボルをダブルクリックします。
[シンボル] ウィンドウが表示されます。
- [プロパティ] タブをクリックします。
- [表示設定] の下で、以下を設定します。
- [色] で [色なし] を選択します。
- [アウトライン色] で、[ソーラー イエロー] を選択します。
- [アウトライン幅] に、「1.5」と入力します。
- [適用] をクリックします。
シンボルが変わったので、結果を再び確認します。
次に、重複するポリゴンを削除します。
- プロジェクトを保存します。
検出されたフィーチャの改善
ヤシの木を正確にカウントすることが重要です。 多数の木が複数回カウントされているため、[Non Maximum Suppression] ツールを使用してこれを解決します。 ただし、ヤシの木の樹冠が重なり合っていることがあるので注意する必要があります。 このため、同じ木の重複であることが明らかなフィーチャは削除し、一部が重なり合っている別々の木は削除しないようにします。
- リボンの [コマンド検索] で、「Non Maximum Suppression」と入力します。 [Non Maximum Suppression] を選択します。
最初に、モデルによって作成されたヤシの木のレイヤーを選択します。
- [入力フィーチャクラス] で [DetectedPalms] を選択します。
注意:
前のセクションをスキップした場合、ヤシの木のデータセットが用意されています。 [DetectedPalms] フィーチャクラスをマップに追加するため、リボンの [マップ] タブの [レイヤー] グループで、[データの追加] をクリックします。 [Kolovai] フォルダーを参照して [Provided Results] フォルダーを選択し、[Results] ジオデータベースを開いて [DetectedPalms] フィーチャクラスをダブルクリックします。
このデータセット内のヤシの木それぞれに、モデルが各フィーチャを識別したときの精度を表す信頼度スコアが付いています。 ツールにこのフィールドを入力します。
- [信頼度スコア フィールド] で、[Confidence] を選択します。
検出された各フィーチャには該当するクラスも割り当てられています。 このモデルには Palm というクラスが 1 つあったことを思い出してください。 これはこのモデルを使用したときに記録されています。
- [クラス値フィールド] で、[Class] を選択します。
- [出力フィーチャクラス] に、「DetectedPalms_NMS」と入力します。
[最大オーバーラップ率] では、2 つのフィーチャを別個のフィーチャと見なすことが可能な最大オーバーラップ率を指定します。 値が大きいほど、2 つのフィーチャ間で大きな重なりが許容されます。 信頼度が低いフィーチャは削除されます。 オーバーラップ率が 50 パーセントを超える木を削除するようにツールを設定します。
- [最大オーバーラップ率] に、「0.5」と入力します。
- [実行] をクリックします。
新しいレイヤーが [コンテンツ] ウィンドウに追加されます。 このレイヤーでは [DetectedPalms] レイヤーと同じシンボルが使用されています。
- [コンテンツ] ウィンドウで [Detected Palms] レイヤーをオフにします。
新しいレイヤーでは重なり合っている木が減ったことがわかります。
必要に応じて [最大オーバーラップ率] の値を変えてツールを再実行することで、最適な結果を得ます。
- マップから [DetectedPalms] レイヤーを削除します。
- [コンテンツ] ウィンドウで、[DetectedPalms_NMS] を 2 回クリックし、名前を「Detected Palm Trees」に変更します。
- [Detected Palm Trees] レイヤーをオフにします。
- プロジェクトを保存します。
モデルをトレーニングし、そのモデルを使用してヤシの木を検出しました。 次に、ラスター関数を使用して、分析範囲内で検出された各樹木の健康状態を推定します。
注意:
1 回目ではモデルの結果が完璧ではない可能性があることを理解しておくことが重要です。 ディープ ラーニング モデルをトレーニングして実装するプロセスを何度か繰り返すことによって最適な結果が得られます。 以下を行うことによって、より良い結果が得られます。
- フィーチャの初回のサンプル サイズを大きくする
- 検出したいフィーチャがトレーニング サンプルに正確に取り込まれるようにする
- トレーニング サンプルにサイズが異なるフィーチャが含まれるようにする
- ジオプロセシング ツールのパラメーターを調整する
- [ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールの詳細パラメーターを使用して既存のモデルを再トレーニングする
植生の健康状態の推定
前のモジュールでは、画像からココヤシの木を抽出するためにディープ ラーニング モデルを作成しました。 このモジュールでは、同じ画像を使用して、植生の健康状態指数を算出することで、植生の健康状態を推定します。
植生の健康状態を評価するには、可視大気抵抗植生指数 (VARI) を算出します。これは、可視波長から反射率の値のみを使用して、葉面積指数 (LAI) と植生比率 (VF) の間接的な計測値として作成されたものです。
(Rg - Rr) / (Rg + Rr - R(Rg - Rb))
Rr、Rg、Rb は、それぞれ、赤、緑、青を示す反射率です (Gitelson et al. 2002)。
通常、正規化植生指数 (NDVI) の場合と同様に、可視と近赤外 (NIR) 波長バンドの両方の反射率の値を使用して、植生の健康状態を推定します。 ただし、OpenAerialMap からダウンロードした画像は、すべてが可視電磁スペクトルにある 3 つのバンドを持つマルチバンド画像であるため、VARI を使用します。
VARI の算出
VARI の計測には、OpenAerialMap 画像内の 3 つのバンドの入力が必要です。 VARI を算出するには、[バンド演算] ラスター関数を使用します。 ラスター関数は、新しいラスター データセットを作成しないため、ジオプロセシング ツールよりも高速です。 画面移動やズームに対応して、ピクセルのリアルタイムの分析を実行します。
- リボンの [画像] タブをクリックします。 [解析] グループで [ラスター関数] をクリックします。
[ラスター関数] ウィンドウが表示されます。
- [ラスター関数] ウィンドウで、[バンド演算] ラスター関数を検索して選択します。
- [バンド演算プロパティ] 関数で、次のパラメーターを設定します。
- [ラスター] で、[Imagery] ラスター レイヤーを選択します。
- [方法] で、[VARI] を選択します。 この関数では、式に入力バンドに対応するバンド インデックス番号を指定する必要があります。 バンド インデックス パラメーターの下にある入力は、赤、緑、青を表示しているため、対応するバンド インデックスに、赤、緑、青のバンドをこの順序で指定します。 各バンド間にはシングル スペースを必ず入れてください。
- [バンド インデックス] に「1 2 3」と入力します。
- [新しいレイヤーの作成] をクリックします。
VARI レイヤーが、[Band Arithmetic_Imagery] として [コンテンツ] ウィンドウに追加されます。 エリアをズームしたり画面移動することで、海岸線、道路、建物、田畑などのフィーチャを表示できます。
- [コンテンツ] ウィンドウで、[Band Arithmetic_Imagery] レイヤーがオンになっていることを確認します。
次に、マップでのラスターの描画方法を変更して VARI シンボルをわかりやすくします。
- リボンの [ラスター レイヤー] タブをクリックします。
- [レンダリング] グループで [ストレッチ タイプ] ドロップダウン メニューをクリックして [標準偏差] を選択します。
- [コンテンツ] ウィンドウで、[Band Arithmetic_Imagery] の名前を [VARI] に変更します。
VARI のココヤシへの抽出
VARI を表示するラスター レイヤーは有益ですが、必ずしも実用的ではありません。 どの樹木に注目すべきかを知るために、個々の樹木の平均 VARI を知る必要があります。 各樹木の VARI 値を特定するには、基本となる平均 VARI 値を抽出し、どの樹木が健康で、どの樹木が保守を必要としているかを表示するようシンボル化します。
最初に、ポリゴン フィーチャをポイントに変換します。
- リボンの [コマンド検索] で、「フィーチャ → ポイント」と入力します。 [フィーチャ → ポイント (Feature to Point)] を選択します。
- [フィーチャ → ポイント (Feature to Point)] ツールで、次のパラメーターを入力します。
- [入力フィーチャ] で、[Detected Palm Trees] レイヤーを選択します。
- [出力フィーチャクラス] で、「PalmTree_Points」と入力します。
- [実行] をクリックします。
検出された各ポリゴンの重心にポイント フィーチャクラスが設定されます。 さまざまな位置にズームして、計測ツールを使用すると、ヤシの木におよそ 3 メートルの平均半径が設定されているのがわかります。 次のステップでは、各ポイントの周囲に 3 メートルのバッファーがあるポリゴン レイヤーを作成します。
注意:
[計測] ツールはリボンの [マップ] タブの [照会] グループにあります。
- リボンの [コマンド検索] で、「ペアワイズ バッファー」と入力します。 [ペアワイズ バッファー (Pairwise Buffer)] を選択します。
- [ペアワイズ バッファー (Pairwise Buffer)] ツールで、次のパラメーターを入力します。
- [入力フィーチャ] で、[PalmTree_Points] を選択します。
- [出力フィーチャクラス] で、「PalmTreeBuffer」と入力します。
- [距離] で「3」と入力し、[メートル] を選択します。
- [実行] をクリックします。
各ヤシの木の樹冠の位置と形状を表すポリゴン フィーチャクラスが生成されます。
- [コンテンツ] ウィンドウで、[VARI] および [PalmTree_Points] レイヤーをオフにします。
画像内のヤシの木の推定された樹冠が表示されます。
次に、各ポリゴンの平均 VARI 値を抽出します。 [ゾーン統計をテーブルに出力 (Zonal Statistics as Table)] ツールは、作成された各ポリゴンを 1 つずつ調べてポリゴン内にあるすべての VARI ピクセルを検出し、そのポリゴンの平均 VARI 値を計算します。
- リボンの [コマンド検索] で、「ゾーン統計をテーブルに出力」と入力します。 [ゾーン統計をテーブルに出力 (Zonal Statistics as Table)] を選択します。
- [ゾーン統計をテーブルに出力 (Zonal Statistics as Table)] ツールで、次のパラメーターを入力します。
- [入力ラスター、またはフィーチャ ゾーン データ] で、[PalmTreeBuffer] を選択します。
- [ゾーン フィールド] で [ORIG_FID] を選択します。
- [入力値ラスター] で [VARI] を選択します。
- [出力テーブル] に「MeanVARI_per_Palm」と入力します。
- [計算時に NoData を除外] がオンになっていることを確認します。
- [統計情報の種類] で [平均値] を選択します。
[ゾーン フィールド] を [ORIG_FID] に設定すると、各樹木の統計情報が個別に取得されます。 この属性は、元の [DetectPalms] レイヤーの一意の ID です。
- [実行] をクリックします。
出力テーブルが [コンテンツ] ウィンドウの下部に追加されます。 これを開くと、元の FID 値と、平均 VARI 値を含む MEAN という列が表示されます。 このテーブルを PalmTreeBuffer レイヤーに結合して、検出された各ヤシの木の平均 VARI 値を持つフィーチャクラスを取得します。
- リボンの [コマンド検索] で、「フィールドの結合」と入力します。 [フィールドの結合 (Join Field)] を選択します。
- [フィールドの結合 (Join Field)] ツールで、次のパラメーターを入力します。
- [入力テーブル] で、[PalmTreeBuffer] を選択します。
- [入力結合フィールド] で、[ORIG_FID] を選択します。
- [結合テーブル] で、[MeanVARI_per_Palm] を選択します。
- [結合テーブル フィールド] で、[ORIG_FID] を選択します。
- [転送フィールド] で、[MEAN] を選択します。
- [実行] をクリックします。
[PalmTreeBuffer] レイヤーに、[MEAN] というフィールドが追加されました。 データをわかりやすくするために、このレイヤーの名前を変更し、シンボル化します。
- [コンテンツ] ウィンドウで、[PalmTreeBuffer] の名前を [Palm Trees VARI] に変更します。
- [コンテンツ] ウィンドウで、[Palm Trees VARI] が選択されていることを確認します。 リボン上の [フィーチャ レイヤー] タブにある [描画] グループで [シンボル] をクリックします。
[シンボル] ウィンドウが表示されます。
- [プライマリ シンボル] で、[等級色] を選択します。
- [フィールド] で、[MEAN] を選択します。
- 必要に応じて、[方法] で、[自然分類(Jenks)] を選択し、[クラス] を [4] に設定します。
- [配色] でドロップダウン メニューをクリックし、[すべて表示] と [名前の表示] チェックボックスをオンにします。 スクロールして、[赤黄緑 (4 クラス)] 配色を選択します。
- [クラス] で、各ラベルをクリックし、クラスの名前を上から下に次のように変更します - 「Needs Inspection」、「Declining Health」、「Moderate」、「Healthy」。
マップに、画像内の各ヤシの木の位置と健康状態を示すフィーチャクラスが設定されます。
- プロジェクトを保存します。
オプション: フィールド タスクの割り当てとプロジェクトの進行状況の監視
フィーチャの抽出と画像の分析に ArcGIS Pro を使用する最大のメリットは、ArcGIS プラットフォーム全体と統合できることです。 最後のチュートリアルでは、ArcGIS Pro でディープ ラーニング ツールを使用して、画像からココヤシの木を特定しました。 樹木は、GIS での使用に適したフィーチャクラスのフィーチャとして保存できます。 拡張ワークフローとして、結果をクラウドに公開する、品質保証のために Web アプリケーション テンプレートを構成する、樹木の調査タスクを現場の作業員に割り当てる、ダッシュボードを使用してプロジェクトの進行状況を監視する、などのワークフローが可能です。
ArcGIS Online での公開
構成可能なアプリを使用してデータと連携するには、ArcGIS Online または ArcGIS Enterprise で、ヤシの木をフィーチャ サービスとして公開する必要があります。 ArcGIS Pro で、[コンテンツ] ウィンドウの [PalmTreesVARI] レイヤーを右クリックし、[共有] を選択し、[Web レイヤーとして共有] を選択します。 ArcGIS Online アカウントに公開されます。
アプリ テンプレートを使用したディープ ラーニングの精度確認
ディープ ラーニング ツールが提供する結果の精度は、トレーニング サンプルの精度とトレーニング済みモデルの品質に比例します。 言い換えると、結果は常に完全とは限りません。 モデルの結果の品質を評価するには、ディープ ラーニング結果に保存されている [信頼度] スコアが一定値より低い樹木をチェックします。 ArcGIS Pro の属性フィルターを使用して各レコードにズームするのではなく、構成可能な Web アプリ テンプレートの [Image Visit] を使用して、Web アプリケーションの結果の精度を確認します。
ArcGIS Workforce を使用した現場確認の実行
ArcGIS Workforce は、フィーチャの位置情報を使用して現場作業者を調整するモバイル アプリ ソリューションです。 Workforce アプリを使用して、組織のメンバーにタスクを割り当てて、VARI スコアが「Needs Inspection」と表示されたすべての樹木を現場の作業員に割り当て、樹木を確認し、推奨される処置でマークすることができます。
ArcGIS Dashboards を使用したプロジェクト進行状況の監視
最後に、ArcGIS Dashboards を使用して、ArcGIS Workforce プロジェクトで割り当てられた作業の進行状況を監視できます。ArcGIS Dashboards は、作業員、サービス、およびタスクの状況をリアルタイムに表示できるビジュアライゼーションと分析を提供する構成可能な Web アプリです。
このチュートリアルでは、オープンソースのドローン画像を取得し、画像内のヤシの木のトレーニング サンプルを作成しました。 これらの画像チップは、画像チップとしてデータ サイエンティストに提供され、トレーニング済みのディープ ラーニング モデルで使用されて、画像内の 11,000 以上のヤシの木が抽出されました。
ディープ ラーニングと画像分析、さらに、ArcGIS システムの構成可能なアプリについて学習しました。 ディープ ラーニング モデルの画像と知識があれば、このワークフローを多数のタスクに使用できます。 たとえば、これらのツールを使用して、自然災害による構造上の損害を評価したり、都市部の車両を数えたり、地質学上の危険地帯付近の構造物を検索したりすることができます。
他のチュートリアルについては、チュートリアル ギャラリーをご覧ください。