AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

AmazonSageMakerStudioとAmazonSageMakerAutopilotを使用した衛星画像機能を使用してマングローブ林を特定する–パート2

マングローブ林は健全な生態系の重要な部分であり、人間の活動は、世界中の海岸線から徐々に姿を消している主な理由のXNUMXつです。 機械学習(ML)モデルを使用して、衛星画像からマングローブ領域を特定することで、研究者は森林のサイズを経時的に監視する効果的な方法を得ることができます。 の 第1部 このシリーズの中で、衛星データを自動化して収集し、分析する方法を示しました。 Amazon SageMakerスタジオ インタラクティブな視覚化で。 この投稿では、使用方法を示します Amazon SageMakerオートパイロット カスタムマングローブ分類器を構築するプロセスを自動化します。

オートパイロットでモデルをトレーニングする

オートパイロットは、複数のモデルを構築し、最適なモデルを選択するためのバランスの取れた方法を提供します。 最小限の労力でさまざまなデータ前処理技術とMLモデルの複数の組み合わせを作成しながら、オートパイロットは、必要に応じて、データサイエンティストにこれらのコンポーネントステップの完全な制御を提供します。

AWS SDKのXNUMXつを使用してオートパイロットを使用できます(詳細は、 オートパイロットのAPIリファレンスガイド)またはStudioを介して。 このセクションで概説されている手順に従って、Studioソリューションでオートパイロットを使用します。

  1. Studio Launcherページで、のプラス記号を選択します 新しい自動操縦実験.
    AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。
  2. データを接続する選択 S3バケットを探す、トレーニングとテストのデータセットを保存したバケット名を入力します。
  3. データセットファイル名、で作成したトレーニングデータファイルの名前を入力します トレーニングデータを準備する のセクション 第1部.
  4. 出力データの場所(S3バケット)、手順2で使用したのと同じバケット名を入力します。
  5. データセットディレクトリ名、オートパイロットにアーティファクトを保存するバケットの下にフォルダ名を入力します。
  6. S3入力はマニフェストファイルですか?、選択する オフ.
  7. ターゲット、選択する ラベル.
  8. 自動デプロイ、選択する オフ.
    AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。
  9. 詳細設定、用 機械学習の問題タイプ、選択する 二項分類.
  10. 客観的な指標、選択する AUC.
  11. 実験の実行方法を選択してください、選択する いいえ、パイロットを実行して、候補の定義を含むノートブックを作成します.
  12. 選択する 実験を作成.
    AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。
    実験の作成の詳細については、を参照してください。 AmazonSageMakerAutopilot実験を作成する。このステップの実行には約15分かかる場合があります。
  13. 完了したら、 候補世代ノートブックを開く、読み取り専用モードで新しいノートブックを開きます。
    AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。
  14. 選択する ノートブックをインポートする ノートブックを編集可能にします。
    AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。
  15. 画像の場合は、 データサイエンス.
  16. カーネル、選択する Pythonの3.
  17. 選択する 選択.
    AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

この自動生成されたノートブックには詳細な説明があり、従うべき実際のモデル構築タスクを完全に制御できます。 のカスタマイズされたバージョン ノート、2013年からLandsat衛星バンドを使用して分類器がトレーニングされている場合は、以下のコードリポジトリで入手できます。 notebooks/mangrove-2013.ipynb.

モデル構築フレームワークは、データ処理ステップの一部としての機能変換と、モデル選択ステップの一部としてのハイパーパラメーター最適化(HPO)のXNUMXつの部分で構成されています。 これらのタスクに必要なすべてのアーティファクトは、自動操縦実験中に作成され、に保存されました。 Amazon シンプル ストレージ サービス (Amazon S3)。 最初のノートブックセルは、これらのアーティファクトをAmazonS3からローカルにダウンロードします アマゾンセージメーカー 検査および必要な変更のためのファイルシステム。 XNUMXつのフォルダがあります: generated_module & sagemaker_automl、ノートブックの実行に必要なすべてのPythonモジュールとスクリプトが保存されています。 代入、スケーリング、PCAなどのさまざまな特徴変換ステップは次のように保存されます generated_modules/candidate_data_processors/dpp*.py.

