使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分

红树林是健康生态系统的重要组成部分,人类活动是其逐渐从世界各地海岸线消失的主要原因之一。 使用机器学习 (ML) 模型从卫星图像中识别红树林区域为研究人员提供了一种有效的方法来监测森林随时间的大小。 在 部分1 在本系列中,我们展示了如何以自动方式收集卫星数据并在 亚马逊SageMaker Studio 具有交互式可视化。 在这篇文章中,我们将展示如何使用 亚马逊SageMaker自动驾驶仪 自动化构建自定义红树林分类器的过程。

使用 Autopilot 训练模型

Autopilot 提供了一种平衡的方式来构建多个模型并选择最佳模型。 在轻松创建不同数据预处理技术和 ML 模型的多种组合的同时,Autopilot 可以根据需要为数据科学家提供对这些组件步骤的完全控制。

您可以使用其中一种 AWS 开发工具包来使用 Autopilot(详细信息在 Autopilot API 参考指南) 或通过 Studio。 我们按照本节中概述的步骤在我们的 Studio 解决方案中使用 Autopilot:

  1. 在 Studio Launcher 页面上,选择加号 新的自动驾驶仪实验.
    使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。
  2. 针对 连接您的数据, 选择 查找 S3 存储桶,然后输入您保存训练和测试数据集的存储桶名称。
  3. 针对 数据集文件名,输入您在 准备训练数据 部分 部分1.
  4. 针对 输出数据位置(S3 存储桶),输入您在步骤 2 中使用的相同存储桶名称。
  5. 针对 数据集目录名称,在您希望 Autopilot 存储工件的存储桶下输入文件夹名称。
  6. 针对 您的 S3 输入是清单文件吗?,选择 关闭.
  7. 针对 目标,选择 标签.
  8. 针对 自动部署,选择 关闭.
    使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。
  9. 在下面 高级设置,为 机器学习问题类型,选择 二进制分类.
  10. 针对 客观指标,选择 AUC.
  11. 针对 选择如何运行您的实验,选择 否,运行试点以创建包含候选定义的笔记本.
  12. 建立实验.
    使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。
    有关创建实验的更多信息,请参阅 创建 Amazon SageMaker Autopilot 实验.运行此步骤可能需要大约 15 分钟。
  13. 完成后,选择 打开候选代笔记本,这会以只读模式打开一个新笔记本。
    使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。
  14. 导入笔记本 使笔记本可编辑。
    使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。
  15. 对于图像,选择 数据科学.
  16. 针对 核心,选择 Python的3.
  17. 选择.
    使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

这个自动生成的笔记本有详细的解释,并提供对实际模型构建任务的完全控制。 的定制版本 笔记本,其中分类器使用 2013 年的 Landsat 卫星波段进行训练,可在代码库中找到 notebooks/mangrove-2013.ipynb.

模型构建框架由两部分组成:作为数据处理步骤一部分的特征转换,以及作为模型选择步骤一部分的超参数优化 (HPO)。 这些任务的所有必要工件都是在 Autopilot 实验期间创建并保存在 亚马逊简单存储服务 (亚马逊 S3)。 第一个笔记本单元将这些工件从 Amazon S3 下载到本地 亚马逊SageMaker 文件系统进行检查和任何必要的修改。 有两个文件夹: generated_modulesagemaker_automl,其中存储了运行笔记本所需的所有 Python 模块和脚本。 各种特征转换步骤,如插补、缩放和 PCA 保存为 generated_modules/candidate_data_processors/dpp*.py.

Autopilot 基于 XGBoost、线性学习器和多层感知器 (MLP) 算法创建三种不同的模型。 候选管道由特征转换选项之一组成,称为 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 模型。 这就是 Autopilot 为数据科学家提供完全控制的地方,他们可以选择自动生成的特征转换和模型选择步骤或构建自己的组合。

您现在可以将管道添加到池中以供 Autopilot 运行实验,如下所示:

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

这是一个重要的步骤,您可以根据主题专业知识决定只保留 Autopilot 建议的候选人子集,以减少总运行时间。 现在,保留所有 Autopilot 建议,您可以列出如下:

automl_interactive_runner.display_candidates()

候选人名字 算法 特征转换器
dpp0-xgboost xgboost dpp0.py
dpp1-xgboost xgboost dpp1.py
dpp2-线性学习器 线性学习器 dpp2.py
dpp3-xgboost xgboost dpp3.py
dpp4-xgboost xgboost dpp4.py
dpp5-xgboost xgboost dpp5.py
dpp6-mlp MLP dpp6.py

完整的自动驾驶仪实验分为两部分。 首先,您需要运行数据转换作业:

automl_interactive_runner.fit_data_transformers(parallel_jobs=7)

如果您不对 dpp*.py 文件。

下一步是通过调整相应算法的超参数来构建最佳模型集。 超参数通常分为两部分:静态和可调。 对于共享相同算法的所有候选者,静态超参数在整个实验过程中保持不变。 这些超参数作为字典传递给实验。 如果您选择通过从三轮五折交叉验证方案中最大化 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 笔记本.

