例: エンドツーエンドのディープ ラーニング ワークフロー

通常、ディープ ラーニング モデルは大規模で、膨大な計算能力を必要とします。 モデルのトレーニングと ArcGIS API for Python を統合することで、コンパクトでモバイル デプロイメントに適したディープ ラーニング モデルを作成できます。

このノートブック ワークフローの例では、Multi-task Road Extractor モデルを使用しえ、衛星画像から道路網を抽出します。

要件

このワークフローを実行するには、次の要件を満たしている必要があります。

  • パリ地域内の道路の中心線に関する SpaceNet データで構成されるトレーニング データセット
    注意:

    このトレーニング データセットにアクセスできない場合は、必要な形式で適切なトレーニング データを生成するために、ラスター サーバーが必要です。

  • ディープ ラーニングは計算上の負荷が大きいため、Advanced with GPU サポートのノートブック ランタイムを使用することをおすすめします。

Python ライブラリーのインポート

次の Python ライブラリーをインポートします。

from arcgis.gis import GIS
gis = GIS("home")

import os, zipfile
from pathlib import Path

from arcgis.learn import prepare_data, MultiTaskRoadExtractor

ワークスペースへのデータのアップロード

データセットを、images という名前のフォルダー内にラベル付けされた画像チップを含む .zip ファイルとして、ノートブック ワークスペースの Files にアップロードします。

#Adding zipped file from workspace
filepath = training_data = gis1.content.get('itemID')
filepath = training_data.download(save_path='/arcgis/home/input', file_name=training_data.name)
filepath
assert os.path.exists(filepath) == 1

#Extract zip
with zipfile.ZipFile(filepath, 'r') as zip_ref:
    zip_ref.extractall(Path(filepath).parent)
 
#Get the data path
output_path = Path(os.path.join(os.path.splitext(filepath)[0]))

データの準備

ArcGIS API for Pythonprepare_data() 関数は、ディープ ラーニング ワークフロー用のデータを準備します。 この関数は、トレーニング サンプルを読み取り、トレーニング データにさまざまな変換と拡張を適用することで、データ準備プロセスを自動化します。 これらの拡張は、限られたデータでモデルをトレーニングできるようにし、モデルの過剰適合を防ぎます。

data = prepare_data(
    path=output_path,
    batch_size=4,
    chip_size=512
)
data.classes

prepare_data() 関数のパラメーターの詳細については、arcgis.learn API リファレンスをご参照ください。

データの視覚化

データの準備が完了したら、show_batch() 関数を使用してそのサンプルを視覚化できます。

data.show_batch(alpha=1)

モデル アーキテクチャーの読み込み

arcgis.learn の Multi-task Road Extractor フレームワークでは、mt1_model パラメーターを使用して設定できる 2 つのアーキテクチャーがサポートされています。 このパラメーターは linknet または hourglass のいずれかのアーキテクチャーに設定できます。

必要に応じて、モデル固有の詳細パラメーターをこの段階で設定できます:

  • gaussian_thresh - 必要な道幅の設定を可能にするガウス閾値を設定します。
  • orient_bin_size - 方位角のビン サイズを設定します。
  • orient_theta - 方位マスクの幅を設定します。

model = MultiTaskRoadExtractor(data, mtl_model="hourglass")

学習率の計算

ArcGIS API for Python は fast.ai の Learning Rate Finder を使用して、モデルのトレーニングに最適な学習率を見つけます。 lr_find() メソッドを使用して、堅牢なモデルをトレーニングするための最適な学習率を見つけます。 モデルの最初の実行で学習率を決定した後、その後の実行で再トレーニング時に固定値として渡すことができます。

lr = model.lr_find()
#lr =  0.0005754 #from the first run

モデルの適合

fit() メソッドを使用してモデルをトレーニングします。 このメソッドには、エポック パラメーターの入力が必要です。 エポックは、モデルがトレーニング データセット全体に公開される回数を定義します。 各エポックで、モデルはデータに基づいて重みを学習および調整します。 次の例では、テストの目的でモデルを 3 エポック実行しています。

正確なモデルを取得してデプロイメントするには、25 エポックから始めることをおすすめします。

model.fit(3, lr=lr, early_stopping=True)

結果の視覚化

ノートブックでモデルの結果を検証するには、show_results() メソッドを使用して、モデルの予測とランダムなグランド トゥルース画像を比較できます。

model.show_results(rows=4, thresh=0.2)

モデルの保存

トレーニング済みのモデルの精度を確認したら、将来のデプロイメント用に保存します。 デフォルトでは、モデルはトレーニング データ フォルダー内の models サブフォルダーに .dlpk ファイルとして保存されます。

model.save('/arcgis/home/road_model_for_spacenet_data')

モデルのデプロイ

これで、保存した .dlpk ファイルを他のデータセットとともに配置し、組織内で共有できるようになりました。 .dlpk ファイルの使用方法については、「例: 事前トレーニング済みモデルを使用した推論」をご参照ください。