Prognozy dotyczące obrazu

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 inputTileSizeinputOverlapSize. 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.