การคาดการณ์รูปภาพ

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 แต่เจาะจงรูปร่างย่านความถี่อินพุตสำหรับการคาดคะเนรูปภาพ ตัวอย่างเช่น หากต้องการเข้ารหัส 3 แบนด์ ได้แก่ (1) "ndvi_series" เป็นอนุกรมเวลา 1 มิติที่มี 12 ค่า (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, ข้อมูล 1 มิติที่มีรูปร่าง (N) ควรมีมิติข้อมูล 1, ข้อมูล 2 มิติที่มีรูปร่าง (N, M) ควรมีมิติข้อมูล 2 ตัวอย่างเช่น แบนด์เอาต์พุตชื่อ "B1" ที่มีพิกเซลค่าอาร์เรย์ที่มีรูปร่างจะระบุด้วยข้อมูลต่อไปนี้

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

ขนาดชิ้นส่วนแผนที่

คุณควบคุมวิธีจัดเรียงรูปภาพได้โดยใช้พารามิเตอร์ต่อไปนี้

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

ขนาดชิ้นส่วนแผนที่อินพุต

หากต้องการกำหนดขนาดการ์ดอินพุต ให้ใช้ inputTileSize และ inputOverlapSize ตั้งค่าพารามิเตอร์เหล่านี้โดยระบุคู่ความกว้างและความสูงของไทล์เป็นพิกเซล (เช่น [32, 32]) ขนาดแพตช์ทั้งหมดจะกำหนดโดยการเพิ่มความสูงและความกว้างของ inputTileSize และ outputTileSize

ตัวอย่างเช่น โมเดล Convolutional เต็มรูปแบบอาจคาดหวังอินพุตที่มีรูปร่าง (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] ซึ่งเป็นเรื่องปกติสำหรับโมเดลที่แสดงผลลัพธ์ของความน่าจะเป็น (ที่ความละเอียดลดลง) ของลักษณะบางอย่างของไทล์

Projection

โมเดล Convolutional เกือบทั้งหมดจะคาดหวังอินพุตของการฉายภาพแบบคงที่ เนื่องจากโมเดล Convolutional ส่วนใหญ่ได้รับการฝึกในสเกลคงที่ ในกรณีนี้ ให้ตั้งค่าพารามิเตอร์ fixInputProj เป็น true ในการเรียกใช้ ee.Model.fromVertexAi() และระบุการฉายภาพของข้อมูลในพารามิเตอร์ proj

การฉายภาพของรูปภาพอินพุตและการฉายภาพคงที่ของโมเดลจะส่งผลต่อค่าเอาต์พุต ดูคำแนะนำเกี่ยวกับการฉายภาพซ้ำของ EE