AlphaEarth Foundations von Google ist ein räumliches Einbettungsmodell, das mit einer Vielzahl von Erdbeobachtungs-Datasets trainiert wurde. Das Modell wurde für jährliche Zeitreihen von Bildern ausgeführt und die resultierenden Einbettungen sind als analysebereiter Datensatz in Earth Engine verfügbar. Mit diesem Dataset können Nutzer beliebig viele Anwendungen für das Fine-Tuning oder andere Aufgaben erstellen, ohne rechenintensive Deep-Learning-Modelle auszuführen. Das Ergebnis ist ein Allzweck-Dataset, das für eine Reihe verschiedener nachgelagerter Aufgaben verwendet werden kann, z. B.
- Klassifizierung
- Regression
- Änderungserkennung
- Ähnlichkeitssuche
In diesem Tutorial erfahren Sie, wie Einbettungen funktionieren, und lernen, wie Sie auf den Datensatz für Satelliteneinbettungen zugreifen und ihn visualisieren können.
Informationen zu Einbettungen
Mithilfe von Einbettungen lassen sich große Mengen an Informationen in eine kleinere Gruppe von Merkmalen komprimieren, die eine aussagekräftige Semantik darstellen. Das AlphaEarth Foundations-Modell verwendet Zeitreihen von Bildern von Sensoren wie Sentinel-2, Sentinel-1 und Landsat und lernt, wie die gegenseitige Information zwischen Quellen und Zielen mit nur 64 Zahlen eindeutig dargestellt werden kann (weitere Informationen). Der Eingabedatenstrom enthält Tausende von Bildbändern von mehreren Sensoren. Das Modell nimmt diese hochdimensionale Eingabe und wandelt sie in eine niedrigdimensionale Darstellung um.
Ein gutes mentales Modell, um die Funktionsweise von AlphaEarth Foundations zu verstehen, ist die sogenannte Hauptkomponentenanalyse (Principal Component Analysis, PCA). Die Hauptkomponentenanalyse trägt auch dazu bei, die Dimensionalität der Daten für Anwendungen für maschinelles Lernen zu reduzieren. Die PCA ist eine statistische Methode, mit der sich Dutzende von Eingabebändern in eine Handvoll Hauptkomponenten komprimieren lassen. AlphaEarth Foundations ist ein Deep-Learning-Modell, das Tausende von Eingabedimensionen von Zeitreihendatasets mit mehreren Sensoren verarbeiten kann. Es lernt, eine 64‑Band-Darstellung zu erstellen, die die räumliche und zeitliche Variabilität des jeweiligen Pixels eindeutig erfasst.
Ein Einbettungsfeld ist das kontinuierliche Array oder „Feld“ der gelernten Einbettungen. Bilder in den Sammlungen von Einbettungsfeldern stellen Raum-Zeit-Trajektorien für ein ganzes Jahr dar und haben 64 Bänder (eines für jede Einbettungsdimension).
Abbildung: n-dimensionaler Einbettungsvektor, der aus einem Einbettungsfeld abgeleitet wurde
Auf das Satellite Embedding-Dataset zugreifen
Das Dataset „Satellite Embedding“ ist eine Bildsammlung mit jährlichen Bildern ab 2017 (z.B. 2017, 2018, 2019 usw.). Jedes Bild hat 64 Bänder, wobei jedes Pixel den Einbettungsvektor darstellt, der die Multisensor-Zeitreihe für das jeweilige Jahr repräsentiert.
var embeddings = ee.ImageCollection('GOOGLE/SATELLITE_EMBEDDING/V1/ANNUAL');
Region auswählen
Beginnen wir mit der Definition einer Region of Interest. In diesem Beispiel wählen wir eine Region um den Krishna Raja Sagara-Stausee (KRS) in Indien aus und definieren ein Polygon als Geometrie-Variable. Alternativ können Sie mit den Zeichenwerkzeugen im Code-Editor ein Polygon um die Region von Interesse zeichnen. Dieses wird dann als Variable geometry
in den Importen gespeichert.
// 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);
Abbildung: Region auswählen
Dataset für Satelliteneinbettungen vorbereiten
Die Bilder jedes Jahres sind in Kacheln unterteilt, damit Sie leichter darauf zugreifen können. Wir wenden Filter an und suchen nach den Bildern für das ausgewählte Jahr und die ausgewählte Region.
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));
Bilder für die Satelliteneinbettung werden in Kacheln mit einer Größe von bis zu 163.840 m × 163.840 m unterteilt und in der Projektion für die UTM-Zonen der Kachel bereitgestellt. So erhalten wir mehrere Satellite Embedding-Kacheln, die die betreffende Region abdecken. Mit der Funktion mosaic()
können wir mehrere Kacheln zu einem einzigen Bild kombinieren. Lassen Sie uns das resultierende Bild ausdrucken, um die Bänder zu sehen.
var embeddingsImage = filteredEmbeddings.mosaic();
print('Satellite Embedding Image', embeddingsImage);
Das Bild hat 64 Bänder mit den Namen A00, A01, …, A63. Jedes Band enthält den Wert des Einbettungsvektors für das angegebene Jahr in dieser Dimension oder Achse. Im Gegensatz zu Spektralbändern oder ‑indizes haben einzelne Bänder keine unabhängige Bedeutung. Vielmehr stellt jedes Band eine Achse des Einbettungsraums dar. Sie würden alle 64 Bänder als Eingaben für Ihre Downstream-Anwendungen verwenden.
Abbildung: 64 Bänder des Satelliten-Embedding-Bilds
Satellite Embedding-Dataset visualisieren
Wie wir gerade gesehen haben, enthält unser Bild 64 Bänder. Es gibt keine einfache Möglichkeit, alle Informationen in allen Bändern zu visualisieren, da wir jeweils nur eine Kombination aus drei Bändern sehen können.
Wir können beliebige drei Bänder auswählen, um drei Achsen des Einbettungsraums als RGB-Bild zu visualisieren.
var visParams = {min: -0.3, max: 0.3, bands: ['A01', 'A16', 'A09']};
Map.addLayer(embeddingsImage.clip(geometry), visParams, 'Embeddings Image');
Abbildung: RGB-Visualisierung von 3 Achsen des Einbettungsbereichs
Eine alternative Möglichkeit, diese Informationen zu visualisieren, besteht darin, Pixel mit ähnlichen Einbettungen zu gruppieren und diese Gruppierungen zu verwenden, um zu verstehen, wie das Modell die räumliche und zeitliche Variabilität einer Landschaft gelernt hat.
Wir können unbeaufsichtigte Clustering-Techniken verwenden, um die Pixel im 64-dimensionalen Raum in Gruppen oder „Clustern“ ähnlicher Werte zu gruppieren. Dazu werden zuerst einige Pixelwerte erfasst und ein ee.Clusterer
trainiert.
var nSamples = 1000;
var training = embeddingsImage.sample({
region: geometry,
scale: 10,
numPixels: nSamples,
seed: 100
});
print(training.first());
Wenn Sie die Werte der ersten Stichprobe ausgeben, sehen Sie, dass sie 64 Bandwerte enthält, die den Einbettungsvektor für dieses Pixel definieren. Der Einbettungsvektor ist so konzipiert, dass er eine Einheitslänge hat. Das bedeutet, dass die Länge des Vektors vom Ursprung (0,0,....0) bis zu den Werten des Vektors 1 beträgt.
Abbildung: Extrahierter Einbettungsvektor
Wir können jetzt ein unüberwachtes Modell trainieren, um die Stichproben in die gewünschte Anzahl von Clustern zu gruppieren. Jeder Cluster würde Pixel mit ähnlichen Einbettungen darstellen.
// 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;
};
Wir können das größere Einbettungsbild jetzt in Cluster einteilen, um Gruppen von Pixeln mit ähnlichen Einbettungen zu sehen. Bevor wir das tun, ist es wichtig zu verstehen, dass das Modell den vollständigen zeitlichen Verlauf jedes Pixels für das Jahr erfasst hat. Das bedeutet, dass zwei Pixel mit ähnlichen Spektralwerten in allen Bildern, aber zu unterschiedlichen Zeiten, getrennt werden können.
Unten sehen Sie eine Visualisierung unseres Untersuchungsgebiets, wie es von cloud-maskierten Sentinel-2-Bildern für das Jahr 2024 erfasst wurde. Alle Bilder (einschließlich der Bilder von Sentinel-2, Landsat 8/9 und vielen weiteren Sensoren) wurden verwendet, um die endgültigen Einbettungen zu trainieren.
Abbildung: Jährliche Zeitreihe für Sentinel-2 für unsere Region
Wir visualisieren die Bilder mit Satelliteneinbettung, indem wir die Landschaft in drei Cluster unterteilen.
var cluster3 = getClusters(3);
Map.addLayer(cluster3.randomVisualizer().clip(geometry), {}, '3 clusters');
Abbildung: Satellitenbild mit 3 Clustern
Die resultierenden Cluster haben sehr klare Grenzen. Das liegt daran, dass die Einbettungen von Natur aus räumlichen Kontext enthalten. Es wird erwartet, dass Pixel innerhalb desselben Objekts relativ ähnliche Einbettungsvektoren haben. Außerdem umfasst einer der Cluster Gebiete mit saisonalem Wasser in der Nähe des Hauptreservoirs. Das liegt am zeitlichen Kontext, der im Einbettungsvektor erfasst wird. So können wir solche Pixel mit ähnlichen zeitlichen Mustern erkennen.
Sehen wir uns an, ob wir die Cluster weiter verfeinern können, indem wir die Pixel in fünf Cluster gruppieren.
var cluster5 = getClusters(5);
Map.addLayer(cluster5.randomVisualizer().clip(geometry), {}, '5 clusters');
Abbildung: Satellitenbild mit 5 Clustern
Wir können die Anzahl der Cluster erhöhen, um die Bilder in spezialisiertere Gruppen aufzuteilen. So sieht das Bild mit 10 Clustern aus.
var cluster10 = getClusters(10);
Map.addLayer(cluster10.randomVisualizer().clip(geometry), {}, '10 clusters');
Abbildung: Satellitenbild mit 10 Clustern
Es kommen viele Details hinzu und wir sehen, wie verschiedene Arten von Pflanzen in verschiedenen Clustern gruppiert werden. Da das Satelliten-Embedding die Pflanzenphänologie zusammen mit klimatischen Variablen erfasst, eignet es sich gut für die Kartierung von Pflanzenarten. Im nächsten Tutorial (Unsupervised Classification) erfahren Sie, wie Sie mit Satellite Embedding-Daten eine Karte mit Kulturpflanzentypen erstellen, für die nur wenige oder gar keine Labels auf Feldebene verfügbar sind.
Vollständiges Skript für diese Anleitung im Earth Engine-Code-Editor ausprobieren