Earth Engine bietet ee.Model
als Connector für Modelle, die auf Vertex AI gehostet werden.
Dieser Connector sendet Bild- oder Tabellendaten als Online-Vorhersageanfragen an ein trainiertes Modell, das auf einem Vertex AI-Endpunkt bereitgestellt wird. Die Modellergebnisse werden dann als Earth Engine-Bilder oder -Tabellen zurückgegeben.
ee.Model.predictImage
Mit model.predictImage()
können Sie mit einem gehosteten Modell Vorhersagen für eine ee.Image
treffen. Mit der 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 Steuerelemente 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 Eigenschaften
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. Es werden numerische, String- und boolesche Eigenschaften unterstützt.
inputTypeOverride
inputTypeOverride
ist ein Dictionary mit Property- und/oder Bandnamen mit bestimmten Typ- und Dimensionsinformationen. Dies kann erforderlich sein, da viele Earth Engine-Algorithmen Ausgaben mit dynamischen Typen erstellen, die erst zur Laufzeit abgeleitet werden können.
Wenn Sie beispielsweise „Steigung“ berechnen, indem Sie die ee.Terrain.slope
-Funktion auf eine Sammlung abbilden, müssen Sie den Ausgabetyp „Steigung“ in den Inferenzinputs 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 Eigenschaft „nicht in einen Tensor umgewandelt werden kann“, können Sie mithilfe einer Typüberschreibung die Eingabe auf einen bestimmten Typ erzwingen.
inputShapes
inputShapes
ist ein Wörterbuch mit Bandnamen und Array-Pixelform. Wenn Sie Ihrem Modell Pixel mit Arraywerten mit einer Länge von mehr als 1 senden möchten, müssen Sie das Argument inputShapes
festlegen. Das Argument ähnelt inputTypeOverride
, ist aber speziell für die Eingabe von Bandformen für Bildvorhersagen gedacht. 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 Wörterbuch mit den Namen der Ausgabebänder für ein Objekt, das die ee.PixelType
und die Abmessungen des Bands enthält. Hier sollten die Dimensionen der Länge des Tensor-Shape-Arrays entsprechen. 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 arraywertigen Pixeln mit Form wird beispielsweise so angegeben:
outputBands = {
'B1': {'type': ee.PixelType.float(), 'dimensions': 1}
}
Kachelgrößen
Mit den folgenden Parametern können Sie festlegen, wie das Bild gekachtelt wird:
inputTileSize
inputOverlapSize
outputTileSize
Kachelgrößen eingeben
Verwenden Sie inputTileSize
und inputOverlapSize
, um die Größe der Eingabekacheln festzulegen.
Legen Sie diese Parameter fest, indem Sie ein Paar aus Breite und Höhe der Kachel in Pixeln angeben (z. B. [32, 32]). Die Gesamtgröße des Patches ergibt sich durch Addition der Höhen und Breiten von inputTileSize
und outputTileSize
.
Ein vollständig convolutionales Modell erwartet beispielsweise Eingaben mit der Form (256 × 256 × Kanäle). Wenn wir Bedenken hinsichtlich der Kanteneffekte zwischen den Inferenzergebnissen haben, können wir inputOverlapSize[0]
Pixel links und rechts sowie inputOverlapSize[1]
Pixel oben und unten von jedem Inferenzergebnis verwerfen. Dies führt zu mehr Vorhersageaufrufen, um den Vorhersagebereich vollständig abzudecken.
Wenn unser Modell beispielsweise (256 × 256 × 3) erwartet und wir die 32 Pixel des Rahmens verwerfen möchten, geben wir Folgendes an:
ee.Model({
"endpoint": endpoint,
"inputTileSize": [192, 192],
"inputOverlapSize": [64, 64],
# rest omitted.
}
HINWEIS: inputOverlapSize
ist die Gesamtüberschneidung in X- und Y-Richtung. Wenn Sie einen Puffer von N Pixeln um das gesamte Bild herum haben möchten, beträgt die Überlappung dann [2N, 2N]
Größe der Ausgabekacheln
Mit dem Argument outputTileSize
können Sie die Größe der Ausgabekacheln festlegen. Wenn outputTileSize
nicht festgelegt ist, entspricht die Standardkachelgröße inputTileSize
.
Bei einigen Modellen kann die Ausgabegröße von der Eingabegröße abweichen. Ein Klassifizierungsmodell kann beispielsweise Eingaben mit der Form (256, 256, Channels) akzeptieren, aber Tensoren mit der Form (1, 1, 1) zurückgeben. In diesem Fall muss outputTileSize
auf [1, 1]
gesetzt sein. Das ist bei Modellen, die die Wahrscheinlichkeit (in reduzierter Auflösung) für ein bestimmtes Kachelnmerkmal zurückgeben, relativ häufig der Fall.
Projektion
Fast alle Convolutional-Modelle erwarten eine Eingabe mit einer festen Projektion. Das liegt daran, dass die meisten Convolutional-Modelle auf einer festen Skala 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-Neuprojektion.