Bildvorhersagen

Earth Engine bietet ee.Model als Connector zu Modellen, die auf Vertex AI gehostet werden. Dieser Connector sendet Bild- oder Tabellendaten als Onlinevorhersageanfragen an ein trainiertes Modell, das auf einem Vertex AI-Endpunkt bereitgestellt ist. Die Modellausgaben werden dann als Earth Engine-Bilder oder ‑Tabellen zurückgegeben.

ee.Model.predictImage

Verwenden Sie model.predictImage(), um Vorhersagen für ein ee.Image mit einem gehosteten Modell zu treffen. Mit ee.Image werden Kacheln (Bild-Patches) von Bändern erstellt, die dann an das gehostete Modell gesendet werden. Der Rückgabetyp von predictImage() ist ein ee.Image, der der Karte hinzugefügt, exportiert oder in anderen Berechnungen verwendet werden kann.

Eingabeoptionen

Wenn Sie eine Inferenz mit einem ee.Image ausführen, werden im ee.Model-Connector eine Reihe von Parametern verwendet. Diese Einstellungen gelten für die Eingabebänder und -eigenschaften, die Kachelung der Eingabebild-Patches, die Größe der Ausgabebild-Patches und die Ausgabebildbänder.

Bänder und Attribute

Verwenden Sie die folgenden Parameter, um die Eingabebänder und ‑eigenschaften anzugeben:

inputProperties

inputProperties ist eine Liste von Attributnamen, die an jede Vorhersageinstanz weitergeleitet werden sollen. Numerische, String- und boolesche Attribute werden unterstützt.

inputTypeOverride

inputTypeOverride ist ein Wörterbuch mit Attribut- und/oder Bandnamen mit spezifischen Typ- und Dimensionsinformationen. Das kann erforderlich sein, weil viele Earth Engine-Algorithmen Ausgaben mit dynamischen Typen erstellen, die erst zur Laufzeit abgeleitet werden können.

Wenn Sie beispielsweise „slope“ berechnen, indem Sie die Funktion ee.Terrain.slope einer Sammlung zuordnen, müssen Sie den Ausgabetyp von „slope“ in den Eingaben für die Inferenz so angeben:

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

TIPP: Wenn Sie die Fehlermeldung erhalten, dass ein Band oder eine Property „nicht in einen Tensor konvertiert werden kann“, können Sie eine Typüberschreibung verwenden, um die Eingabe in einen bestimmten Typ zu erzwingen.

inputShapes

inputShapes ist ein Dictionary mit Bandnamen und Array-Pixelform. Wenn Sie Ihrem Modell Pixel mit Arraywerten und einer Länge von mehr als 1 senden möchten, legen Sie das Argument inputShapes fest. Das Argument ähnelt inputTypeOverride, bezieht sich aber speziell auf die Formen der Eingabebänder für Bildvorhersagen. Wenn Sie beispielsweise drei Bänder codieren möchten, (1) „ndvi_series“ als 1D-Zeitreihe mit 12 Werten, (2) „temp“ als Skalar und (3) „patch“ als 2D-Pixelarray, verwenden Sie Folgendes:

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

outputBands

outputBands ist ein Dictionary mit den Namen der Ausgabebänder und einem Objekt, das den ee.PixelType und die Dimensionen des Bands enthält. Hier sollten die Dimensionen mit der Länge des Tensor-Shape-Arrays übereinstimmen. Mit anderen Worten: Skalardaten mit der Form () sollten die Dimension 0 haben, 1D-Daten mit der Form (N) die Dimension 1 und 2D-Daten mit der Form (N, M) die Dimension 2. Ein Ausgabeband namens „B1“ mit Pixeln mit Array-Werten und Form wird beispielsweise so angegeben:

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

Kachelgrößen

Mit den folgenden Parametern können Sie steuern, wie das Bild gekachelt wird:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

Größen der Eingabekacheln

Verwenden Sie inputTileSize und inputOverlapSize, um die Größe der Eingabekacheln festzulegen. Legen Sie diese Parameter fest, indem Sie ein Paar aus Kachelbreite und -höhe in Pixeln angeben (z. B. [32, 32]). Die Gesamtgröße des Patches wird durch Addition der Höhen und Breiten von inputTileSize und outputTileSize bestimmt.

Ein vollständig faltungsbasiertes Modell kann beispielsweise Eingaben mit der Form (256 x 256 x Kanäle) erwarten. Wenn wir uns Sorgen über Randeffekte zwischen Inferenzergebnissen machen, können wir inputOverlapSize[0] Pixel von links und rechts und inputOverlapSize[1] Pixel von oben und unten aus jedem Inferenzergebnis verwerfen. Dies führt zu mehr Vorhersageaufrufen, um den Vorhersagebereich vollständig abzudecken.

Wenn unser Modell beispielsweise (256 x 256 x 3) erwartet und wir die 32 Randpixel verwerfen möchten, würden wir Folgendes angeben:

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

HINWEIS: Die inputOverlapSize ist eine Gesamtüberlappung von x und y. Wenn Sie einen Puffer von N Pixeln um das gesamte Bild herum haben möchten, beträgt die Überlappung [2N, 2N].

Ausgabekachelgröße

Legen Sie mit dem Argument outputTileSize die Größe der Ausgabekachel fest. Wenn outputTileSize nicht festgelegt ist, entspricht die Standard-Tile-Größe inputTileSize.

Bei einigen Modellen kann die Ausgabegröße von der Eingabegröße abweichen. Ein Klassifizierungsmodell kann beispielsweise Eingaben mit der Form (256, 256, Kanäle) akzeptieren, aber Tensoren mit der Form (1, 1, 1) zurückgeben. In diesem Fall muss outputTileSize auf [1, 1] festgelegt werden. Dies ist bei Modellen, die die Wahrscheinlichkeit (mit reduzierter Auflösung) eines Kachelmerkmals zurückgeben, recht häufig der Fall.

Projektion

Fast alle Faltungsmodelle erwarten Eingaben mit einer festen Projektion. Das liegt daran, dass die meisten Convolutional-Modelle mit einer festen Skalierung trainiert werden. Legen Sie in diesem Fall den Parameter fixInputProj in Ihrem Aufruf von ee.Model.fromVertexAi() auf true fest und geben Sie die Projektion der Daten im Parameter proj an.

Die Projektion des Eingabebilds und die feste Projektion des Modells wirken sich auf die Ausgabewerte aus. Weitere Informationen finden Sie im Leitfaden zur EE-Reprojektion.