xarvio Digital Farming Solutions 如何利用 Amazon SageMaker 地理空间功能加速其开发

源节点: 1766079

这是一篇客座文章,由 xarvio Digital Farming Solutions 的数据科学家 Julian Blau 合着; BASF Digital Farming GmbH 和 AWS 的 AI/ML 专家解决方案架构师 Antonio Rodriguez

沙维奥 Digital Farming Solutions 是 BASF Digital Farming GmbH 的一个品牌,它是 BASF Agricultural Solutions 部门的一部分。 xarvio 数字农业解决方案提供精准的数字农业产品,帮助农民优化作物生产。 xarvio 产品在全球范围内销售,使用机器学习 (ML)、图像识别技术以及先进的作物和疾病模型,结合来自卫星和气象站设备的数据,提供准确及时的农艺建议,以管理各个领域的需求。 xarvio 产品根据当地农业条件量身定制,可以监测生长阶段并识别病虫害。 它们可以提高效率、节省时间、降低风险并为规划和决策提供更高的可靠性——同时为可持续农业做出贡献。

对于我们的一些用例,我们使用不同的地理空间数据,包括我们用户田地所在区域的卫星图像。 因此,我们每天使用和处理数百个大型图像文件。 最初,我们不得不投入大量人工和精力,使用第三方工具、开源库或通用云服务来摄取、处理和分析这些数据。 在某些情况下,我们可能需要长达 2 个月的时间来为每个特定项目构建管道。 现在,通过利用地理空间功能 亚马逊SageMaker,我们已将此时间缩短至 1-2 周。

节省时间的原因是地理空间数据管道自动化以更有效地交付我们的用例,同时使用内置的可重用组件来加速和改进其他地理区域的类似项目,同时将相同的经过验证的步骤用于其他用途基于相似数据的案例。

在本文中,我们通过一个示例用例来描述我们常用的一些技术,并展示如何结合使用 SageMaker 地理空间功能和其他 SageMaker 功能来实现这些技术,从而带来可衡量的优势。 我们还包括代码示例,以便您可以根据自己的特定用例进行调整。

解决方案概述

用于开发新解决方案的典型遥感项目需要对光学卫星拍摄的图像进行逐步分析,例如 哨兵 or 陆地卫星,结合其他数据,包括天气预报或特定字段属性。 卫星图像为我们提供了宝贵的信息,用于我们的数字农业解决方案,以帮助我们的用户完成各种任务:

  • 在他们的领域及早发现疾病
  • 规划要应用的正确营养和治疗
  • 深入了解天气和水以规划灌溉
  • 预测作物产量
  • 执行其他作物管理任务

为了实现这些目标,我们的分析通常需要使用地理空间领域中常见的不同技术对卫星图像进行预处理。

为了展示 SageMaker 地理空间的功能,我们尝试通过 ML 分割模型识别农田。 此外,我们探索了现有的 SageMaker 地理空间模型和自带模型 (BYOM) 功能,用于地理空间任务,例如土地利用和土地覆盖分类或作物分类,通常需要全景或语义分割技术作为流程中的附加步骤。

在以下部分中,我们将通过一些示例说明如何使用 SageMaker 地理空间功能执行这些步骤。 您还可以在以下提供的端到端示例笔记本中遵循这些 GitHub存储库.

如前所述,我们选择了土地覆盖分类用例,它包括识别我们在地球表面给定地理区域上的物理覆盖类型,按一组类别(包括植被、水或雪)进行组织。 这种高分辨率分类使我们能够高精度地检测田地及其周围环境的位置细节,以后可以将其与其他分析(例如作物分类中的变化检测)联系起来。

客户端设置

首先,假设我们有用户在给定的地理区域种植作物,我们可以在地理空间坐标的多边形中识别这些区域。 对于这篇文章,我们定义了一个德国的示例区域。 我们也可以定义一个给定的时间范围,比如2022年的前几个月。看下面的代码:

