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

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 หลายรายการสร้างเอาต์พุตที่มีประเภทแบบไดนามิกซึ่งไม่สามารถอนุมานได้จนกว่าจะถึงรันไทม์

ตัวอย่างเช่น หากคํานวณ "slope" โดยการแมปee.Terrain.slope ฟังก์ชันในคอลเล็กชัน คุณจะต้องระบุประเภทเอาต์พุตของ "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

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

การฉายภาพ

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

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