オートパイロットは、XGBoost、線形学習器、および多層パーセプトロン(MLP)アルゴリズムに基づいてXNUMXつの異なるモデルを作成します。 候補パイプラインは、機能変換オプションのXNUMXつで構成されます。 data_transformer、およびアルゴリズム。 パイプラインはPython辞書であり、次のように定義できます。

candidate1 = { "data_transformer": { "name": "dpp5", "training_resource_config": { "instance_type": "ml.m5.4xlarge", "instance_count": 1, "volume_size_in_gb": 50 }, "transform_resource_config": { "instance_type": "ml.m5.4xlarge", "instance_count": 1, }, "transforms_label": True, "transformed_data_format": "application/x-recordio-protobuf", "sparse_encoding": True }, "algorithm": { "name": "xgboost", "training_resource_config": { "instance_type": "ml.m5.4xlarge", "instance_count": 1, }, }
}

この例では、パイプラインは次のスクリプトに従ってトレーニングデータを変換します。 generated_modules/candidate_data_processors/dpp5.py XGBoostモデルを構築します。 ここで、オートパイロットはデータサイエンティストに完全な制御を提供します。データサイエンティストは、自動生成された機能変換とモデル選択の手順を選択したり、独自の組み合わせを構築したりできます。

これで、オートパイロットのプールにパイプラインを追加して、次のように実験を実行できます。

from sagemaker_automl import AutoMLInteractiveRunner, AutoMLLocalCandidate automl_interactive_runner = AutoMLInteractiveRunner(AUTOML_LOCAL_RUN_CONFIG)
automl_interactive_runner.select_candidate(candidate1)

これは、対象分野の専門知識に基づいて、オートパイロットによって提案された候補のサブセットのみを保持して、合計実行時間を短縮することを決定できる重要なステップです。 今のところ、次のようにリストできるすべての自動操縦の提案を保持します。

automl_interactive_runner.display_candidates()

候補者名 アルゴリズム フィーチャートランス
dpp0-xgboost xgブースト dpp0.py
dpp1-xgboost xgブースト dpp1.py
dpp2-線形学習者 線形学習者 dpp2.py
dpp3-xgboost xgブースト dpp3.py
dpp4-xgboost xgブースト dpp4.py
dpp5-xgboost xgブースト dpp5.py
dpp6-mlp mlp dpp6.py

完全な自動操縦実験はXNUMXつの部分で行われます。 まず、データ変換ジョブを実行する必要があります。

automl_interactive_runner.fit_data_transformers(parallel_jobs=7)

これ以上変更を加えない場合、このステップはすべての候補者に対して約30分で完了するはずです。 dpp*.py ファイル。

次のステップは、それぞれのアルゴリズムのハイパーパラメータを調整して、最適なモデルのセットを構築することです。 ハイパーパラメータは通常、静的と調整可能のXNUMXつの部分に分けられます。 静的ハイパーパラメータは、同じアルゴリズムを共有するすべての候補について、実験全体を通じて変更されません。 これらのハイパーパラメータは、辞書として実験に渡されます。 XNUMX分割交差検定スキームのXNUMXラウンドからAUCを最大化することによって最良のXGBoostモデルを選択することを選択した場合、辞書は次のコードのようになります。

{ 'objective': 'binary:logistic', 'eval_metric': 'auc', '_kfold': 5, '_num_cv_round': 3,
} 

調整可能なハイパーパラメータについては、範囲とスケーリングタイプを含む別のディクショナリを渡す必要があります。

{ 'num_round': IntegerParameter(64, 1024, scaling_type='Logarithmic'), 'max_depth': IntegerParameter(2, 8, scaling_type='Logarithmic'), 'eta': ContinuousParameter(1e-3, 1.0, scaling_type='Logarithmic'),
... }

ハイパーパラメータの完全なセットは、 mangrove-2013.ipynb ノート.

XNUMXつの候補すべてを並行してテストできる実験を作成するには、マルチアルゴリズムHPOチューナーを作成します。

multi_algo_tuning_parameters = automl_interactive_runner.prepare_multi_algo_parameters( objective_metrics=ALGORITHM_OBJECTIVE_METRICS, static_hyperparameters=STATIC_HYPERPARAMETERS, hyperparameters_search_ranges=ALGORITHM_TUNABLE_HYPERPARAMETER_RANGES)

