图片预测

Earth Engine 提供 ee.Model 作为连接到 Vertex AI 上托管的模型的连接器。此连接器会将图片或表格数据作为在线预测请求发送到部署在 Vertex AI 端点上的训练模型。然后,模型输出会作为 Earth Engine 图片或表格返回。

ee.Model.predictImage

使用 model.predictImage() 通过托管的模型对 ee.Image 进行预测。ee.Image 用于创建波段的图块(图片补丁),然后将这些图块发送到托管的模型。predictImage() 的返回类型为 ee.Image,可添加到映射、导出或用于其他计算。

输入选项

使用 ee.Image 执行推理时,ee.Model 连接器中会使用多个参数。这些控件适用于输入波段和属性、输入图片补丁平铺、输出图片补丁大小和输出图片波段。

频段和属性

如需指定输入波段和属性,请使用以下参数:

inputProperties

inputProperties 是将转发到每个预测实例的属性名称的列表。支持数值、字符串和布尔值属性。

inputTypeOverride

inputTypeOverride 是一个包含媒体资源和/或频道名称的字典,其中提供了特定的类型和维度信息。这可能很有必要,因为许多 Earth Engine 算法都会创建具有动态类型的输出,而这些类型在运行时之前无法推断出来。

例如,如果您要通过将 ee.Terrain.slope 函数映射到集合来计算“斜率”,则需要在推理输入中指定“斜率”的输出类型,如下所示:

inputTypeOverride = {
  "slope": {
    "type": "PixelType",
    "precision": "float",
    "dimensions": 0,
    "min": -100.0,
    "max": 100.0
  }
}

提示:如果您遇到“无法将频段或属性转换为张量”的错误消息,可能的解决方案是使用类型替换强制将输入转换为给定类型。

inputShapes

inputShapes 是一个包含波段名称和数组像素形状的字典。如需发送长度大于 1 的数组值像素,请设置 inputShapes 参数。该参数与 inputTypeOverride 类似,但仅适用于图片预测的输入波段形状。例如,如需对三个波段进行编码,请将 (1)“ndvi_series”编码为包含 12 个值的一维时间序列,将 (2)“temp”编码为标量,并将 (3)“patch”编码为二维像素数组,请使用以下代码:

inputShapes = {
  "ndvi_series": [12],  # 12 ndvi samples
  "temp": [], # scalar
  "patch": [2, 2], # 2px * 2px patch
}

outputBands

outputBands 是一个字典,用于将输出频段名称映射到包含频段 ee.PixelType 和维度的对象。此处的维度应与张量形状数组的长度相同。换句话说,形状为 () 的标量数据应具有维度 0,形状为 (N) 的一维数据应具有维度 1,形状为 (N, M) 的二维数据应具有维度 2。例如,可以使用以下代码指定名为“B1”且包含形状为数组值的像素的输出波段:

outputBands = {
  'B1': {'type': ee.PixelType.float(), 'dimensions': 1}
}

功能块尺寸

您可以使用以下参数控制图片的平铺方式:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

输入图块大小

如需设置输入功能块大小,请使用 inputTileSizeinputOverlapSize。通过提供一对像素宽度和高度(例如 [32, 32])来设置这些参数。补丁总大小取决于 inputTileSizeoutputTileSize 的高度和宽度之和。

例如,全卷积模型可能预期输入的形状为 (256 x 256 x 通道数)。如果我们担心推理结果之间的边缘效应,可以从每个推理结果的左侧和右侧舍弃 inputOverlapSize[0] 像素,从每个推理结果的顶部和底部舍弃 inputOverlapSize[1] 像素。这将导致进行更多预测调用,以便完全覆盖预测区域。

例如,如果我们的模型预期为 (256 x 256 x 3),并且我们想舍弃 32 个边界像素,则应指定以下内容:

ee.Model({
  "endpoint": endpoint,
  "inputTileSize": [192, 192],
  "inputOverlapSize": [64, 64],
  # rest omitted.
}

注意:inputOverlapSize 是 x 轴和 y 轴重叠的总和。如果您打算在整个图片周围设置 N 像素的缓冲区,则重叠区域将为 [2N, 2N]

输出图块大小

如需设置输出图块大小,请设置 outputTileSize 参数。如果未设置 outputTileSize,则默认功能块大小与 inputTileSize 相同。

对于某些模型,输出大小可能与输入大小不同。例如,分类模型可以接受形状为 (256, 256, 通道数) 的输入,但会返回形状为 (1, 1, 1) 的张量。在这种情况下,需要将 outputTileSize 设置为 [1, 1]。对于返回某些功能块特征概率输出的模型(在较低分辨率下),这种情况非常常见。

预测值

几乎所有卷积模型都需要固定投影的输入。这是因为大多数卷积模型都是在固定尺度上训练的。在这种情况下,请在对 ee.Model.fromVertexAi() 的调用中将 fixInputProj 参数设置为 true,并在 proj 参数中指定数据的投影。

输入图片的投影和模型的固定投影将影响输出值。请参阅 EE 重新投影指南。