プロジェクトの設定
まず、このチュートリアルのデータをすべて含むプロジェクトをダウンロードし、ArcGIS Pro で開きます。
- Boat_Detection パッケージをダウンロードします。
[Boat_Detection.ppkx] という名前のファイルがコンピューターにダウンロードされます。
注意:
.ppkx ファイルは、ArcGIS Pro プロジェクト パッケージです。これには、ArcGIS Pro で開くことができるマップ、データ、その他のファイルが含まれます。 .ppkx ファイルの管理の詳細については、このガイドをご参照ください。
- コンピューター上で、ダウンロードしたファイルを選択します。
ヒント:
ほとんどの Web ブラウザーでは、ダウンロード フォルダーがダウンロード先です。
- [Boat_Detection.ppkx] をダブルクリックして、ArcGIS Pro で開きます。 サイン インを求められたら、ArcGIS アカウントを使用して、サイン インします。
注意:
ArcGIS Pro へのアクセス権限または組織アカウントがない場合は、ソフトウェア アクセスのオプションをご参照ください。Text SAM ワークフローでは、ArcGIS Pro バージョン 3.2 以降が必要です。
デンマークのコペンハーゲンにあるツボルグ港地区を中心としたマップが表示されます。 [Tuborg_Havn.tif] の画像レイヤーが地形図ベースマップの上に表示されます。
- ズームおよび画面移動して画像を調べます。
マリーナや運河全域に浮かぶ多数のボートを観察します。 これは、歪みを除去するためにオルソ補正された航空写真です。 解像度は高く (各ピクセルは地表の約 20 x 20 センチメートルを表します)、ボートや他のフィーチャを非常に鮮明に表示しています。 これは、赤、緑、青の 3 つのバンドから構成される TIFF 形式で、それらが合成されてナチュラル カラーのピクチャになっています。 ピクセル深度は 8 ビットです。
この画像内の、ましてやコペンハーゲンのあらゆるマリーナや運河にあるボートすべてを手動で識別するには、時間がかかります。 そうはせずに、Text SAM GeoAI モデルを使用して、それらを自動で検出します。
Text SAM モデルのダウンロード
Text SAM モデルを使用するために、まずコンピューターに Text SAM モデルをダウンロードします。 Test SAM は ArcGIS Living Atlas of the World で入手できます。これは Esri の信頼できる GIS データ コレクションで、発展を続ける ディープ ラーニング モデルのライブラリが含まれています。
- Web ブラウザーで ArcGIS Living Atlas を開きます。
- ArcGIS Living Atlas ホーム ページの検索ボックスに「Text SAM」と入力します。
- 結果のリストの [Text SAM] をクリックして、アイテム ページを開きます。
- Text SAM アイテム ページの説明を読み、ページの詳細を確認します。
Text SAM は多目的モデルで、自由形式のテキスト プロンプトによって操作され、さまざまな種類のフィーチャを画像から抽出できます。 たとえば、航空機の検出であれば「airplane」、太陽光パネルの検出であれば「panel」、赤い車の検出であれば「red car」というテキスト プロンプトで構いません。 検出したオブジェクトは、おおよそのアウトラインを表すポリゴン レイヤーで出力されます。
ページには、求められた入力に関する有益な情報 (8 ビット、3 バンドの RGB 画像) も表示されます。
このモデルは、本チュートリアルで使用するコペンハーゲンの画像に適しています。
ヒント:
Text SAM の詳細については、「Text SAM: Extracting GIS Features Using Text Prompts」の記事および「Text SAM: Use the model」のガイドをご参照ください。
独自の画像でこのワークフローを実行する場合は、本チュートリアルの最後のセクションでデータを必要な入力形式に変換するコツを説明していますので、こちらをご参照ください。
- ページの上部の、[オーバービュー] で [ダウンロード] をクリックします。
モデルのファイルがコンピューターにダウンロードされます。
注意:
モデルのファイルは 1.75 GB あり、ダウンロードに数分かかることがあります。
- コンピューター上で、ダウンロードした [TextSAM.dlpk] ファイルを見つけ、C:\GeoAI_models など、分かりやすいフォルダーに移動させます。
ヒント:
Text SAM は保存しなくても ArcGIS Pro ジオプロセシング ツールで直接使用できますが、実行するたびにモデルの新規コピーがダウンロードされます。 そのため、ローカルに保存すると便利です。
Text SAM を使用したボートの検出
これからコペンハーゲンの画像内のボートを検出します。 「ディープ ラーニングを使用したオブジェクトの検出」のジオプロセシング ツールを使用し、ダウンロード済みの Text SAM モデルのコピーをパラメーターの 1 つとして指定します。
注意:
ディープ ラーニング ツールを ArcGIS Pro で使用するには、正しいディープ ラーニング ライブラリがコンピューター上にインストールされている必要があります。 これらのファイルがインストールされていない場合は、プロジェクトを保存し、ArcGIS Pro を終了して、「ArcGIS Pro でのディープ ラーニングの準備」に記載された手順に従います。 これらの手順では、お使いのコンピューター ハードウェアとソフトウェアでディープ ラーニング ワークフローを実行できるかどうかを確認する方法と他の有用なヒントについても説明します。 インストールが完了したら、プロジェクトを再度開いてチュートリアルを続行できます。
- リボンの [表示] タブの [ウィンドウ] グループで、[ジオプロセシング] をクリックします。
- [ジオプロセシング] ウィンドウの検索ボックスに「ディープ ラーニングを使用したオブジェクトの検出」と入力します。 結果のリストで、[ディープ ラーニングを使用したオブジェクトの検出] ツールをクリックして開きます。
- [ディープ ラーニングを使用したオブジェクトの検出ツール] で、以下のパラメーターの値を選択します。
- [入力ラスター] で [Tuborg_Havn.tif] を選択します。
- [出力検出オブジェクト] に「Detected_Boats」と入力します。
- [モデル定義] で [参照] ボタンをクリックします。
これで、Text SAM モデルが読み出されます。
- [モデル定義] ウィンドウで、Text SAM モデルを保存した場所を参照します。[TextSAM.dlpk] をクリックし、[OK] をクリックします。
しばらくすると、モデルの引数が自動的に読み込まれます。 検出するオブジェクトに対応するテキスト プロンプトを選択します。
- [引数] の [text_prompt] に、「boat」と入力します。
ヒント:
テキスト プロンプトに、「boat, yacht, canoe」のように単語をカンマで区切って追加できます。 ただし、今回の場合は、「boat」という 1 単語のプロンプトで優れた結果が得られます。
- [batch_size] の引数を特定します。
ディープ ラーニングのオブジェクト検出は、一度に画像全体では実行できません。 代わりに、ツールは画像をチップと呼ばれる小さな断片に分割します。 バッチ サイズが 4 とは、ツールが一度に 4 つの画像チップを処理することを意味します。 ツールを実行すると、コンピューターにそのレベルの処理に十分なメモリがないため、メモリ不足エラーが発生する場合があります。 その場合は、[batch_size] の値を 4 から 2 または 1 に変更してみてください。 高性能コンピューターであれば、[batch_size] の値を上げて、処理を速めることもできます。 [batch_size] 値を変えてもモデルの品質には影響しません。モデルの検出処理の効率のみに影響します。
今回は、デフォルト値の [4] のままにします。
- [nms_overlap] 引数に、「0.7」と入力します。
場合によっては、モデルが 1 つのオブジェクトを複数回検出することがあります。 [Non Maximum Suppression] (NMS) は、重複がある場合に、検出されたオブジェクトの一部を除外する、オプションのプロセスです。 最も高い信頼度で検出されたオブジェクトは保持され、それ以外のオブジェクトは削除されます。 次のサンプル画像では、ボートが 3 回検出されました。NMS を使用すると、それら 3 つのポリゴンのうち 1 つのみが保持されます。
[nms_overlap] 引数は、検出された 2 つのオブジェクトが互いに重複しているとみなし、NMS を適用するために必要なオブジェクト間のオーバーラップの割合を指定します。 引数として設定できる値は [0] ~ [1] です。 たとえば、[0.7] にすると、70 パーセント以上オーバーラップしていることが条件になります。
- [Non Maximum Suppression] の横のチェックボックスをオンにします。
Text SAM モデルでは、Text SAM のオブジェクト検出プロセス ([nms_overlap] 引数のことです) 中、または後処理ステップ ([Non Maximum Suppression] チェックボックスのことです) として、NMS を適用することができます。 試行錯誤を経て、この特定のユース ケースにおいては [nms_overlap] 引数に高い値 ([0.7]) を選択し、[Non Maximum Suppression] 後処理オプションをデフォルトの設定で適用することで最高の結果が得られることが分かりました。
注意:
[Non Maximum Suppression] の [最大オーバーラップ率] パラメーターは、後処理 NMS ステップのオーバーラップを指定します。 [nms_overlap] と同様に [0] から [1] の値を設定できます。 デフォルト値 [0] は、2 つのポリゴンのオーバーラップ率が [0] を超えるとすぐに、それらを重複とみなすことを意味します。
- 他のすべての引数もデフォルト値のままにします。
注意:
各種引数の役割の詳細については、「Text SAM のガイド」をご参照ください。
- [環境] タブをクリックします。
この時点で、ツールをそのまま実行できます。すると、[Tuborg_Havn.tif] 画像全体に対してボートの検出が続行します。この処理には、コンピューターの仕様に応じて 30 分から 1 時間かかる可能性があります。 チュートリアルの時間を短くするために、ここでは、入力画像の小さいサブセット内にあるボートのみを検出します。
- リボンの [マップ] タブの [ナビゲーション] グループで、[ブックマーク] をクリックして [Detection Area] を選択します。
マップがツボルグ港マリーナの狭いエリアをズームします。
- [ジオプロセシング] ウィンドウの [環境] タブにある [処理範囲] で、[現在の表示範囲] ボタンをクリックします。
マップ上に表示されている現在の範囲に合わせて、[上]、[左]、[右]、[下] の座標が更新されます。
- [プロセッサー タイプ] で、[GPU] を選択します。 [GPU ID] に「0」と入力します。
注意:
このチュートリアルは、コンピューターに [NVIDIA GPU] が搭載されていることを前提としています。 搭載されていない場合は、[CPU] を選んでください。ただし、処理の実行に非常に時間がかかることをご了承ください。 GPU およびディープ ラーニング処理での GPU の使用方法の詳細については、「ArcGIS Pro でのディープ ラーニングの準備」チュートリアルの「GPU の利用可能性の確認」のセクションをご参照ください。
- その他のデフォルト値をそのままにして、[実行] をクリックします。
処理の進行は、 [実行] ボタンの下で監視できます。また、[詳細の表示] をクリックすると詳細情報を見ることができます。
数分後、[Detected_Boats] 結果レイヤーが [コンテンツ] ウィンドウとマップに表示されます。 これは、各ポリゴンがボートを表すフィーチャ レイヤーです。
ヒント:
メモリ不足エラーが発生した場合は、[batch_size] の値を 4 から 2 または 1 に減らして、プロセスをもう一度実行してみてください。
Text SAM を使用してツボルグ港エリアにあるボートを正常に検出できました。
注意:
Text SAM ディープ ラーニング アルゴリズムは決定論的ではないため、ツールを実行するたびに、結果が若干異なる場合があります。
色もランダムに割り当てられるため、異なる可能性があります。
- [クイック アクセス] ツールバーで [保存] ボタンをクリックして、プロジェクトを保存します。
結果のレイヤーのスタイル設定
[Detected_Boats] レイヤーで結果を調べ、調整を行います。 まず、検出されたオブジェクトが見やすくなるように、レイヤーのシンボルを変更します。
- [コンテンツ] ウィンドウで、[Detected_Boats] シンボルをクリックして [シンボル] ウィンドウを表示します。
- [シンボル] ウィンドウで、必要に応じて [プロパティ] タブをクリックします。
- [表示設定] の下で、次のパラメーターの値を設定します。
- [色] で [色なし] を選択します。
- [アウトライン色] で、[ファイアー レッド] のような明るい赤を選びます。
- [アウトライン幅] で [2 pt] を選択します。
- [適用] をクリックします。
レイヤーが新しいシンボルに更新されます。
- マップ上でズームおよび画面移動して、[Detected_Boats] レイヤーを調べます。
モデルがボートを正しく検出し、各ボートのおおよそのアウトラインを表示していることが確認できます。 ただし、誤検出が発生する場合が多少あります。下記の画像例では、モデルがボートがない場所でボートを誤って検出しています。
結果の調整
次に、結果を調整し、誤検出を取り除く方法を詳しく見ていきます。
- [コンテンツ] ウィンドウで [Detected_Boats] レイヤーを右クリックし、[属性テーブル] を選択します。
[Detected_Boats] 属性テーブルの各行は、検出されたボートのフィーチャに対応しています。 現在、フィーチャが 76 件あります。
注意:
取得したフィーチャの数は、若干異なる場合があります。
以下の 2 つのフィールドに注目します。
- Confidence - モデルがボートとして特定した各フィーチャの信頼度を (パーセントで) 示します。
- Shape_Area - 各フィーチャの面積を (平方メートルで) 示します。
まず、ボートにしては小さすぎるであろうフィーチャを調べます。
- [Shape_Area] フィールドの名前をダブルクリックして、属性テーブルを当該フィールドでソートします。
フィーチャが面積をキーに昇順で一覧表示されます。
- 1 つ目のフィーチャの行ヘッダーをダブルクリックして、マップ上でそれにズームして、調べます。
地図上で、このフィーチャの幅が数ピクセルしかなく、ボートではないことが確認できます。
- 同様に、リストの次のフィーチャを数件調べ、実際のボートを表すのに必要な面積を確定します。
面積は [9 平方メートル] が閾値のようです。 次に、信頼度が最も低いフィーチャを調べます。
- [Confidence] フィールドの名前をダブルクリックして、属性テーブルを当該フィールドでソートします。
フィーチャが信頼度をキーに昇順で一覧表示されます。 リストの 1 つ目のフィーチャの信頼度は、約 20 パーセントという非常に低い値です。
- 最初の数フィーチャをダブルクリックし、それらにズームして、調べます。
- さらにフィーチャの調査を続け、実際にボートを表示し始める信頼度の値を確定します。
28 パーセントあたりが信頼度の閾値だと分かります。 次に、信頼度が十分高く、面積がボートに十分な広さのフィーチャのみを含む [Detected_Boats] レイヤーのコピーを作成します。
ヒント:
[Detected_Boats] レイヤーから不適切なフィーチャを自動で削除できますが、最初の結果を引き続き調査する場合は、元のレイヤーに手を加えるのではなく、新規レイヤーを抽出すると便利です。
- リボンの [マップ] タブの [選択] グループで、[選択解除] をクリックして、すべてのフィーチャの選択を解除します。
- [コンテンツ] ウィンドウで、[Detected_Boats] を右クリックし、[データ] をクリックして、[フィーチャのエクスポート] を選択します。
- [フィーチャのエクスポート] ウィンドウの [出力フィーチャクラス] に「Detected_Boats_Cleaner」と入力します。
- [フィルター] を展開し、[Where 句 Confidence が 28 より大きい] という式を作成します。
- [項目の追加] をクリックして、[And 句 Shape_Area が 9 より大きい] という 2 つ目の式を作成します。
- [OK] をクリックします。
新しいレイヤーがマップに追加されます。
- [コンテンツ] ウィンドウで、[Detected_Boats] の横にあるチェックボックスをオンにして、レイヤーをオフにします。
- [Detected_Boats] 属性テーブルを閉じて、マップのサイズを広げます。
- [マップ] タブで [ブックマーク] をクリックし、[Detection area] ブックマークを選択して、全検出範囲に戻ります。
- マップ上で、[Detected_Boats_Cleaner] レイヤーを確認します。
これで、誤検出の大半がなくなりました。
注意:
データの信頼度の最適な閾値が 28 であることが分かっているので、ツールをもう一度実行する場合、[ディープ ラーニングを使用したオブジェクトの検出] ツールの [box_threshold] モデル引数を [0.2] から [0.28] に変更できます。 こうすることで、信頼度が 20 ~ 28 パーセントのフィーチャの誤検出が結果から削除されます。 ([box_threshold] 引数は出力で受け入れられる [Confidence] の最小値を決定します)。
ただし、面積の閾値と同義のものがないので、その部分は後処理段階として残す必要があります。
- [コンテンツ] ウィンドウで [Detected_Boats_Cleaner] レイヤーを右クリックし、[属性テーブル] を選択します。
レイヤーには 66 隻のボートが残っています。
もし、Text SAM を使用してコペンハーゲンのすべての近隣地域にあるボートを検出する場合は、ボートの数が近隣地域ごとにグラフにまとめられます。 また、[Detected_Boats] レイヤーは都市全体のボートの密集度を示すホット スポット マップを作成するのに使用できます。 最後に、この分析は新しい画像で定期的に繰り返し、時間の経過に伴うパターンや変化を特定できます。
- Ctrl + S キーを押して、プロジェクトを保存します。
独自の画像への Text SAM の適用
独自のデータに Text SAM を適用する場合に適切に操作するためのコツをいくつか以下に紹介します。
- 画像の準備 - Text SAM モデルは 3 バンド画像 (赤、緑、青、つまり RGB) を想定しています。 画像が 3 バンドより多い場合は、最適なバンドを抽出してから Text SAM を適用します。 また、このモデルでは画像のピクセル深度は 8 ビットを想定しています。 画像のピクセル深度が 16 ビットなど、想定と違う場合は、8 ビットに変換する必要があります。 「転移学習によるディープ ラーニング モデルの強化」チュートリアルの「関連する画像バンドの選択」のセクションをご参照ください。変更方法が段階を追って説明されています。
- 画像の情報の確認 - 画像のプロパティ (バンド数、ピクセル深度、セル サイズなど) が分からない場合は、[コンテンツ] ウィンドウで、画像のレイヤーを右クリックし、[プロパティ] を選択します。 [プロパティ] ウィンドウで、[ソース] ウィンドウをクリックし、[ラスター情報] で、[バンド数]、[セル サイズ X]、[セル サイズ Y]、[ピクセル深度] を確認します。
- 元のワークフロー - 画像にオブジェクトの検出処理を適用できる状態にしたら、このチュートリアルで学習したのとまったく同じ Text SAM ワークフローを始めに使用してみてください。 これが最も簡単な手法です、高品質の結果をすぐに得られる場合があります。
- セル サイズの変更 - 最初の結果に十分に満足できない場合は、[ディープ ラーニングを使用したオブジェクトの検出] の環境パラメーターにある [セル サイズ] の値を変えてみます。 セル サイズ (メートル単位) は、選択した範囲全体で対象オブジェクトの可視領域が最大になるように選択する必要があります。 大きいオブジェクトを検出するには大きいセル サイズ、小さいオブジェクトを検出するには小さいセル サイズを検討します。 たとえば、雲を検出する場合は、セル サイズを 10 メートルに設定し、車を検出する場合は、セル サイズを 0.3 メートル (30 センチメートル) に設定します。 入力画像は変わりませんが、データは処理中にオン ザ フライでツールにより再サンプリングされます。 セル サイズの詳細については、「Multiresolution Object Detection with Text SAM」および「画像およびラスター データのピクセル サイズ」をご参照ください。
- マスクの使用 - 水域のみにあるボートなど、特定の対象エリアでオブジェクトを検出する場合は、[ディープ ラーニングを使用したオブジェクトの検出] の環境パラメーターの [マスク] を設定すると便利です。 マスクは分析の対象エリアを区切るポリゴン (またはラスター) のレイヤーです。たとえば、コペンハーゲン全域の水域の境界を区切ったり、特定のマリーナ (これらのマリーナが調査の唯一の対象の場合) を区切ったりします。 ツールを実行すると、マスク内に入る場所のみで処理が行われるため、時間の節約になり、マスク外の誤検出を避けられます。
- オブジェクト固有の事前トレーニング済みモデルの使用 - Text SAM を使う以外にも、ArcGIS の GeoAI でオブジェクトを検出する時間効率の良い方法があります。それは、Esri がリリースしている多数のトレーニング済みのモデルの 1 つを使用することです。それぞれのモデルは木、橋、太陽光パネルなど、単一のオブジェクト タイプに焦点を当てます。 詳細については、「ディープ ラーニング事前トレーニング済みモデルを使用したオブジェクトの検出」チュートリアルをご参照ください。
- 土地被覆とその他のタイプのピクセル レベルの分類 - Text SAM は、比較的コンパクトでコンテキストと区別できる (水に囲まれたボートなど) 個々のオブジェクトを検出することを想定しています。 土地利用や土地被覆 (LULC) 情報を抽出したり、他のタイプのピクセル レベルの分類をしたりする場合は、Text SAM (または SAM などの類似モデル) は適していません。 代わりに、「High Resolution Land Cover Classification – USA」や「Land Cover Classification (Sentinel-2)」など、ArcGIS Living Atlas の他の事前トレーニング済みのモデルをご検討ください。
本チュートリアルでは、ArcGIS Living Atlas Web サイトから Text SAM GeoAI モデルをダウンロードし、それを使用して画像のボートを検出しました。 そして、属性フィルターを使用して、誤検出されたフィーチャを取り除きました。 最後に、このワークフローを独自の画像に適用させるコツをいくつか学習しました。
同様のチュートリアルについては、「ArcGIS のディープ ラーニング」シリーズをご参照ください。