תחזיות לתמונות

ב-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
  }
}

טיפ: אם מוצגת הודעת השגיאה "לא ניתן להמיר תדר או מאפיין ל-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}
}

גודלי אריחים

אתם קובעים את אופן היצירה של המשבצות באמצעות הפרמטרים הבאים:

  • inputTileSize
  • inputOverlapSize
  • outputTileSize

הזנת גדלים של משבצות

כדי להגדיר את גודל המשבצות של הקלט, משתמשים ב-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, Channels), אבל להחזיר טינסורים בפורמט (1, 1, 1). במקרה כזה, צריך להגדיר את outputTileSize לערך [1, 1]. המצב הזה נפוץ למדי במודלים שמחזירים את הפלט של ההסתברות (ברזולוציה מופחתת) של מאפיין מסוים של המשבצת.

היטל

כמעט כל המודלים הקוונטיים ידרשו קלט של הקרנה קבועה. הסיבה לכך היא שרוב המודלים הקוונטיים עוברים אימון בקנה מידה קבוע. במקרה כזה, צריך להגדיר את הפרמטר fixInputProj לערך true בקריאה ל-ee.Model.fromVertexAi() ולציין את הקרנה של הנתונים בפרמטר proj.

הקרנה של תמונת הקלט והקרנה קבועה של המודל ישפיעו על ערכי הפלט. עיינו במדריך EE Reprojection.