Skip To Content

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

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

このノートブック ワークフローの例では、TensorFlow Lite フレームワークを使用してモバイル アプリケーション向けのディープ ラーニング モデルをトレーニングします。 植物種を分類し、対応するファイルを作成して直接推論用にデプロイできるよう、ワークフローをトレーニングします。

要件

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

  • トレーニング データセット - ラベル付けされた多様な植物種の画像で構成されます。
    注意:

    データセットのサイズは約 440 MB ですが、この例では、そのうちの 200 MB のみを使用します。 トレーニング データセットにアクセスできない場合、必要な形式で適切なトレーニング データを生成するにはラスター サーバーが必要です。

  • このワークフローを実行するには、ノートブック環境の最大メモリーの上限を 15 GB に設定する必要があります。 Standard および Advanced のノートブック環境のメモリー上限は、デフォルトでそれぞれ 4 GB と 6 GB に設定されています。 この上限を変更するには、管理者アクセス権限で ArcGIS Notebook Server Manager にサイン インし、[設定] > [ランタイム] の順にクリックします。
    注意:

    このワークフローに必要なメモリー上限は、トレーニング データのサイズによって異なります。

  • ディープ ラーニングは計算上の負荷が大きいため、大規模なデータセットを処理するには高性能 GPU を使用することをおすすめします。

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

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

#To enable TensorFlow as backend
%env ARCGIS_ENABLE_TF_BACKEND=1
 
import os
from pathlib import Path
 
from arcgis.gis import GIS
from arcgis.learn import prepare_data, FeatureClassifier
 
gis = GIS("home")

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

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

#Adding zipped file from workspace
#Use export_training_data() to get the training data
filepath = "/arcgis/home/train_200MB_a_tensorflow-lite_model_for_identifying_plant_species.zip"
 
#Extract zip
import zipfile
with zipfile.ZipFile(filepath, "r") as zip_ref:
   zip_ref.extractall(Path(filepath).parent)
 
#Get the data path
data_path = Path(os.path.join(os.path.splitext(filepath)[0]))
 
#Filter non-RGB images
from glob import glob
from PIL import Image
 
for image_filepath in glob(os.path.join(data_path, "images", "**","*.jpg")):
   if Image.open(image_filepath).mode != "RGB":
       os.remove(image_filepath)

データの準備

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

data = prepare_data(
    path=data_path,
    dataset_type="Imagenet",
    batch_size=64,
    chip_size=224
)

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

データの視覚化

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

data.show_batch(rows=2)

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

arcgis.learn のフィーチャ分類器モデルは、各フィーチャのクラスを判定します。 フィーチャ分類器には、次のパラメーターが必要です。

  • backbone - オプションの文字列。 フィーチャ抽出に使用されるバックボーンの畳み込みニューラル ネットワーク モデルで、デフォルトは resnet34 です。 サポートされるバックボーンには、ResNet ファミリーと backbones() から指定された Timm モデル (実験的なサポート) が含まれます。
  • backend - オプションの文字列。

    このパラメーターは、このモデルで使用するバックエンド フレームワークを制御し、デフォルトは pytorch です。

model = FeatureClassifier(data, backbone="MobileNetV2", backend="tensorflow")

学習率の計算

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

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

モデルの適合

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

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

model.fit(3, lr=lr)

結果の視覚化

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

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

モデルの保存

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

model.save("Plant-identification-25-tflite", framework="tflite")

モデルのデプロイ

これで、保存した .dlpk ファイルを他のデータセットとともに配置し、組織内で共有できるようになりました。 .dlpk ファイルの使用方法については、ディープ ラーニングを使用した航空写真での車両数のカウントをご参照ください。