图片预测

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) 的 1D 数据应具有维度 1,形状为 (N, M) 的 2D 数据应具有维度 2。例如,名为“B1”的输出波段,其像素值为数组,形状为 [2, 3],则指定如下:

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

图块尺寸

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

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

输入图块大小

如需设置输入图块大小,请使用 inputTileSize 和 inputOverlapSize。 通过提供一对图块宽度和高度(以像素为单位,例如 [32, 32])来设置这些参数。总补丁大小通过将 inputTileSize 和 outputTileSize 的高度和宽度相加来确定。

例如,全卷积模型可能需要形状为(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, Channels) 的输入,但返回形状为 (1, 1, 1) 的张量。在这种情况下,outputTileSize 需要设置为 [1, 1]。这在返回某些图块特征的概率输出(分辨率降低)的模型中相当常见。

投影

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

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