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.