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}
}
图块尺寸
您可以使用以下参数控制图片的平铺方式:
inputTileSizeinputOverlapSizeoutputTileSize
输入图块大小
如需设置输入图块大小,请使用 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 重新投影指南。