ディープ ラーニングを使用して、画像から手動でフィーチャを抽出するタスクを自動化できます。 ArcGIS の事前トレーニング済みモデルを使用すると、大規模なデータセット、膨大な計算能力、またはディープ ラーニングの知識や専門技術の必要性を軽減できます。 これらのモデルは多様な地理的データでトレーニングされており、さまざまな地域で十分なパフォーマンスを発揮します。 ArcGIS の事前トレーニング済みのモデルは、ArcGIS アカウントを持つユーザーであれば、ArcGIS Living Atlas of the World を通じて誰でも使用できます。 次のワークフローでは、Car Detection-USA モデルを使用して、高解像度のドローンおよび航空画像内の車を検出します。
要件
このワークフローを実行するには、次の要件が必要です。
- モデルを実行する航空画像。
注意:
車を含む航空画像は、OpenAerialMap からダウンロードできます。
- ディープ ラーニングは計算上の負荷が大きいため、大規模なデータセットを処理するには高性能 GPU を使用することをおすすめします。
事前トレーニング済みモデルを使用した推論
次のセクションでは、ArcGIS の事前トレーニング済みモデルを使用した推論に含まれるプロセスを説明します。
Python ライブラリーのインポート
次の Python ライブラリーをインポートします。from arcgis.gis import GIS
from arcgis.learn import detect_objects
from arcgis.raster.analytics import copy_raster
gis = GIS("home")
解析用のデータとモデルの追加
ノートブックにデータセットを追加する際に使用できる方法は 2 つあります。
1 つ目の方法では、航空写真をノートブック ワークスペースにアップロードし、コード セルに追加して、copy_raster() 関数を実行してデータを抽出します。dataset = "/arcgis/home/Aerial imagery.tif"
imagery = copy_raster(input_raster=dataset, output_name="Aerial_imagery", raster_type_name="Raster Dataset")
2 つ目の方法では、航空写真をポータルにホスト イメージ レイヤーとして追加し、そのアイテム ID を使用してノートブックにイメージ レイヤーを追加します。imagery = gis.content.get("<imagery-layer-item-id>")
ディープ ラーニング パッケージの追加
事前トレーニング済みの Car Detection-USA モデルは ArcGIS Living Atlas からダウンロードできます。 モデルをダウンロードしたら、ポータルにアイテムとして追加し、ノートブックでそのアイテム ID を使用してアクセスします。model = gis.content.get("<deep-learning-package-item-id>")
モデルの実行
ノートブックで事前トレーニング済みモデルを実行するには、arcgis.learn の detect_objects モジュールを使用します。 このモジュールは、画像を入力として受け取り、画像内に存在する車の数を検出してカウントします。
注意:
目的の出力が得られるまで、さまざまな値でモデルの引数を拡張することで、モデルのパフォーマンスを改善できる可能性があります。
model_arguments = {
"padding": "100", # The number of pixels at the border of image tiles from which predictions are blended for adjacent tiles. To smooth the output while reducing artifacts, increase the value
"batch_size": "16", # Change batch size as per GPU specifications
"threshold": "0.5", # Get detections greater than 50% confidence
"tile_size": "224", # The width and height of image tiles into which the imagery is split for prediction
}注意:
GPU が構成されている場合、detect_object() メソッド内でコンテキストを設定し、GPU 環境に設定できます。context = { "processorType": "GPU" }
num_cars = {}
detected_cars = detect_objects(
input_raster=imagery,
model = model,
output_name = "detected_cars",
)
num_cars[imagery.name] = len(detected_cars.query(as_df=True))モデルの結果
最後に、モデルを実行した後、num_cars の出力を表示できます。print(f"Number of cars is {num_cars}.")