### Coordinates for the polygon of your area of interest...
coordinates = [
    [9.181602157004177, 53.14038825707946],
    [9.181602157004177, 52.30629767547948],
    [10.587520893823973, 52.30629767547948],
    [10.587520893823973, 53.14038825707946],
    [9.181602157004177, 53.14038825707946],
]
### Time-range of interest...
time_start = "2022-01-01T12:00:00Z"
time_end = "2022-05-01T12:00:00Z"

在我们的示例中,我们通过编程或代码交互使用 SageMaker 地理空间 SDK,因为我们有兴趣构建代码管道,这些管道可以通过我们流程中所需的不同步骤实现自动化。 请注意,您还可以通过 SageMaker 地理空间中提供的图形扩展来使用 UI 亚马逊SageMaker Studio 如果您更喜欢这种方法,如以下屏幕截图所示。 要访问 Geospatial Studio UI,请打开 SageMaker Studio Launcher 并选择 管理地理空间资源. 您可以在文档中查看更多详细信息以 开始使用 Amazon SageMaker 地理空间功能.

地理空间 UI 主界面

地理空间 UI 作业列表

您可以在这里以图形方式创建、监控和可视化您使用 SageMaker 地理空间功能运行的地球观测作业 (EOJ) 的结果。

回到我们的示例,与 SageMaker 地理空间 SDK 交互的第一步是设置客户端。 我们可以通过与 botocore 图书馆:

import boto3
gsClient = boto3.client('sagemaker-geospatial')

从现在开始,我们可以使用客户端来运行任何感兴趣的 EOJ。

获取数据

对于此用例,我们首先收集给定地理区域的卫星图像。 根据感兴趣的位置,可用卫星的覆盖频率可能或多或少,这些卫星的图像组织方式通常称为 栅格集合.

借助 SageMaker 的地理空间功能,您可以直接访问高质量的数据源以直接获取地理空间数据,包括来自 AWS数据交换在AWS上注册开放数据,等等。 我们可以运行以下命令来列出 SageMaker 已经提供的栅格集合:

list_raster_data_collections_resp = gsClient.list_raster_data_collections()

这将返回可用的不同栅格集合的详细信息,包括 Landsat C2L2 表面反射率 (SR)、Landsat C2L2 表面温度 (ST) 或 Sentinel 2A 和 2B。 方便的是,2A 级图像已经优化为云优化 GeoTIFF (COG)。 请参见以下代码:

