圖片預測

Earth Engine 提供 ee.Model 做為 Vertex AI 代管模型的連接器。這個連接器會將圖片或表格資料做為線上預測要求,傳送至已部署在 Vertex AI 端點上的訓練模型。然後,模型輸出內容會以 Earth Engine 圖片或表格形式傳回。

ee.Model.predictImage

使用 model.predictImage() 搭配代管模型,針對 ee.Image 進行預測。ee.Image 用於建立網格 (圖片圖塊) 的頻帶,然後傳送至代管模型。predictImage() 的傳回類型是 ee.Image,可新增至對應、匯出或用於其他運算。

輸入選項

ee.Image 上執行推論時,ee.Model 連接器會使用多個參數。這些控制項適用於輸入頻帶和屬性、輸入圖片圖塊平鋪、輸出圖片圖塊大小和輸出圖片頻帶。

頻帶和屬性

如要指定輸入頻帶和屬性,請使用下列參數:

inputProperties

inputProperties 是屬性名稱清單,會轉送至每個預測執行個體。支援數值、字串和布林值屬性。

inputTypeOverride

inputTypeOverride 是屬性和/或頻帶名稱的字典,其中提供特定類型和維度資訊。這可能是必要的,因為許多 Earth Engine 演算法會使用動態類型的輸出內容,而這類內容必須在執行階段才能推斷。

舉例來說,如果您要透過在集合上對應 ee.Terrain.slope 函式來計算「斜率」,就必須在推論輸入內容中指定「斜率」的輸出類型,如下所示:

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

提示:如果您看到錯誤訊息,指出某個頻帶或屬性「無法轉換為張量」,可能的解決方法是使用類型覆寫,將輸入強制轉換為特定類型。

inputShapes

inputShapes 是包含頻帶名稱和陣列像素形狀的字典。如要傳送長度大於 1 的模型陣列值像素,請設定 inputShapes 引數。這個引數與 inputTypeOverride 類似,但專門用於圖片預測的輸入頻帶形狀。舉例來說,如要將三個頻帶編碼,(1)「ndvi_series」做為 1D 時間序列,含有 12 個值;(2)「temp」做為標量;(3)「patch」做為 2D 像素陣列,請使用以下方式:

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

outputBands

outputBands 是輸出頻帶名稱的字典,其中包含包含 ee.PixelType 和頻帶維度的物件。此處的維度應與張量形狀陣列的長度相同。換句話說,形狀為 () 的標量資料應具有 0 維度、形狀為 (N) 的 1D 資料應具有 1 維度、形狀為 (N, M) 的 2D 資料應具有 2 維度。舉例來說,如果輸出頻帶名為「B1」,且包含具有形狀的陣列值像素,則可使用以下方式指定:

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

圖塊大小

您可以使用下列參數控制圖片的平鋪方式:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

輸入圖塊大小

如要設定輸入圖塊大小,請使用 inputTileSizeinputOverlapSize。您可以提供一組圖塊寬度和高度 (以像素為單位,例如 [32, 32]) 來設定這些參數。總修補大小取決於 inputTileSizeoutputTileSize 的高度和寬度相加的結果。

舉例來說,全卷積模型可能會預期形狀為 (256 x 256 x 通道) 的輸入內容。如果擔心推論結果之間的邊緣效果,我們可以捨棄左側和右側的 inputOverlapSize[0] 像素,以及每個推論結果頂端和底部的 inputOverlapSize[1]。這會導致更多預測呼叫,以便完全涵蓋預測區域。

舉例來說,如果模型預期的大小為 (256 x 256 x 3),而我們想要捨棄 32 個邊框像素,則會指定以下內容:

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

注意:inputOverlapSize 是 x 和 y 重疊的總和。如果您想在整個圖片周圍建立 N 個像素的緩衝區,重疊部分將會是 [2N, 2N]

輸出圖塊大小

如要設定輸出圖塊大小,請設定 outputTileSize 引數。如果未設定 outputTileSize,預設圖塊大小會與 inputTileSize 相同。

對於某些模型,輸出大小可能會與輸入大小不同。舉例來說,分類模型可能會接受 (256, 256, Channels) 形狀的輸入內容,但會傳回形狀為 (1, 1, 1) 的張量。在這種情況下,outputTileSize 需要設為 [1, 1]。對於會針對某些圖塊特性 (以較低解析度) 傳回機率輸出的模型,這相當常見。

投影

幾乎所有卷積模型都會預期固定投影輸入。這是因為大多數卷積模型都是以固定比例訓練。在這種情況下,請在對 ee.Model.fromVertexAi() 的呼叫中將 fixInputProj 參數設為 true,並在 proj 參數中指定資料的投影。

輸入圖片的投影方式和模型的固定投影方式會影響輸出值。請參閱 EE 重投影指南。