מודל הבסיס AlphaEarth של Google הוא מודל הטמעה גיאו-מרחבי שאומן על מגוון מערכי נתונים של תצפיות על כדור הארץ (EO). המודל הופעל על סדרות זמן שנתיות של תמונות, וההטבעות שנוצרו זמינות כערכת נתונים מוכנה לניתוח ב-Earth Engine. ערכת הנתונים הזו מאפשרת למשתמשים ליצור כל מספר של אפליקציות לשיפור דיוק או משימות אחרות בלי להפעיל מודלים של למידה עמוקה שדורשים הרבה משאבי מחשוב. התוצאה היא מערך נתונים לשימוש כללי, שאפשר להשתמש בו למספר משימות שונות בהמשך, כמו
- סיווג
- רגרסיה
- זיהוי שינויים
- חיפוש לפי דמיון
במדריך הזה נסביר איך הטמעות פועלות ונלמד איך לגשת למערך הנתונים של הטמעת לוויין ולהציג אותו בצורה חזותית.
הסבר על הטמעות
הטמעות הן דרך לדחוס כמויות גדולות של מידע לקבוצה קטנה יותר של תכונות שמייצגות סמנטיקה משמעותית. מודל AlphaEarth Foundations לומד איך לייצג באופן ייחודי את המידע ההדדי בין מקורות ליעדים באמצעות 64 מספרים בלבד (מידע נוסף זמין במאמר). המודל משתמש בסדרות זמן של תמונות מחיישנים, כולל Sentinel-2, Sentinel-1 ו-Landsat. זרם נתוני הקלט מכיל אלפי רצועות תמונה מכמה חיישנים, והמודל לוקח את הקלט הזה עם הרבה ממדים והופך אותו לייצוג עם פחות ממדים.
מודל מנטלי טוב להבנת הפעולה של AlphaEarth Foundations הוא טכניקה שנקראת ניתוח רכיבים עיקריים (PCA). בנוסף, PCA עוזרת לצמצם את המימד של הנתונים עבור יישומים של למידת מכונה. בעוד ש-PCA היא טכניקה סטטיסטית שיכולה לדחוס עשרות רצועות קלט לכמה רכיבים עיקריים, AlphaEarth Foundations הוא מודל למידה עמוקה שיכול לקחת אלפי ממדי קלט של מערכי נתונים של סדרות זמנים מריבוי חיישנים, וללמוד ליצור ייצוג של 64 רצועות שמתעד באופן ייחודי את השונות המרחבית והזמנית של הפיקסל הזה.
שדה הטמעה הוא מערך רציף או 'שדה' של הטמעות שנלמדו. התמונות באוספים של שדות ההטמעה מייצגות מסלולים במרחב-זמן שמתפרסים על פני שנה שלמה, ויש להן 64 פסים (אחד לכל ממד הטמעה).
איור: וקטור הטמעה n-ממדי שנדגם משדה הטמעה
גישה למערך הנתונים של הטמעת לוויין
מערך הנתונים Satellite Embedding הוא אוסף תמונות שמכיל תמונות שנתיות משנת 2017 ואילך (למשל, 2017, 2018, 2019…). לכל תמונה יש 64 פסים, וכל פיקסל הוא וקטור ההטמעה שמייצג את סדרת הזמן של נתונים מכמה חיישנים בשנה מסוימת.
var embeddings = ee.ImageCollection('GOOGLE/SATELLITE_EMBEDDING/V1/ANNUAL');
בחירת אזור
נתחיל בהגדרת אזור עניין. במדריך הזה נבחר אזור מסביב למאגר קרישנה ראג'ה סאגארה (KRS) בהודו, ונגדיר פוליגון כמשתנה הגיאומטריה. אפשרות אחרת היא להשתמש בכלי הציור בעורך הקוד כדי לצייר מצולע סביב האזור שמעניין אתכם. המצולע יישמר כמשתנה geometry
בקטע Imports.
// Use the satellite basemap
Map.setOptions('SATELLITE');
var geometry = ee.Geometry.Polygon([[
[76.3978, 12.5521],
[76.3978, 12.3550],
[76.6519, 12.3550],
[76.6519, 12.5521]
]]);
Map.centerObject(geometry, 12);
איור: בחירת אזור העניין
הכנת מערך הנתונים של הטמעת הלוויין
התמונות של כל שנה מחולקות למשבצות כדי שיהיה קל לגשת אליהן. אנחנו מפעילים מסננים ומוצאים את התמונות של השנה והאזור שבחרנו.
var year = 2024;
var startDate = ee.Date.fromYMD(year, 1, 1);
var endDate = startDate.advance(1, 'year');
var filteredEmbeddings = embeddings
.filter(ee.Filter.date(startDate, endDate))
.filter(ee.Filter.bounds(geometry));
תמונות לוויין להטמעה מחולקות למשבצות בגודל של עד 163,840 מ' x 163,840 מ' כל אחת, ומוצגות בהטלה של אזורי UTM עבור המשבצת. כתוצאה מכך, אנחנו מקבלים כמה משבצות של הטמעת תמונות לוויין שמכסות את האזור שמעניין אותנו. אפשר להשתמש בפונקציה mosaic()
כדי לשלב כמה משבצות לתמונה אחת. כדאי להדפיס את התמונה שמתקבלת כדי לראות את הפסים.
var embeddingsImage = filteredEmbeddings.mosaic();
print('Satellite Embedding Image', embeddingsImage);
אפשר לראות שלתמונה יש 64 רצועות, שנקראות A00, A01, … , A63. כל פס מכיל את הערך של וקטור ההטמעה לשנה הנתונה במאפיין או בציר הזה. שלא כמו פסי ספקטרום או אינדקסים, לפסים בודדים אין משמעות עצמאית – כל פס מייצג ציר אחד של מרחב ההטמעה. תשתמשו בכל 64 הפסים כקלט לאפליקציות במורד הזרם.
איור: 64 רצועות של תמונת ההטמעה של הלוויין
המחשה של מערך הנתונים Satellite Embedding
כמו שראינו, התמונה שלנו מכילה 64 פסים. אין דרך קלה להציג את כל המידע שכלול בכל הפסים, כי אפשר לראות רק שילוב של שלושה פסים בכל פעם.
אנחנו יכולים לבחור כל שלוש רצועות כדי להמחיש שלוש צירים של מרחב ההטמעה כתמונת RGB.
var visParams = {min: -0.3, max: 0.3, bands: ['A01', 'A16', 'A09']};
Map.addLayer(embeddingsImage.clip(geometry), visParams, 'Embeddings Image');
איור: ייצוג RGB של 3 צירים במרחב ההטמעה
דרך נוספת להמחיש את המידע הזה היא להשתמש בו כדי לקבץ פיקסלים עם הטמעות דומות, ולהשתמש בקבוצות האלה כדי להבין איך המודל למד את השונות המרחבית והזמנית של הנוף.
אנחנו יכולים להשתמש בטכניקות של אשכולות לא מפוקחים כדי לקבץ את הפיקסלים במרחב 64-ממדי לקבוצות או ל'אשכולות' של ערכים דומים. לשם כך, אנחנו דוגמים קודם כמה ערכי פיקסלים ומאמנים ee.Clusterer
.
var nSamples = 1000;
var training = embeddingsImage.sample({
region: geometry,
scale: 10,
numPixels: nSamples,
seed: 100
});
print(training.first());
אם תדפיסו את הערכים של המדגם הראשון, תראו שיש לו 64 ערכי פס שמגדירים את וקטור ההטמעה של הפיקסל הזה. וקטור ההטמעה מתוכנן כך שאורך היחידה שלו יהיה 1 (כלומר, האורך של הווקטור מהמקור (0,0,....0) לערכים של הווקטור יהיה 1).
איור: וקטור הטמעה שחולץ
עכשיו אפשר לאמן מודל לא מפוקח כדי לקבץ את הדגימות למספר הרצוי של אשכולות. כל אשכול ייצג פיקסלים של הטמעות דומות.
// Function to train a model for desired number of clusters
var getClusters = function(nClusters) {
var clusterer = ee.Clusterer.wekaKMeans({nClusters: nClusters})
.train(training);
// Cluster the image
var clustered = embeddingsImage.cluster(clusterer);
return clustered;
};
עכשיו אפשר לאגד את תמונת ההטמעה הגדולה יותר כדי לראות קבוצות של פיקסלים עם הטמעות דומות. לפני שנעשה את זה, חשוב להבין שהמודל תיעד את המסלול הזמני המלא של כל פיקסל במשך השנה – כלומר, אם לשני פיקסלים יש ערכים ספקטרליים דומים בכל התמונות אבל בזמנים שונים – אפשר להפריד ביניהם.
בהמשך מוצגת הדמיה של האזור שמעניין אותנו, כפי שצולם בתמונות של Sentinel-2 עם מיסוך עננים לשנת 2024. חשוב לזכור שכל התמונות (יחד עם תמונות מ-Sentinel-2, Landsat 8/9 ועוד הרבה חיישנים) שימשו ללמידת ההטמעות הסופיות.
איור: סדרת זמן שנתית של Sentinel-2 לאזור שלנו
כדי להמחיש את תמונות ההטמעה של הלוויין, נחלק את הנוף ל-3 אשכולות,
var cluster3 = getClusters(3);
Map.addLayer(cluster3.randomVisualizer().clip(geometry), {}, '3 clusters');
איור: תמונה של הטמעה של לוויין עם 3 אשכולות
אפשר לראות שהגבולות של האשכולות שנוצרו ברורים מאוד. הסיבה לכך היא שההטמעות כוללות באופן מובנה הקשר מרחבי – אפשר לצפות שלפי הפיקסלים באותו אובייקט יהיו וקטורי הטמעה דומים יחסית. בנוסף, אחד מהאשכולות כולל אזורים עם מים עונתיים מסביב למאגר הראשי. הסיבה לכך היא ההקשר הזמני שמתועד בווקטור ההטמעה, שמאפשר לנו לזהות פיקסלים כאלה עם דפוסים זמניים דומים.
ננסה לשפר את האשכולות על ידי קיבוץ הפיקסלים ל-5 אשכולות.
var cluster5 = getClusters(5);
Map.addLayer(cluster5.randomVisualizer().clip(geometry), {}, '5 clusters');
איור: תמונה להטמעה של לוויין עם 5 אשכולות
אנחנו יכולים להמשיך ולשפר את התמונות לקבוצות ספציפיות יותר על ידי הגדלת מספר האשכולות. כך נראית התמונה עם 10 אשכולות.
var cluster10 = getClusters(10);
Map.addLayer(cluster10.randomVisualizer().clip(geometry), {}, '10 clusters');
איור: תמונה של הטמעה של לוויין עם 10 אשכולות
מתגלים הרבה פרטים חדשים, ואפשר לראות סוגים שונים של גידולים שמקובצים באשכולות שונים. הטמעת הנתונים של הלוויין כוללת את הפנוולוגיה של הגידולים ואת משתני האקלים, ולכן היא מתאימה למיפוי של סוגי הגידולים. במדריך הבא (סיווג לא מפוקח), נראה איך ליצור מפה של סוגי גידולים עם נתוני הטמעה של לוויין, עם מעט תוויות ברמת השדה או ללא תוויות כאלה.
אפשר לנסות את הסקריפט המלא של ההדרכה הזו בכלי לעריכת קוד ב-Earth Engine.