이미지 예측

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
  }
}

팁: 밴드 또는 속성을 '텐서로 변환할 수 없다'는 오류 메시지가 표시되면 유형 재정의를 사용하여 입력을 특정 유형으로 강제 변환하는 것이 해결책이 될 수 있습니다.

inputShapes

inputShapes은 밴드 이름과 배열 픽셀 형태의 사전입니다. 길이가 1보다 큰 배열 값 픽셀을 모델에 전송하려면 inputShapes 인수를 설정합니다. 인수는 inputTypeOverride과 비슷하지만 이미지 예측의 입력 밴드 도형에만 적용됩니다. 예를 들어 (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 재투영 가이드를 참고하세요.