Predicciones de imágenes

Earth Engine proporciona ee.Model como un conector para los modelos alojados en Vertex AI. Este conector envía datos de imágenes o tablas como solicitudes de predicción en línea a un modelo entrenado implementado en un extremo de Vertex AI. Luego, los resultados del modelo se devuelven como imágenes o tablas de Earth Engine.

ee.Model.predictImage

Usa model.predictImage() para realizar predicciones en un ee.Image con un modelo alojado. ee.Image se usa para crear mosaicos (parches de imágenes) de bandas que, luego, se envían al modelo alojado. El tipo de datos que se devuelve de predictImage() es un ee.Image que se puede agregar al mapa, exportar o usar en otros cálculos.

Opciones de entrada

Cuando se realiza la inferencia con un ee.Image, se usan varios parámetros en el conector ee.Model. Estos controles son para las bandas y propiedades de entrada, la división en mosaicos de los parches de la imagen de entrada, el tamaño de los parches de la imagen de salida y las bandas de la imagen de salida.

Bandas y propiedades

Para especificar las bandas y propiedades de entrada, usa los siguientes parámetros:

inputProperties

inputProperties es una lista de nombres de propiedades que se reenviarán a cada instancia de predicción. Se admiten propiedades numéricas, de cadena y booleanas.

inputTypeOverride

inputTypeOverride es un diccionario de nombres de propiedades o bandas con información específica de tipo y dimensión proporcionada. Esto puede ser necesario porque muchos algoritmos de Earth Engine crean resultados con tipos dinámicos que no se pueden inferir hasta el tiempo de ejecución.

Por ejemplo, si calculas la "pendiente" asignando la función ee.Terrain.slope a una colección, deberás especificar el tipo de resultado de "pendiente" en nuestras entradas de inferencia de la siguiente manera:

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

SUGERENCIA: Si aparece el mensaje de error que indica que una banda o propiedad "no se puede convertir en un tensor", una posible solución es usar una anulación de tipo para forzar la entrada a un tipo determinado.

inputShapes

inputShapes es un diccionario de nombres de bandas y formas de píxeles de arrays. Para enviar a tu modelo píxeles con valores de array con longitudes superiores a 1, establece el argumento inputShapes. El argumento es similar a inputTypeOverride, pero es específico de las formas de las bandas de entrada para las predicciones de imágenes. Por ejemplo, para codificar tres bandas, (1) "ndvi_series" como una serie temporal 1D con 12 valores, (2) "temp" como un escalar y (3) "patch" como un array de píxeles 2D, usa lo siguiente:

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

outputBands

outputBands es un diccionario de nombres de bandas de salida para un objeto que contiene el ee.PixelType y las dimensiones de la banda. Aquí, las dimensiones deben ser las mismas que la longitud del array de forma de tensor. En otras palabras, los datos escalares con la forma () deben tener la dimensión 0; los datos 1D con la forma (N) deben tener la dimensión 1; los datos 2D con la forma (N, M) deben tener la dimensión 2. Por ejemplo, una banda de salida llamada "B1" con píxeles con valores de array con forma se especifica con lo siguiente:

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

Tamaños de los mosaicos

Puedes controlar cómo se divide la imagen en mosaicos con los siguientes parámetros:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

Tamaños de los mosaicos de entrada

Para establecer los tamaños de las tarjetas de entrada, usa inputTileSize y inputOverlapSize. Para establecer estos parámetros, proporciona un par de valores de ancho y alto de mosaico en píxeles (por ejemplo, [32, 32]). El tamaño total del parche se determina sumando las alturas y los anchos de inputTileSize y outputTileSize.

Por ejemplo, un modelo completamente convolucional puede esperar entradas con forma (256 x 256 x canales). Si nos preocupan los efectos de los bordes entre los resultados de la inferencia, podemos descartar inputOverlapSize[0] píxeles de la izquierda y la derecha, y inputOverlapSize[1] de la parte superior e inferior de cada resultado de inferencia. Esto generará más llamadas de predicción para cubrir por completo el área de predicción.

Por ejemplo, si nuestro modelo espera (256 x 256 x 3) y queremos descartar los 32 píxeles de borde, especificaríamos lo siguiente:

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

NOTA: El inputOverlapSize es una superposición total de x e y. Si quieres tener un búfer de N píxeles alrededor de toda la imagen, la superposición sería [2N, 2N]

Tamaño de los mosaicos de salida

Para establecer el tamaño de la tarjeta de salida, configura el argumento outputTileSize. Si no se configura outputTileSize, el tamaño de mosaico predeterminado es idéntico a inputTileSize.

En algunos modelos, el tamaño de salida puede ser diferente del tamaño de entrada. Por ejemplo, un modelo de clasificación puede aceptar entradas con forma (256, 256, canales), pero devolver tensores con la forma (1, 1, 1). En este caso, el outputTileSize debe establecerse en [1, 1]. Esto es bastante común con los modelos que devuelven el resultado de la probabilidad (con una resolución reducida) de alguna característica de la tesela.

Proyección

Casi todos los modelos convolucionales esperan una entrada de una proyección fija. Esto se debe a que la mayoría de los modelos convolucionales se entrenan en una escala fija. En este caso, establece el parámetro fixInputProj en true en tu llamada a ee.Model.fromVertexAi() y especifica la proyección de los datos en el parámetro proj.

La proyección de la imagen de entrada y la proyección fija del modelo afectarán los valores de salida. Consulta la guía de reproyección de EE.