ב-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
}
}
טיפ: אם מופיעה הודעת השגיאה "cannot be converted to a tensor" לגבי רצועה או מאפיין, פתרון אפשרי הוא להשתמש בשינוי סוג כדי לאלץ את הקלט לסוג נתון.
inputShapes
inputShapes הוא מילון של שמות ערוצים וצורת מערך פיקסלים. כדי לשלוח למודל פיקסלים עם ערכי מערך באורך גדול מ-1, צריך להגדיר את הארגומנט inputShapes. הארגומנט דומה ל-inputTypeOverride, אבל הוא ספציפי לצורות של רצועות קלט לחיזויים של תמונות. לדוגמה, כדי לקודד שלוש רצועות, (1) "ndvi_series" כסדרת זמן חד-ממדית עם 12 ערכים, (2) "temp" כסקלר ו-(3) "patch" כמערך פיקסלים דו-ממדי, משתמשים בקוד הבא:
inputShapes = {
"ndvi_series": [12], # 12 ndvi samples
"temp": [], # scalar
"patch": [2, 2], # 2px * 2px patch
}
outputBands
outputBands הוא מילון של שמות ערוצי פלט לאובייקט שמכיל את ee.PixelType והמימדים של הערוץ. כאן המאפיינים צריכים להיות זהים לאורך של מערך צורת הטנזור. במילים אחרות, לנתונים סקלריים עם צורה () צריך להיות ממד 0, לנתונים חד-ממדיים עם צורה (N) צריך להיות ממד 1, ולנתונים דו-ממדיים עם צורה (N, M) צריך להיות ממד 2. לדוגמה, רצועת פלט בשם "B1" עם פיקסלים של ערכי מערך עם צורה מצוינת באופן הבא:
outputBands = {
'B1': {'type': ee.PixelType.float(), 'dimensions': 1}
}
גודל המשבצות
אתם יכולים לשלוט באופן שבו התמונה מחולקת לאריחים באמצעות הפרמטרים הבאים:
inputTileSizeinputOverlapSizeoutputTileSize
גודל המשבצות של הקלט
כדי להגדיר את גודל המשבצות של הקלט, משתמשים ב-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]. זה די נפוץ במודלים שמחזירים את פלט ההסתברות (ברזולוציה מופחתת) של מאפיין מסוים של משבצת.
היטל
כמעט כל המודלים הקונבולוציוניים מצפים לקלט של היטל קבוע. הסיבה לכך היא שרוב המודלים הקונבולוציוניים מאומנים בקנה מידה קבוע. במקרה כזה, צריך להגדיר את הפרמטר fixInputProj לערך true בקריאה ל-ee.Model.fromVertexAi(), ולציין את ההיטל של הנתונים בפרמטר proj.
ההיטל של תמונת הקלט וההיטל הקבוע של המודל ישפיעו על ערכי הפלט. המדריך להטלה מחדש של EE