要创建一个可以并行测试所有七个候选者的实验,请创建一个多算法 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,
)

在默认设置中,Autopilot 会在调谐器中挑选 250 个作业来挑选最佳模型。 对于这个用例,设置就足够了 max_jobs=50 节省时间和资源,在选择最佳超参数集方面没有任何重大损失。 最后提交HPO作业如下:

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

在 ml.m80xlarge 实例上,该过程大约需要 5.4 分钟。 您可以通过选择在 SageMaker 控制台上监控进度 超参数调整作业 产品培训 在导航窗格中。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

您可以通过选择正在进行的工作的名称来可视化大量有用的信息,包括每个候选人的表现。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

最后,比较最佳候选者的模型性能如下:

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 运行时间(秒)
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() 

培训工作名称 mangrove-2-notebook–211021-2016-012-500271c8
培训工作状态 完成
最终目标值 0.96008
培训开始时间 2021-10-21 20:22:55+00:00
培训结束时间 2021-10-21 21:08:06+00:00
训练经过时间秒 2711
培训工作定义名称 dpp6-mlp
辍学概率 0.415778
嵌入大小因子 0.849226
256
学习率 0.00013862
小批量大小 317
网络类型 前馈
权重衰减 1.29323-12

创建推理管道

要对新数据生成推理,您必须在 SageMaker 上构建推理管道以托管可以稍后调用以生成推理的最佳模型。 SageMaker 管道模型需要三个容器作为其组件:数据转换、算法和逆标签转换(如果需要将数值预测映射到非数值标签)。 为简洁起见,以下代码段中仅显示了部分所需代码; 完整的代码可在 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()))

有关对模型预测进行后处理以进行评估和绘图的完整详细信息,请参见 notebooks/model_performance.ipynb.

使用批量转换对测试数据集进行推断

现在您已经使用 Autopilot 创建了性能最佳的模型,我们可以使用该模型进行推理。 要对大型数据集进行推断,使用批量转换更有效。 让我们在整个数据集(训练和测试)上生成预测并将结果附加到特征中,以便我们可以执行进一步的分析,例如检查预测与实际情况以及预测类别之间的特征分布。

首先,我们在 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 控制台上监控作业的状态。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

可视化模型性能

您现在可以将测试数据集(包括印度、缅甸、古巴和越南的区域)上最佳模型的性能可视化为混淆矩阵。 该模型对代表红树林的像素具有较高的召回值,但准确率仅为 75% 左右。 非红树林或其他像素的精度为 99%,召回率为 85%。 您可以调整模型预测的概率截止值,以根据特定用例调整各自的值。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

值得注意的是,结果比内置的smileCart 模型有了显着的改进。

可视化模型预测

最后,观察地图上特定区域的模型性能很有用。 在下图中,印度-孟加拉国边境的红树林区域用红色表示。 从属于测试数据集的 Landsat 图像块中采样的点叠加在该区域上,其中每个点都是模型确定代表红树林的像素。 蓝点被模型正确分类,而黑点代表模型错误。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

下图仅显示了模型预测不代表红树林的点,其配色方案与上例相同。 灰色轮廓是 Landsat 斑块的一部分,不包括任何红树林。 从图像中可以明显看出,该模型在对水面上的点进行分类时没有犯任何错误,但在区分代表红树林的像素和代表常规树叶的像素时面临挑战。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

下图显示了缅甸红树林地区的模型性能。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

在下图中,该模型在识别红树林像素方面做得更好。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。

清理

如果继续运行,SageMaker 推理端点将继续产生成本。 完成后按如下方式删除端点:

sagemaker.delete_endpoint(EndpointName=pipeline_model.name)

结论

这一系列帖子为数据科学家解决 GIS 问题提供了一个端到端的框架。 部分1 展示了 ETL 过程以及与数据进行可视化交互的便捷方式。 第 2 部分展示了如何使用 Autopilot 自动构建自定义红树林分类器。

您可以使用此框架来探索新的卫星数据集,其中包含对红树林分类有用的更丰富波段集,并通过结合领域知识探索特征工程。


作者简介

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。 安德烈·伊万诺维奇 是即将在多伦多大学攻读计算机科学硕士学位的学生,也是多伦多大学工程科学专业的应届毕业生,主修机器智能,辅修机器人/机电一体化。 他对计算机视觉、深度学习和机器人技术感兴趣。 他在亚马逊暑期实习期间完成了这篇文章中介绍的工作。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。董大卫 是 Amazon Web Services 的数据科学家。

使用 Amazon SageMaker Studio 和 Amazon SageMaker Autopilot 使用卫星图像特征识别红树林 - 第 2 部分 PlatoBlockchain 数据智能。 垂直搜索。 哎。阿尔卡约蒂米斯拉 是 Amazon LastMile Transportation 的数据科学家。 他热衷于应用计算机视觉技术来解决有助于地球的问题。 他喜欢与非营利组织合作,并且是 埃基皮网.

时间戳记:

更多来自 AWS机器学习