למידת מכונה ב-Earth Engine

ממשקי API ללמידת מכונה

למידת מכונה (ML) היא טכניקה יעילה לניתוח נתוני תצפית של כדור הארץ. ל-Earth Engine יש יכולות מובנות שמאפשרות למשתמשים ליצור מודלים של למידת מכונה ולהשתמש בהם בתרחישים נפוצים באמצעות ממשקי API קלים לשימוש.

אחת מהמשימות הנפוצות ב-ML היא לסווג את הפיקסלים בתמונות לוויין לשתי קטגוריות או יותר. הגישה הזו שימושית למיפוי של כיסוי פני השטח ושימוש בקרקע, וגם לאפליקציות פופולריות אחרות.

  • סיווג בפיקוח: אחת מהשיטות של למידת מכונה לסיווג שטחים היא להשתמש בדוגמאות של עובדות מוכרות כדי ללמד מודל להבדיל בין הכיתות. סוגי המיון המבוקרים המובנים ב-Earth Engine תומכים בתהליך הזה.
  • סיווג ללא הדרכה: בסיווג ללא הדרכה, לא ניתנות לאלגוריתם האימון דוגמאות של אמת ידועה. במקום זאת, האלגוריתם מחלק את הנתונים הזמינים לאשכולות על סמך הבדלים מהותיים. מחלקי הנתונים ללא הדרכה של Earth Engine שימושיים במיוחד כשאין נתוני תשתית, כשלא יודעים מה המספר הסופי של הכיתות או כשרוצים לבצע ניסויים מהירים.
  • רגרסיה: בעוד שמודל סיווג מנסה לקבץ כל קלט לקבוצה נפרדת, מודל רגרסיה מנסה לחזות משתנה רציף לכל קלט. לדוגמה, מודל רגרסיה יכול לחזות את איכות המים, אחוז כיסוי היער, אחוז כיסוי העננים או את התשואה של גידולים חקלאיים. מידע נוסף זמין בקטע Linear Regression ב-ee.Reducers.

אימון וחיזוי מחוץ ל-Earth Engine

למידת עומק ורשתות עצביות הן שיטות של למידת מכונה שיכולות להתאים לנתונים מורכבים כמו תמונות לוויין. אין תמיכה בלמידה עמוקה או ברשתות נוירונליות בממשקי ה-API של למידת המכונה ב-Earth Engine. במקום זאת, כדי לנצל את היתרונות שלהם, תצטרכו להשתמש במסגרת כמו TensorFlow או PyTorch ולאמן את המודל מחוץ ל-Earth Engine.

אם אתם כבר מכירים מסגרת כמו scikit-learn ללמידת מכונה קלאסית או XGBoost לעצים של החלטות עם שיפור שיפוע, תוכלו גם לאמן את המודלים מחוץ ל-Earth Engine.

לבסוף, כדאי לאמן מודל מחוץ ל-Earth Engine אם מערך הנתונים שלכם גדול מאוד וחורג מהמגבלות שמפורטות בהמשך.

ייצוא נתונים מ-Earth Engine לצורך אימון

אחזור חיזויים ממודל מחוץ ל-Earth Engine

אם מארגנים אימון של מודל מחוץ ל-Earth Engine, יש כמה אפשרויות לקבלת תחזיות מהמודל הזה.

  • החבילה ee.Model של Earth Engine מאפשרת לבצע תחזיות באמצעות נתונים ב-Earth Engine ומודל מאומן שמתארח ב-Vertex AI של Google. אתם יכולים לארח את המודל המותאם אישית שעבר אימון ב-Vertex AI ולבצע הסקה ישירות ב-Earth Engine באמצעות ee.Model.fromVertexAi. למידע נוסף, ראו התחברות למודלים שמתארחים ב-Vertex AI.
  • לחלופין, תוכלו לעיין במדריך לסיווג כיסוי פני השטח כדי ללמוד איך לבצע תחזיות באמצעות שירותי ענן כמו Cloud Functions.

סיבות אחרות לאימון מודלים מחוץ ל-Earth Engine

בנוסף להיכרות ולהעדפה, כדאי לאמן מודל מחוץ ל-Earth Engine אם רוצים להשתמש בארכיטקטורות של מודלים (למשל, רשתות נוירונליות קונבולוציוניות) שלא נתמכות בממשקי ה-API של למידת המכונה ב-Earth Engine, אם רוצים להשתמש בתכונות נוספות של Vertex AI או אם נתקלים במגבלות התאמה לעומס בממשקי ה-API של למידת המכונה ב-Earth Engine.

הגבלות של קבוצות אימון

אימון באמצעות ee.Classifier או ee.Clusterer יעיל בדרך כלל עם מערכי נתונים בנפח של עד 100MB. ככלל אצבע גס מאוד, בהנחה שדיוק של 32 ביט (כלומר, float), אפשר להשתמש במודל הזה עם מערכי נתונים לאימון שעומדים בתנאי האלה (כאשר n הוא מספר הדוגמאות ו-b הוא מספר הערוצים):

nb ≤ (100 * 2 20) / 4

לדוגמה, אם אתם מארגנים את האימון באמצעות 100 פסגות, מספר הדוגמאות שמשמש לאימון צריך להיות קטן מ-200,000.

מגבלות על הסקת מסקנות

מאחר שמערכת Earth Engine מעבדת משבצות תמונה בגודל 256x256, בקשות להסקה מתמונות חייבות לכלול פחות מ-400 פס (שוב, בהנחה שהתמונות ברזולוציה של 32 ביט).

אפשר לאמן מחדש סיווג יותר מפעם אחת כדי לשמור על מגבלות על מערך הנתונים בכל הפעלת אימון.

      var trainings = ee.List.sequence(0, 3).map(function(cover) {
          return image.addBands(landcover.eq(cover).stratifiedSample()
      })

      var classifier = ee.Classifier.smileCart()
          .train(trainings.get(0), "cover")
          .train(trainings.get(1), "cover")
          .train(trainings.get(2), "cover")
          .train(trainings.get(3), "cover")
    

מגבלות על גודל המודל

בנוסף, הגודל של המודל עצמו צריך להיות קטן מ-100MB. אפשר להגדיר הרבה ממחלקי הנתונים שלנו כך שיגבילו את המורכבות שלהם, וכתוצאה מכך את הגודל שלהם. לדוגמה:

      var classifier = ee.Classifier.smileRandomForest({
          numberOfTrees: 10,
          minLeafPopulation: 10,
          maxNodes: 10000
      })