…
{'Name': 'Sentinel 2 L2A COGs',
  'Arn': 'arn:aws:sagemaker-geospatial:us-west-2:378778860802:raster-data-collection/public/nmqj48dcu3g7ayw8',
  'Type': 'PUBLIC',
  'Description': 'Sentinel-2a and Sentinel-2b imagery, processed to Level 2A (Surface Reflectance) and converted to Cloud-Optimized GeoTIFFs'
…

让我们以最后一个为例,通过设置我们的 data_collection_arn Sentinel 2 L2A COG 集合 ARN 的参数。

我们还可以通过传递我们定义为感兴趣区域 (AOI) 的多边形坐标来搜索给定地理位置的可用图像。 这使您可以可视化覆盖您为指定 AOI 提交的多边形的可用图像块,包括 亚马逊简单存储服务 (Amazon S3) 这些图像的 URI。 请注意,卫星图像通常以不同的方式提供 根据观察的波长; 我们稍后会在帖子中对此进行更多讨论。

response = gsClient.search_raster_data_collection(**eoj_input_config, Arn=data_collection_arn)

前面的代码返回可用的不同图像块的 S3 URI,您可以使用任何与 GeoTIFF 兼容的库直接进行可视化,例如 光栅. 例如,让我们可视化两个真彩色图像 (TCI) 块。

…
'visual': {'Href': 'https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/32/U/NC/2022/3/S2A_32UNC_20220325_0_L2A/TCI.tif'},
…

真彩色图像 1真彩色图像 2

加工工艺

我们应用的一些最常见的预处理技术包括云移除、地理镶嵌、时间统计、波段数学或堆叠。 所有这些过程现在都可以通过在 SageMaker 中使用 EOJ 直接完成,无需执行手动编码或使用复杂且昂贵的第三方工具。 这使得构建我们的数据处理管道的速度提高了 50%。 借助 SageMaker 地理空间功能,我们可以针对不同的输入类型运行这些流程。 例如:

  • 通过 RasterDataCollectionQuery 参数
  • 将存储在 Amazon S3 中的图像作为输入通过 DataSourceConfig 参数
  • 只需将先前 EOJ 的结果链接到 PreviousEarthObservationJobArn 参数

这种灵活性允许您构建您需要的任何类型的处理管道。

下图说明了我们在示例中涵盖的过程。

地理空间处理任务

在我们的示例中,我们使用栅格数据收集查询作为输入,为此我们传递了 AOI 的坐标和感兴趣的时间范围。 我们还指定了 2% 的最大云覆盖百分比,因为我们希望对我们的地理区域进行清晰且无噪音的观察。 请参见以下代码:

eoj_input_config = {
    "RasterDataCollectionQuery": {
        "RasterDataCollectionArn": data_collection_arn,
        "AreaOfInterest": {
            "AreaOfInterestGeometry": {"PolygonGeometry": {"Coordinates": [coordinates]}}
        },
        "TimeRangeFilter": {"StartTime": time_start, "EndTime": time_end},
        "PropertyFilters": {
            "Properties": [
                {"Property": {"EoCloudCover": {"LowerBound": 0, "UpperBound": 2}}}
            ]
        },
    }
}

有关支持的查询语法的更多信息,请参阅 创建地球观测作业.

去除云缝

由于云层覆盖率高,卫星观测通常用处不大。 云间隙填充或云去除是从图像中替换云像素的过程,可以使用不同的方法来完成,为进一步的处理步骤准备数据。

借助 SageMaker 地理空间功能,我们可以通过指定一个 CloudRemovalConfig 我们作业配置中的参数。

eoj_config =  {
    'CloudRemovalConfig': {
        'AlgorithmName': 'INTERPOLATION',
        'InterpolationValue': '-9999'
    }
}

请注意,我们在示例中使用了具有固定值的插值算法,但也支持其他配置,如 创建地球观测作业 文档。 插值允许它通过考虑周围的像素来估计用于替换多云像素的值。

我们现在可以使用我们的输入和作业配置来运行我们的 EOJ:

response = gsClient.start_earth_observation_job(
    Name =  'cloudremovaljob',
    ExecutionRoleArn = role,
    InputConfig = eoj_input_config,
    JobConfig = eoj_config,
)

根据输入区域和处理参数,此作业需要几分钟才能完成。

完成后,EOJ 的结果将存储在服务拥有的位置,我们可以从那里将结果导出到 Amazon S3,或将这些结果链接为另一个 EOJ 的输入。 在我们的示例中,我们通过运行以下代码将结果导出到 Amazon S3:

response = gsClient.export_earth_observation_job(
    Arn = cr_eoj_arn,
    ExecutionRoleArn = role,
    OutputConfig = {
        'S3Data': {
            'S3Uri': f's3://{bucket}/{prefix}/cloud_removal/',
            'KmsKeyId': ''
        }
    }
)

现在,我们能够可视化存储在我们为各个光谱带指定的 Amazon S3 位置中生成的图像。 例如,让我们检查返回的两个蓝色波段图像。

或者,您也可以使用 Studio 中可用的地理空间扩展以图形方式检查 EOJ 的结果,如以下屏幕截图所示。

云移除 UI 1   云移除 UI 2

时间统计

因为卫星连续绕地球轨道运行,所以特定感兴趣地理区域的图像是在特定时间范围内以特定时间频率拍摄的,例如每天、每 5 天或 2 周,具体取决于卫星。 时间统计过程使我们能够结合在不同时间进行的不同观察,以生成给定区域的聚合视图,例如年平均值,或特定时间范围内所有观察值的平均值。

借助 SageMaker 地理空间功能,我们可以通过设置 TemporalStatisticsConfig 范围。 在我们的示例中,我们获得了近红外 (NIR) 波段的年平均聚合,因为该波段可以揭示冠层顶部以下的植被密度差异:

eoj_config =  {
    'TemporalStatisticsConfig': {
        'GroupBy': 'YEARLY',
        'Statistics': ['MEAN'],
        'TargetBands': ['nir']
    }
}

使用此配置运行 EOJ 几分钟后,我们可以将结果导出到 Amazon S3 以获得如下例所示的图像,我们可以在其中观察以不同颜色强度表示的不同植被密度。 请注意,EOJ 可以生成多个图像作为图块,具体取决于指定时间范围和坐标可用的卫星数据。

时间统计 1时间统计 2

乐队数学

地球观测卫星旨在探测不同波长的光,其中一些波长是人眼看不见的。 每个范围都包含不同波长的特定光谱波段,这些波段与算法相结合可以生成包含有关田地特征的丰富信息的图像,例如植被健康、温度或云的存在等。 这是在通常称为带数学或带算术的过程中执行的。

借助 SageMaker 地理空间功能,我们可以通过设置 BandMathConfig 范围。 例如,让我们通过运行以下代码来获取水分指数图像:

eoj_config =  {
    'BandMathConfig': {
        'CustomIndices': {
            'Operations': [
                {
                    'Name': 'moisture',
                    'Equation': '(nir08 - swir16) / (nir08 + swir16)'
                }
            ]
        }
    }
}

使用此配置运行 EOJ 几分钟后,我们可以导出结果并获取图像,例如以下两个示例。

水分指数1水分指数2水分指数图例

堆叠

与波段数学类似,将波段组合在一起以从原始波段生成合成图像的过程称为堆叠。 例如,我们可以叠加卫星图像的红色、蓝色和绿色光带以生成 AOI 的真彩色图像。

借助 SageMaker 地理空间功能,我们可以通过设置 StackConfig 范围。 让我们按照前面的示例使用以下命令堆叠 RGB 波段:

eoj_config =  {
    'StackConfig': {
        'OutputResolution': {
            'Predefined': 'HIGHEST'
        },
        'TargetBands': ['red', 'green', 'blue']
    }
}

使用此配置运行 EOJ 几分钟后,我们可以导出结果并获取图像。

堆叠 TCI 1堆叠 TCI 2

语义分割模型

作为我们工作的一部分,我们通常使用 ML 模型对预处理图像进行推理,例如检测多云区域或对图像每个区域的土地类型进行分类。

借助 SageMaker 地理空间功能,您可以依靠内置的细分模型来做到这一点。

对于我们的示例,让我们通过指定 LandCoverSegmentationConfig 范围。 这通过使用内置模型对输入运行推理,无需在 SageMaker 中训练或托管任何基础设施:

response = gsClient.start_earth_observation_job(
    Name =  'landcovermodeljob',
    ExecutionRoleArn = role,
    InputConfig = eoj_input_config,
    JobConfig = {
        'LandCoverSegmentationConfig': {},
    },
)

使用此配置运行作业几分钟后,我们可以导出结果并获取图像。

土地覆盖 1土地覆盖 2土地覆盖 3土地覆盖 4

在前面的示例中,图像中的每个像素对应一个土地类型类别,如下图所示。

土地覆盖图例

这使我们能够直接识别场景中特定类型的区域,例如植被或水,为其他分析提供有价值的见解。

使用 SageMaker 带来您自己的模型

如果 SageMaker 提供的最先进的地理空间模型不足以满足我们的用例,我们还可以将到目前为止显示的任何预处理步骤的结果与载入 SageMaker 的任何自定义模型链接起来进行推理,如前所述在这个 SageMaker 脚本模式 例子。 我们可以使用 SageMaker 支持的任何推理模式来执行此操作,包括与实时 SageMaker 端点同步、与 SageMaker 异步端点异步、使用 SageMaker 批量转换的批处理或离线,以及使用 SageMaker 无服务器推理的无服务器。 您可以在 部署模型进行推理 文档。 下图说明了高级工作流程。

推理流程选项

对于我们的示例,假设我们已经启用了两个模型来执行土地覆盖分类和作物类型分类。

我们只需要指向我们经过训练的模型工件,在我们的示例中是一个 PyTorch 模型,类似于以下代码:

from sagemaker.pytorch import PyTorchModel
import datetime

model = PyTorchModel(
    name=model_name, ### Set a model name
    model_data=MODEL_S3_PATH, ### Location of the custom model in S3
    role=role,
    entry_point='inference.py', ### Your inference entry-point script
    source_dir='code', ### Folder with any dependencies
    image_uri=image_uri, ### URI for your AWS DLC or custom container
    env={
        'TS_MAX_REQUEST_SIZE': '100000000',
        'TS_MAX_RESPONSE_SIZE': '100000000',
        'TS_DEFAULT_RESPONSE_TIMEOUT': '1000',
    }, ### Optional – Set environment variables for max size and timeout
)

predictor = model.deploy(
    initial_instance_count = 1, ### Your number of instances
    instance_type = 'ml.g4dn.8xlarge', ### Your instance type
    async_inference_config=sagemaker.async_inference.AsyncInferenceConfig(
        output_path=f"s3://{bucket}/{prefix}/output",
        max_concurrent_invocations_per_instance=2,
    ), ### Optional – Async config if using SageMaker Async Endpoints
)

predictor.predict(data) ### Your images for inference

这允许您在推理后获得结果图像,具体取决于您使用的模型。

在我们的示例中,当运行自定义土地覆盖分割时,模型会生成类似于以下的图像,我们将输入图像和预测图像与其对应的图例进行比较。

土地覆盖分割 1  土地覆盖分割 2. 土地覆盖分割图例

以下是裁剪分类模型的另一个示例,我们在其中展示了原始与生成的全景和语义分割结果的比较,以及相应的图例。

作物分类

自动化地理空间管道

最后,我们还可以通过构建地理空间数据处理和推理管道来自动化前面的步骤 Amazon SageMaker管道. 我们通过使用简单地链接每个所需的预处理步骤 拉姆达步骤回调步骤 在管道中。 例如,您还可以使用转换步骤或直接通过 Lambda 步骤和回调步骤的另一种组合添加最终推理步骤,以使用 SageMaker 地理空间功能中的内置语义分割模型之一运行 EOJ。

请注意,我们在管道中使用 Lambda 步骤和回调步骤,因为 EOJ 是异步的,所以这种类型的步骤允许我们监视处理作业的运行,并在管道完成时通过消息中的消息恢复管道 Amazon Simple Queue服务 (Amazon SQS)队列。

地理空间管道

您可以在笔记本中查看 GitHub存储库 有关此代码的详细示例。

现在我们可以通过 Studio 可视化我们的地理空间管道图并监控管道中的运行,如以下屏幕截图所示。

地理空间管道 UI

结论

在这篇文章中,我们总结了我们使用 SageMaker 地理空间功能实施的流程,为我们来自 xarvio 数字农业解决方案的高级产品构建地理空间数据管道。 使用 SageMaker geospatial 通过使用预构建的 API 加速和简化我们的 ML 预处理和建模步骤,我们的地理空间工作效率提高了 50% 以上。

下一步,我们将从我们的目录中加入更多模型到 SageMaker,以继续实现我们的解决方案管道的自动化,并将随着服务的发展继续利用 SageMaker 的更多地理空间功能。

我们鼓励您通过调整本文中提供的端到端示例笔记本来尝试 SageMaker 地理空间功能,并在中了解有关该服务的更多信息 什么是 Amazon SageMaker 地理空间功能?.


作者简介

朱利安布劳朱利安布劳 是位于德国科隆的 BASF Digital Farming GmbH 的数据科学家。 他开发农业数字解决方案,通过使用地理空间数据和机器学习来满足巴斯夫全球客户群的需求。 工作之余,他喜欢旅行以及与朋友和家人一起到户外活动。

安东尼奥·罗德里格斯(Antonio Rodriguez)安东尼奥·罗德里格斯(Antonio Rodriguez) 是 Amazon Web Services 的人工智能和机器学习专家解决方案架构师,常驻西班牙。 他帮助各种规模的公司通过创新解决挑战,并利用 AWS 云和 AI/ML 服务创造新的商机。 工作之余,他喜欢与家人共度时光,与朋友一起运动。

时间戳记:

更多来自 AWS机器学习