Earth Engine udostępnia ee.Model
jako łącznik do modeli hostowanych w Vertex AI.
Ten konwerter wysyła dane obrazów lub tabel jako żądania prognoz online do wytrenowanego modelu wdrożonego w punkcie końcowym Vertex AI. Wyniki działania modelu są następnie zwracane jako obrazy lub tabele w Earth Engine.
ee.Model.predictImage
Użyj funkcji model.predictImage()
, aby tworzyć prognozy na podstawie zbioru danych ee.Image
za pomocą hostowanego modelu. ee.Image
służy do tworzenia kafelków (fragmentów obrazu) pasm, które są następnie wysyłane do hostowanego modelu. Typ zwracany przez funkcję predictImage()
to
ee.Image
, który można dodać do mapy, wyeksportować lub użyć w innych obliczeniach.
Opcje wprowadzania
Podczas wykonywania wnioskowania za pomocą ee.Image
istnieje kilka parametrów używanych w połączeniu ee.Model
. Te opcje dotyczą pasm i właściwości wejściowych, układania fragmentów obrazu wejściowego, rozmiaru fragmentu obrazu wyjściowego oraz pasm obrazu wyjściowego.
Pasma i właściwości
Aby określić pasma wejściowe i właściwości, użyj tych parametrów:
inputProperties
inputProperties
to lista nazw właściwości, które mają być przekazywane do każdego wystąpienia funkcji prognozowania. Obsługiwane są właściwości liczbowe, tekstowe i wartości logiczne.
inputTypeOverride
inputTypeOverride
to słownik nazw obiektów lub zespołów z dokładnymi informacjami o typie i wymiarach. Może być to konieczne, ponieważ wiele algorytmów Earth Engine tworzy dane wyjściowe o typach dynamicznych, których nie można odgadnąć przed uruchomieniem.
Jeśli np. obliczasz „wzniesienie” przez mapowanie funkcji ee.Terrain.slope
na zbiorze, musisz określić typ danych wyjściowych „wzniesienie” w danych wejściowych do wnioskowania w ten sposób:
inputTypeOverride = {
"slope": {
"type": "PixelType",
"precision": "float",
"dimensions": 0,
"min": -100.0,
"max": 100.0
}
}
WSKAZÓWKA: jeśli pojawi się komunikat o błędzie, że pasmo lub właściwość „nie może zostać przekonwertowane na tensor”, możesz użyć zastąpienia typu, aby wymusić określony typ danych wejściowych.
inputShapes
inputShapes
to słownik nazw zespołów i kształtów tablic pikseli. Aby wysyłać piksele modelu o wartości tablicowej o długości większej niż 1, ustaw argument inputShapes
. Ten argument jest podobny do argumentu inputTypeOverride
, ale dotyczy kształtów pasm wejściowych w przypadku prognozowania obrazów. Aby na przykład zakodować 3 pasma, użyj (1) „ndvi_series” jako 1-wymiarowej serii czasowej z 12 wartościami, (2) „temp” jako skalara oraz (3) „patch” jako 2-wymiarowego tablicę pikseli:
inputShapes = {
"ndvi_series": [12], # 12 ndvi samples
"temp": [], # scalar
"patch": [2, 2], # 2px * 2px patch
}
outputBands
outputBands
to słownik nazw pasm danych wyjściowych do obiektu zawierającego ee.PixelType
i wymiary pasma. Wymiary powinny być takie same jak długość tablicy kształtu tensora. Inaczej mówiąc, dane skalarne z shape () powinny mieć wymiar 0, dane jednowymiarowe z shape (N) powinny mieć wymiar 1, a dane dwuwymiarowe z shape (N, M) powinny mieć wymiar 2. Na przykład pasmo wyjściowe o nazwie „B1” z pikselami o wartości tablicowej i kształcie jest określone w ten sposób:
outputBands = {
'B1': {'type': ee.PixelType.float(), 'dimensions': 1}
}
Rozmiary kafelków
Za pomocą tych parametrów możesz kontrolować sposób układania obrazów:
inputTileSize
inputOverlapSize
outputTileSize
Rozmiary płytek
Aby ustawić rozmiary karty z danymi, użyj wartości inputTileSize
i inputOverlapSize
.
Ustaw te parametry, podając parę wartości szerokości i wysokości płytki w pikselach (np. [32, 32]). Całkowity rozmiar poprawki jest określany przez dodanie wysokości i szerokości inputTileSize
oraz outputTileSize
.
Na przykład model konwolucyjny może oczekiwać danych wejściowych o kształcie (256 x 256
x kanałów). Jeśli obawiamy się efektów krawędzi między wynikami wnioskowania, możemy odrzucić inputOverlapSize[0]
pikseli z lewej i prawej oraz inputOverlapSize[1]
z góry i dołu każdego wyniku wnioskowania. Spowoduje to zwiększenie liczby wywołań prognozy, aby w pełni objąć obszar prognozy.
Jeśli na przykład nasz model oczekuje danych o wymiarach 256 × 256 × 3 i chcemy odrzucić 32 piksele krawędzi, podajemy:
ee.Model({
"endpoint": endpoint,
"inputTileSize": [192, 192],
"inputOverlapSize": [64, 64],
# rest omitted.
}
UWAGA: inputOverlapSize
to całkowite pokrycie w kierunku osi X i Y. Jeśli chcesz mieć bufor N pikseli wokół całego obrazu, nakładanie się będzie wynosić [2N, 2N]
Rozmiar kafelka wyjściowego
Aby ustawić rozmiar kafelka wyjściowego, ustaw argument outputTileSize
. Jeśli outputTileSize
nie jest ustawiony, domyślny rozmiar płytki jest identyczny z inputTileSize
.
W przypadku niektórych modeli rozmiar wyjściowy może różnić się od rozmiaru wejściowego. Model klasyfikacji może na przykład akceptować dane wejściowe o kształcie (256, 256, Channels), ale zwracać tensory o kształcie (1, 1, 1). W takim przypadku parametr outputTileSize
musi mieć wartość [1, 1]
. Jest to dość powszechne w przypadku modeli, które zwracają prawdopodobieństwo (w obniżonej rozdzielczości) niektórych cech płytek.
Odwzorowanie
Prawie wszystkie modele konwolucyjne wymagają danych wejściowych w postaci stałej projekcji. Dzieje się tak, ponieważ większość modeli konwolucyjnych jest trenowanych na stałej skali. W tym przypadku w wywołaniu funkcji ee.Model.fromVertexAi()
ustaw parametr fixInputProj
na true, a w parametrze proj
określ projekcję danych.
Projekcja obrazu wejściowego i stała projekcja modelu będą miały wpływ na wartości wyjściowe. Zapoznaj się z przewodnikiem dotyczącym przeprojektowania EE.