Dự đoán hình ảnh

Earth Engine cung cấp ee.Model làm trình kết nối với các mô hình được lưu trữ trên Vertex AI. Trình kết nối này gửi dữ liệu hình ảnh hoặc bảng dưới dạng yêu cầu dự đoán trực tuyến đến một mô hình đã huấn luyện được triển khai trên một điểm cuối Vertex AI. Sau đó, đầu ra của mô hình sẽ được trả về dưới dạng hình ảnh hoặc bảng Earth Engine.

ee.Model.predictImage

Sử dụng model.predictImage() để đưa ra dự đoán về ee.Image bằng mô hình được lưu trữ. ee.Image được dùng để tạo các ô (mảnh hình ảnh) của các dải, sau đó được gửi đến mô hình được lưu trữ. Kiểu dữ liệu trả về của predictImage() là một ee.Image có thể được thêm vào bản đồ, xuất hoặc dùng trong các phép tính khác.

Tuỳ chọn nhập

Khi thực hiện suy luận bằng ee.Image, có một số tham số được dùng trong trình kết nối ee.Model. Các chế độ kiểm soát này dành cho các dải và thuộc tính đầu vào, việc xếp ô bản vá hình ảnh đầu vào, kích thước bản vá hình ảnh đầu ra và dải hình ảnh đầu ra.

Dải và thuộc tính

Để chỉ định dải và thuộc tính đầu vào, hãy sử dụng các tham số sau:

inputProperties

inputProperties là danh sách tên thuộc tính cần chuyển tiếp đến mọi thực thể dự đoán. Hỗ trợ các thuộc tính số, chuỗi và boolean.

inputTypeOverride

inputTypeOverride là một từ điển gồm tên thuộc tính và/hoặc tên dải tần có thông tin cụ thể về loại và kích thước được cung cấp. Điều này có thể cần thiết vì nhiều thuật toán của Earth Engine tạo ra kết quả có kiểu động không thể suy luận cho đến thời gian chạy.

Ví dụ: nếu đang tính toán "độ dốc" bằng cách liên kết hàm ee.Terrain.slope với một tập hợp, bạn sẽ cần chỉ định loại dữ liệu đầu ra của "độ dốc" trong dữ liệu đầu vào suy luận của chúng tôi như sau:

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

MẸO: Nếu bạn gặp thông báo lỗi cho biết một dải tần hoặc thuộc tính "không thể chuyển đổi thành tensor", thì một giải pháp có thể là sử dụng cơ chế ghi đè kiểu để buộc dữ liệu đầu vào phải thuộc một kiểu nhất định.

inputShapes

inputShapes là một từ điển gồm tên dải và hình dạng pixel của mảng. Để gửi các pixel có giá trị mảng có độ dài lớn hơn 1 đến mô hình, hãy đặt đối số inputShapes. Đối số này tương tự như inputTypeOverride nhưng dành riêng cho hình dạng dải đầu vào cho các dự đoán hình ảnh. Ví dụ: để mã hoá ba dải, (1) "ndvi_series" dưới dạng chuỗi thời gian 1D có 12 giá trị, (2) "temp" dưới dạng đại lượng vô hướng và (3) "patch" dưới dạng mảng pixel 2D, hãy sử dụng đoạn mã sau:

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

outputBands

outputBands là một từ điển gồm tên dải tần đầu ra cho một đối tượng chứa ee.PixelType và kích thước của dải tần. Ở đây, các phương diện phải giống với độ dài của mảng hình dạng tensor. Nói cách khác, dữ liệu vô hướng có hình dạng () phải có chiều 0, dữ liệu 1D có hình dạng (N) phải có chiều 1, dữ liệu 2D có hình dạng (N, M) phải có chiều 2. Ví dụ: một dải đầu ra có tên là "B1" với các pixel có giá trị mảng có hình dạng được chỉ định bằng như sau:

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

Kích thước ô

Bạn kiểm soát cách xếp kề hình ảnh bằng các tham số sau:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

Kích thước ô đầu vào

Để đặt kích thước ô đầu vào, hãy sử dụng inputTileSize và inputOverlapSize. Đặt các tham số này bằng cách cung cấp một cặp chiều rộng và chiều cao của ô theo đơn vị pixel (ví dụ: [32, 32]). Tổng kích thước bản vá được xác định bằng cách cộng chiều cao và chiều rộng của inputTileSize và outputTileSize.

Ví dụ: một mô hình tích chập hoàn toàn có thể yêu cầu dữ liệu đầu vào có hình dạng (256 x 256 x Kênh). Nếu lo ngại về hiệu ứng biên giữa các kết quả suy luận, chúng ta có thể loại bỏ inputOverlapSize[0] pixel ở bên trái và bên phải, cũng như inputOverlapSize[1] pixel ở trên cùng và dưới cùng của mỗi kết quả suy luận. Điều này sẽ dẫn đến nhiều lệnh gọi dự đoán hơn để bao phủ hoàn toàn khu vực dự đoán.

Ví dụ: nếu mô hình của chúng ta yêu cầu (256 x 256 x 3) và chúng ta muốn loại bỏ 32 pixel đường viền, chúng ta sẽ chỉ định như sau:

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

LƯU Ý: inputOverlapSize là tổng mức độ chồng chéo x và y. Nếu bạn dự định có một vùng đệm gồm N pixel xung quanh toàn bộ hình ảnh, thì vùng chồng lấp sẽ là [2N, 2N]

Kích thước ô đầu ra

Để đặt kích thước ô đầu ra, hãy đặt đối số outputTileSize. Nếu bạn không đặt outputTileSize, thì kích thước thẻ thông tin mặc định sẽ giống hệt với inputTileSize.

Đối với một số mô hình, kích thước đầu ra có thể khác với kích thước đầu vào. Ví dụ: một mô hình phân loại có thể chấp nhận dữ liệu đầu vào có hình dạng (256, 256, Kênh), nhưng trả về các tensor có hình dạng (1, 1, 1). Trong trường hợp này, bạn cần đặt outputTileSize thành [1, 1]. Điều này khá phổ biến với các mô hình trả về kết quả xác suất (ở độ phân giải thấp hơn) của một số đặc điểm của ô.

Dự đoán

Hầu hết các mô hình tích chập đều yêu cầu dữ liệu đầu vào có phép chiếu cố định. Điều này là do hầu hết các mô hình tích chập đều được huấn luyện theo tỷ lệ cố định. Trong trường hợp này, hãy đặt tham số fixInputProj thành true trong lệnh gọi đến ee.Model.fromVertexAi() và chỉ định phép chiếu của dữ liệu trong tham số proj.

Phép chiếu của Hình ảnh đầu vào và phép chiếu cố định của mô hình sẽ ảnh hưởng đến các giá trị đầu ra. Hãy xem hướng dẫn về Phép chiếu lại EE.