客観的な指標は、アルゴリズムごとに個別に定義されます。

ALGORITHM_OBJECTIVE_METRICS = { 'xgboost': 'validation:auc', 'linear-learner': 'validation:roc_auc_score', 'mlp': 'validation:roc_auc',
}

すべての実験でハイパーパラメータの可能なすべての値を試すのは無駄です。 ベイジアン戦略を採用して、HPOチューナーを作成できます。

multi_algo_tuning_inputs = automl_interactive_runner.prepare_multi_algo_inputs()
ase_tuning_job_name = "{}-tuning".format(AUTOML_LOCAL_RUN_CONFIG.local_automl_job_name) tuner = HyperparameterTuner.create( base_tuning_job_name=base_tuning_job_name, strategy='Bayesian', objective_type='Maximize', max_parallel_jobs=10, max_jobs=50, **multi_algo_tuning_parameters,
)

デフォルト設定では、オートパイロットはチューナーで250のジョブを選択して、最適なモデルを選択します。 このユースケースでは、設定するだけで十分です max_jobs=50 ハイパーパラメータの最適なセットを選択するという点で大きなペナルティなしに、時間とリソースを節約できます。 最後に、次のようにHPOジョブを送信します。

tuner.fit(inputs=multi_algo_tuning_inputs, include_cls_metadata=None)

このプロセスは、ml.m80xlargeインスタンスで約5.4分かかります。 SageMakerコンソールで進行状況を監視するには、 ハイパーパラメータ調整ジョブ トレーニング ナビゲーションペインに表示されます。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

進行中のジョブの名前を選択することにより、各候補者のパフォーマンスなど、多くの有用な情報を視覚化できます。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

最後に、次のように最適な候補のモデルパフォーマンスを比較します。

from sagemaker.analytics import HyperparameterTuningJobAnalytics SAGEMAKER_SESSION = AUTOML_LOCAL_RUN_CONFIG.sagemaker_session
SAGEMAKER_ROLE = AUTOML_LOCAL_RUN_CONFIG.role tuner_analytics = HyperparameterTuningJobAnalytics( tuner.latest_tuning_job.name, sagemaker_session=SAGEMAKER_SESSION) df_tuning_job_analytics = tuner_analytics.dataframe() df_tuning_job_analytics.sort_values( by=['FinalObjectiveValue'], inplace=True, ascending=False if tuner.objective_type == "Maximize" else True) # select the columns to display and rename
select_columns = ["TrainingJobDefinitionName", "FinalObjectiveValue", "TrainingElapsedTimeSeconds"]
rename_columns = { "TrainingJobDefinitionName": "candidate", "FinalObjectiveValue": "AUC", "TrainingElapsedTimeSeconds": "run_time" } # Show top 5 model performances
df_tuning_job_analytics.rename(columns=rename_columns)[rename_columns.values()].set_index("candidate").head(5)

候補者 AUC run_time(s)
dpp6-mlp 0.96008 2711.0
dpp4-xgboost 0.95236 385.0
dpp3-xgboost 0.95095 202.0
dpp4-xgboost 0.95069 458.0
dpp3-xgboost 0.95015 361.0

MLPに基づく最高のパフォーマンスのモデルは、データ処理ステップのさまざまな選択肢を備えたXGBoostモデルよりもわずかに優れていますが、トレーニングにもはるかに長い時間がかかります。 使用されるハイパーパラメータの組み合わせなど、MLPモデルトレーニングに関する重要な詳細を次のように見つけることができます。

df_tuning_job_analytics.loc[df_tuning_job_analytics.TrainingJobName==best_training_job].T.dropna() 

TrainingJobname mangrove-2-notebook–211021-2016-012-500271c8
trainingjobstatus 記入済みの
finalobjectivevalue 0.96008
トレーニング開始時間 2021-10-21 20:22:55+00:00
TrainingEndtime 2021-10-21 21:08:06+00:00
TrainingElapsedTimeseconds 2711
トレーニングジョブ定義名 dpp6-mlp
ドロップアウトの可能性 0.415778
埋め込みサイズ係数 0.849226
256
Learning_rate 0.00013862
ミニバッチサイズ 317
ネットワーク型 フィードフォワード
体重の減衰 1.29323e-12

