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}
}
ขนาดชิ้นส่วนแผนที่
คุณควบคุมวิธีจัดเรียงรูปภาพได้โดยใช้พารามิเตอร์ต่อไปนี้
inputTileSizeinputOverlapSizeoutputTileSize
ขนาดชิ้นส่วนแผนที่อินพุต
หากต้องการกำหนดขนาดการ์ดอินพุต ให้ใช้ 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