画像予測

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 関数をマッピングして「勾配」を計算する場合は、推論入力で出力タイプ「勾配」を次のように指定する必要があります。

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

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

inputShapes

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

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, チャンネル数) の入力を受け付けますが、(1, 1, 1) のテンソルを返します。この場合、outputTileSize[1, 1] に設定する必要があります。これは、一部のタイル特性の確率の出力を(低解像度で)返すモデルでよく見られます。

予測

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

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