Predizioni di immagini

Earth Engine fornisce ee.Model come connettore ai modelli ospitati su Vertex AI. Questo connettore invia dati di immagini o tabelle come richieste di previsione online a un modello addestrato di cui è stato eseguito il deployment su un endpoint Vertex AI. Gli output del modello vengono poi restituiti come immagini o tabelle di Earth Engine.

ee.Model.predictImage

Utilizza model.predictImage() per fare previsioni su un ee.Image utilizzando un modello ospitato. ee.Image viene utilizzato per creare riquadri (patch di immagini) di bande che vengono poi inviati al modello ospitato. Il tipo restituito di predictImage() è un ee.Image che può essere aggiunto alla mappa, esportato o utilizzato in altri calcoli.

Opzioni di inserimento

Quando esegui l'inferenza utilizzando un ee.Image, nel connettore ee.Model vengono utilizzati diversi parametri. Questi controlli riguardano le bande e le proprietà di input, la suddivisione in patch dell'immagine di input, le dimensioni delle patch dell'immagine di output e le bande dell'immagine di output.

Bande e proprietà

Per specificare le bande e le proprietà di input, utilizza i seguenti parametri:

inputProperties

inputProperties è un elenco di nomi di proprietà da inoltrare a ogni istanza di previsione. Sono supportate le proprietà numeriche, stringa e booleane.

inputTypeOverride

inputTypeOverride è un dizionario di nomi di proprietà e/o bande con informazioni specifiche su tipo e dimensione. Questo potrebbe essere necessario perché molti algoritmi di Earth Engine creano output con tipi dinamici che non possono essere dedotti fino al runtime.

Ad esempio, se stai calcolando la "pendenza" mappando la funzione ee.Terrain.slope su una raccolta, dovrai specificare il tipo di output di "pendenza" negli input di inferenza, in questo modo:

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

SUGGERIMENTO: se visualizzi il messaggio di errore che indica che una banda o una proprietà "non può essere convertita in un tensore", una possibile soluzione è utilizzare un override del tipo per forzare l'input a un determinato tipo.

inputShapes

inputShapes è un dizionario di nomi di bande e forme di pixel dell'array. Per inviare al modello pixel con valori di array di lunghezza superiore a 1, imposta l'argomento inputShapes. L'argomento è simile a inputTypeOverride, ma è specifico per le forme delle bande di input per le previsioni delle immagini. Ad esempio, per codificare tre bande, (1) "ndvi_series" come serie temporale 1D con 12 valori, (2) "temp" come scalare e (3) "patch" come array di pixel 2D, utilizza quanto segue:

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

outputBands

outputBands è un dizionario di nomi di bande di output per un oggetto contenente ee.PixelType e le dimensioni della banda. In questo caso, le dimensioni devono essere uguali alla lunghezza dell'array della forma del tensore. In altre parole, i dati scalari con forma () devono avere dimensione 0, i dati 1D con forma (N) devono avere dimensione 1, i dati 2D con forma (N, M) devono avere dimensione 2. Ad esempio, una banda di output denominata "B1" con pixel con valori di array con forma viene specificata con quanto segue:

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

Dimensioni dei riquadri

Puoi controllare il modo in cui l'immagine viene affiancata utilizzando i seguenti parametri:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

Dimensioni dei riquadri di input

Per impostare le dimensioni dei riquadri di input, utilizza inputTileSize e inputOverlapSize. Imposta questi parametri fornendo una coppia di larghezza e altezza dei riquadri in pixel (ad esempio [32, 32]). La dimensione totale della patch è determinata sommando le altezze e le larghezze di inputTileSize e outputTileSize.

Ad esempio, un modello completamente convoluzionale potrebbe aspettarsi input con forma (256 x 256 x canali). Se ci preoccupano gli effetti dei bordi tra i risultati dell'inferenza, possiamo eliminare inputOverlapSize[0] pixel da sinistra e da destra e inputOverlapSize[1] dall'alto e dal basso di ogni risultato dell'inferenza. In questo modo, verranno effettuate più chiamate di previsione per coprire completamente l'area di previsione.

Ad esempio, se il nostro modello prevede (256 x 256 x 3) e vogliamo eliminare i 32 pixel del bordo, specifichiamo quanto segue:

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

NOTA: inputOverlapSize è una sovrapposizione totale di x e y. Se vuoi avere un buffer di N pixel attorno all'intera immagine, la sovrapposizione sarà [2N, 2N]

Dimensione riquadro di output

Per impostare le dimensioni del riquadro di output, imposta l'argomento outputTileSize. Se outputTileSize non è impostato, le dimensioni predefinite dei riquadri sono identiche a inputTileSize.

Per alcuni modelli, le dimensioni dell'output potrebbero essere diverse da quelle dell'input. Ad esempio, un modello di classificazione può accettare input con forma (256, 256, canali), ma restituire tensori con forma (1, 1, 1). In questo caso, outputTileSize deve essere impostato su [1, 1]. Questo è abbastanza comune con i modelli che restituiscono l'output della probabilità (a una risoluzione ridotta) di alcune caratteristiche dei tile.

Proiezione

Quasi tutti i modelli convoluzionali prevedono un input di una proiezione fissa. Questo perché la maggior parte dei modelli convoluzionali viene addestrata su una scala fissa. In questo caso, imposta il parametro fixInputProj su true nella chiamata a ee.Model.fromVertexAi() e specifica la proiezione dei dati nel parametro proj.

La proiezione dell'immagine di input e la proiezione fissa del modello influiranno sui valori di output. Consulta la guida alla riproiezione di EE.