Prognozy dotyczące obrazu

Earth Engine udostępnia ee.Model jako oprogramowanie sprzęgające do modeli hostowanych w Vertex AI. Ten oprogramowanie sprzęgające wysyła dane obrazu lub tabeli jako żądania prognozy online do wytrenowanego modelu wdrożonego w punkcie końcowym Vertex AI. Dane wyjściowe modelu są następnie zwracane jako obrazy lub tabele Earth Engine.

ee.Model.predictImage

Użyj model.predictImage(), aby tworzyć prognozy na 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. Zwracany typ predictImage() to ee.Image, który można dodać do mapy, wyeksportować lub użyć w innych obliczeniach.

Opcje wprowadzania

Podczas wnioskowania za pomocą ee.Image w oprogramowaniu sprzęgającym ee.Model używanych jest wiele parametrów. Te ustawienia dotyczą pasm i właściwości wejściowych, kafelkowania fragmentów obrazu wejściowego, rozmiaru fragmentu obrazu wyjściowego i 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żdej instancji prognozy. Obsługiwane są właściwości liczbowe, ciągi znaków i wartości logiczne.

inputTypeOverride

inputTypeOverride to słownik nazw właściwości lub pasm z podanymi informacjami o konkretnym typie i wymiarze. Może to być konieczne, ponieważ wiele algorytmów Earth Engine tworzy dane wyjściowe z typami dynamicznymi, których nie można wywnioskować przed czasem działania.

Jeśli na przykład obliczasz „nachylenie”, mapując funkcję ee.Terrain.slope na kolekcję, musisz określić typ danych wyjściowych „nachylenie” w danych wejściowych 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 pasma lub właściwości „nie można przekonwertować na tensor”, możesz spróbować wymusić określony typ danych wejściowych, używając zastąpienia typu.

inputShapes

inputShapes to słownik nazw pasm i kształtu pikseli tablicy. Aby wysłać do modelu piksele o wartościach tablicowych o długości większej niż 1, ustaw argument inputShapes. Argument jest podobny do inputTypeOverride, ale dotyczy kształtów pasm wejściowych w przypadku prognoz obrazów. Aby na przykład zakodować 3 pasma: (1) „ndvi_series” jako jednowymiarowy ciąg czasowy z 12 wartościami, (2) „temp” jako wartość skalarną i (3) „patch” jako dwuwymiarową tablicę pikseli, użyj tych parametrów:

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

outputBands

outputBands to słownik nazw pasm wyjściowych do obiektu zawierającego ee.PixelType i wymiary pasma. Wymiary powinny być takie same jak długość tablicy kształtu tensora. Innymi słowy, dane skalarne o kształcie () powinny mieć wymiar 0, dane 1D o kształcie (N) powinny mieć wymiar 1, a dane 2D o kształcie (N, M) powinny mieć wymiar 2. Na przykład pasmo wyjściowe o nazwie „B1” z pikselami o wartościach tablicowych o kształcie jest określone w następujący sposób:

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

Rozmiary kafelków

Sposób kafelkowania obrazu możesz kontrolować za pomocą tych parametrów:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

Rozmiary kafelków wejściowych

Aby ustawić rozmiary kafelków wejściowych, użyj klawiszy inputTileSize i inputOverlapSize. Ustaw te parametry, podając parę wartości szerokości i wysokości kafelka w pikselach (np. [32, 32]). Łączny rozmiar łatki jest określany przez dodanie wysokości i szerokości inputTileSize i outputTileSize.

Na przykład w pełni konwolucyjny model może oczekiwać danych wejściowych o kształcie (256 x 256 x kanały). Jeśli obawiamy się efektów krawędziowych między wynikami wnioskowania, możemy odrzucić inputOverlapSize[0] pikseli z lewej i prawej strony oraz inputOverlapSize[1] pikseli z góry i dołu każdego wyniku wnioskowania. Spowoduje to zwiększenie liczby wywołań prognoz, aby w pełni pokryć obszar prognozy.

Jeśli na przykład nasz model oczekuje (256 x 256 x 3), a my chcemy odrzucić 32 piksele obramowania, określimy następujące parametry:

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

UWAGA: inputOverlapSize to całkowite pokrywanie się osi X i Y. Jeśli chcesz mieć bufor o szerokości 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 nie ustawiono outputTileSize, domyślny rozmiar kafelka jest taki sam jak inputTileSize.

W przypadku niektórych modeli rozmiar danych wyjściowych może się różnić od rozmiaru danych wejściowych. Na przykład model klasyfikacji może akceptować dane wejściowe o kształcie (256, 256, kanały), 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ą dane wyjściowe prawdopodobieństwa (w obniżonej rozdzielczości) określonej cechy kafelka.

Odwzorowanie

Niemal wszystkie modele konwolucyjne oczekują danych wejściowych o stałej projekcji. Dzieje się tak, ponieważ większość modeli konwolucyjnych jest trenowana w stałej skali. W takim przypadku ustaw parametr fixInputProj na true w wywołaniu ee.Model.fromVertexAi() i określ projekcję danych w parametrze proj.

Odwzorowanie obrazu wejściowego i stałe odwzorowanie modelu będą miały wpływ na wartości wyjściowe. Zapoznaj się z przewodnikiem po reprojekcji EE.