Predizioni di immagini

Earth Engine fornisce ee.Model come connettore per i modelli ospitati su Vertex AI. Questo connettore invia i dati di immagini o tabelle come richieste di previsione online a un modello addestrato di cui è stato eseguito il deployment in un endpoint Vertex AI. Gli output del modello vengono poi restituito 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 di ritorno 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.Image vengono utilizzati diversi parametri.ee.Model Questi controlli riguardano le bande e le proprietà di input, la suddivisione in riquadri delle patch di immagini di input, le dimensioni delle patch di immagini di output e le bande di immagini di output.

Cinturini 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, di stringa e booleane.

inputTypeOverride

inputTypeOverride è un dizionario di nomi di proprietà e/o fasce con informazioni specifiche su tipo e dimensione. Ciò potrebbe essere necessario perché molti algoritmi Earth Engine creano output con tipi dinamici che non possono essere dedotti fino al momento dell'esecuzione.

Ad esempio, se stai calcolando "pendenza" mappando la funzione ee.Terrain.slope su una raccolta, dovrai specificare il tipo di output di "pendenza" nei nostri input di inferenza come segue:

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

SUGGERIMENTO: se visualizzi il messaggio di errore "Non è possibile convertire un intervallo o una proprietà 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 forma di pixel array. Per inviare i pixel con valori array del modello con lunghezze maggiori di 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 contenenteee.PixelType e le dimensioni della banda. Qui le dimensioni devono essere uguali alla lunghezza dell'array della forma del tensore. In altre parole, i dati scalari con forma () devono avere la dimensione 0, i dati 1D con forma (N) devono avere la dimensione 1 e i dati 2D con forma (N, M) devono avere la dimensione 2. Ad esempio, una banda di output denominata "B1" con pixel con valori array con forma è specificata con quanto segue:

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

Dimensioni riquadri

Puoi controllare la disposizione delle riquadri dell'immagine utilizzando i seguenti parametri:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

Dimensioni riquadri di input

Per impostare le dimensioni dei riquadri di input, utilizza inputTileSize e inputOverlapSize. Imposta questi parametri specificando una coppia di larghezza e altezza dei riquadri in pixel (ad esempio [32, 32]). Le dimensioni totali del patch sono determinate dall'aggiunta delle altezze e delle larghezze inputTileSize e outputTileSize.

Ad esempio, un modello completamente convoluzionale potrebbe prevedere input con forma (256 x 256 x canali). Se ci preoccupano gli effetti degli bordi tra i risultati dell'inferenza, possiamo ignorare inputOverlapSize[0] pixel a sinistra e a destra e inputOverlapSize[1] in alto e in basso di ciascun risultato dell'inferenza. Ciò comporta un aumento delle chiamate di previsione per coprire completamente l'area di previsione.

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

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

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

Dimensioni riquadri di output

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

Per alcuni modelli, le dimensioni dell'output potrebbero essere diverse da quelle dell'input. Ad esempio, un modello di classificazione potrebbe accettare input con formato (256, 256, Canali), ma restituire tensori con formato (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 delle schede.

Projection

Quasi tutti i modelli convolzionali si aspettano l'input di una proiezione fissa. Questo accade perché la maggior parte dei modelli convolzionali 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 influiscono sui valori di output. Consulta la guida alla riproiezione EE.