推論パイプラインを作成する

新しいデータで推論を生成するには、SageMakerで推論パイプラインを構築して、後で呼び出して推論を生成できる最適なモデルをホストする必要があります。 SageMakerパイプラインモデルでは、コンポーネントとして、データ変換、アルゴリズム、逆ラベル変換(数値予測を非数値ラベルにマッピングする必要がある場合)のXNUMXつのコンテナーが必要です。 簡潔にするために、必要なコードの一部のみを次のスニペットに示します。 完全なコードは、 mangrove-2013.ipynb ノート:

from sagemaker.estimator import Estimator
from sagemaker import PipelineModel
from sagemaker_automl import select_inference_output …
# Final pipeline model model_containers = [best_data_transformer_model, best_algo_model]
if best_candidate.transforms_label: model_containers.append(best_candidate.get_data_transformer_model( transform_mode="inverse-label-transform", role=SAGEMAKER_ROLE, sagemaker_session=SAGEMAKER_SESSION)) # select the output type
model_containers = select_inference_output("BinaryClassification", model_containers, output_keys=['predicted_label'])

モデルコンテナが構築されたら、次のようにパイプラインを構築してデプロイできます。

from sagemaker import PipelineModel pipeline_model = PipelineModel( name=f"mangrove-automl-2013", role=SAGEMAKER_ROLE, models=model_containers, vpc_config=AUTOML_LOCAL_RUN_CONFIG.vpc_config) pipeline_model.deploy(initial_instance_count=1, instance_type='ml.m5.2xlarge', endpoint_name=pipeline_model.name, wait=True)

エンドポイントの展開は、完了するまでに約10分かかります。

エンドポイントを使用してテストデータセットの推論を取得します

エンドポイントがデプロイされたら、機能B1〜B7のペイロードを使用してエンドポイントを呼び出し、画像内の各ピクセルをマングローブ(1)またはその他(0)として分類できます。

import boto3
sm_runtime = boto3.client('runtime.sagemaker') pred_labels = []
with open(local_download, 'r') as f: for i, row in enumerate(f): payload = row.rstrip('n') x = sm_runtime.invoke_endpoint(EndpointName=inf_endpt, ContentType="text/csv", Body=payload) pred_labels.append(int(x['Body'].read().decode().strip()))

評価とプロットのためのモデル予測の後処理の詳細については、次のURLを参照してください。 notebooks/model_performance.ipynb.

バッチ変換を使用してテストデータセットの推論を取得します

オートパイロットを使用して最高のパフォーマンスを発揮するモデルを作成したので、このモデルを推論に使用できます。 大規模なデータセットを推測するには、バッチ変換を使用する方が効率的です。 データセット全体(トレーニングとテスト)で予測を生成し、その結果を特徴に追加して、さらに分析を実行して、たとえば、予測と実績、および予測されたクラス間の特徴の分布を確認しましょう。

まず、Amazon S3で、前のデータ処理ステップからのトレーニングおよびテストデータの場所を指すマニフェストファイルを作成します。

import boto3
data_bucket = <Name of the S3 bucket that has the training data>
prefix = "LANDSAT_LC08_C01_T1_SR/Year2013"
manifest = "[{{"prefix": "s3://{}/{}/"}},n"train.csv",n"test.csv"n]".format(data_bucket, prefix)
s3_client = boto3.client('s3')
s3_client.put_object(Body=manifest, Bucket=data_bucket, Key=f"{prefix}/data.manifest")

これで、バッチ変換ジョブを作成できます。 入力トレインとテストデータセットには label 最後の列として、推論中に削除する必要があります。 それをするために、私たちは合格します InputFilter セクションに DataProcessing 口論。 コード "$[:-2]" 最後の列を削除することを示します。 予測された出力は、さらに分析するためにソースデータと結合されます。

次のコードでは、バッチ変換ジョブの引数を作成してから、 create_transform_job 関数:

from time import gmtime, strftime batch_job_name = "Batch-Transform-" + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
output_location = "s3://{}/{}/batch_output/{}".format(data_bucket, prefix, batch_job_name)
input_location = "s3://{}/{}/data.manifest".format(data_bucket, prefix) request = { "TransformJobName": batch_job_name, "ModelName": pipeline_model.name, "TransformOutput": { "S3OutputPath": output_location, "Accept": "text/csv", "AssembleWith": "Line", }, "TransformInput": { "DataSource": {"S3DataSource": {"S3DataType": "ManifestFile", "S3Uri": input_location}}, "ContentType": "text/csv", "SplitType": "Line", "CompressionType": "None", }, "TransformResources": {"InstanceType": "ml.m4.xlarge", "InstanceCount": 1}, "DataProcessing": {"InputFilter": "$[:-2]", "JoinSource": "Input"}
} sagemaker = boto3.client("sagemaker")
sagemaker.create_transform_job(**request)
print("Created Transform job with name: ", batch_job_name)

SageMakerコンソールでジョブのステータスを監視できます。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

モデルのパフォーマンスを視覚化する

インド、ミャンマー、キューバ、ベトナムの地域で構成されるテストデータセットで、混同行列として最良のモデルのパフォーマンスを視覚化できるようになりました。 このモデルは、マングローブを表すピクセルの再現率が高くなっていますが、適合率は約75%にすぎません。 非マングローブまたは他のピクセルの精度は99%で、85%のリコールがあります。 モデル予測の確率カットオフを調整して、特定のユースケースに応じてそれぞれの値を調整できます。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

結果は、組み込みのsmileCartモデルよりも大幅に改善されていることは注目に値します。

モデルの予測を視覚化する

最後に、マップ上の特定の領域でモデルのパフォーマンスを観察すると便利です。 次の画像では、インドとバングラデシュの国境にあるマングローブ地域が赤で描かれています。 テストデータセットに属するLandsat画像パッチからサンプリングされたポイントは、領域に重ね合わされます。各ポイントは、モデルがマングローブを表すと判断したピクセルです。 青い点はモデルによって正しく分類されていますが、黒い点はモデルによる間違いを表しています。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

次の画像は、モデルがマングローブを表していないと予測したポイントのみを示しており、前の例と同じ配色になっています。 灰色の輪郭は、マングローブを含まないLandsatパッチの一部です。 画像から明らかなように、モデルは水上のポイントの分類に間違いはありませんが、マングローブを表すピクセルと通常の葉を表すピクセルを区別する際に課題に直面します。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

次の画像は、ミャンマーのマングローブ地域でのモデルのパフォーマンスを示しています。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

次の画像では、モデルはマングローブのピクセルをより適切に識別しています。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。

クリーンアップ

SageMaker推論エンドポイントは、実行したままにすると引き続きコストが発生します。 完了したら、次のようにエンドポイントを削除します。

sagemaker.delete_endpoint(EndpointName=pipeline_model.name)

まとめ

この一連の投稿は、GIS問題を解決するためのデータサイエンティストにエンドツーエンドのフレームワークを提供しました。 第1部 ETLプロセスと、データを視覚的に操作するための便利な方法を示しました。 パート2では、オートパイロットを使用してカスタムマングローブ分類器の構築を自動化する方法を示しました。

このフレームワークを使用して、マングローブの分類に役立つ豊富なバンドのセットを含む新しい衛星データセットを探索し、ドメイン知識を組み込むことで特徴工学を探索できます。


著者について

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。 アンドレイ・イワノビッチ トロント大学でコンピュータサイエンスの修士号を取得し、トロント大学で工学科学プログラムを最近卒業し、ロボティクス/メカトロニクスのマイナーでマシンインテリジェンスを専攻しています。 彼はコンピュータービジョン、ディープラーニング、ロボット工学に興味があります。 彼はアマゾンでの夏のインターンシップ中にこの投稿で提示された仕事をしました。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。デビッドドン アマゾンウェブサービスのデータサイエンティストです。

AmazonSageMakerStudioとAmazonSageMakerAutopilot – Part 2 PlatoBlockchainDataIntelligenceを使用した衛星画像機能を使用してマングローブの森を特定します。 垂直検索。 愛。アルカジョティ・ミスラ AmazonLastMileTransportationのデータサイエンティストです。 彼は、地球を助ける問題を解決するためにコンピュータービジョン技術を適用することに情熱を注いでいます。 彼は非営利団体と協力するのが大好きで、 えきぴ.org.

タイムスタンプ:

より多くの AWS機械学習