通常、ディープ ラーニング モデルは大規模で、膨大な計算能力を必要とします。 モデルのトレーニングと 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 Python の prepare_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 ファイルの使用方法については、「例: 事前トレーニング済みモデルを使用した推論」をご参照ください。