画像予測

Earth Engine は、Vertex AI でホストされているモデルへのコネクタとして ee.Model を提供します。このコネクタは、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 関数をマッピングして「slope」を計算する場合は、次のように推論入力で「slope」の出力タイプを指定する必要があります。

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

ヒント: バンドまたはプロパティを「テンソルに変換できない」というエラー メッセージが表示された場合は、タイプ オーバーライドを使用して入力を特定のタイプに強制的に変換することで解決できる可能性があります。

inputShapes

inputShapes は、バンド名と配列ピクセル形状の辞書です。長さが 1 より大きい配列値ピクセルをモデルに送信するには、inputShapes 引数を設定します。この引数は inputTypeOverride と似ていますが、画像予測の入力バンドの形状に固有です。たとえば、3 つのバンド((1)12 個の値を持つ 1D 時系列としての「ndvi_series」、(2)スカラーとしての「temp」、(3)2D ピクセル配列としての「patch」)をエンコードするには、次のようにします。

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

入力タイルサイズ

入力タイルサイズを設定するには、inputTileSize と inputOverlapSize を使用します。これらのパラメータを設定するには、タイルの幅と高さをピクセル単位で指定します(例: [32, 32])。パッチの合計サイズは、inputTileSize と outputTileSize の高さと幅を足して決定されます。

たとえば、完全な畳み込みモデルでは、形状(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、チャンネル)の形状の入力を受け入れますが、形状(1、1、1)のテンソルを返します。この場合、outputTileSize を [1, 1] に設定する必要があります。これは、タイルの特性の確率(解像度を下げたもの)の出力を返すモデルではよくあることです。

予測

ほぼすべての畳み込みモデルは、固定投影の入力を想定しています。これは、ほとんどの畳み込みモデルが固定スケールでトレーニングされているためです。この場合、ee.Model.fromVertexAi() の呼び出しで fixInputProj パラメータを true に設定し、proj パラメータでデータの投影を指定します。

入力画像の投影とモデルの固定投影は、出力値に影響します。EE 再投影ガイドをご覧ください。