AlphaEarth Foundations от Google — это геопространственная модель встраивания, обученная на различных наборах данных наблюдения Земли (EO). Модель была запущена на ежегодных временных рядах изображений, и полученные встраивания доступны в виде готового к анализу набора данных в Earth Engine. Этот набор данных позволяет пользователям создавать любое количество приложений для тонкой настройки или других задач без использования ресурсоемких моделей глубокого обучения. Результатом является универсальный набор данных, который можно использовать для различных задач, таких как
- Классификация
- Регрессия
- Обнаружение изменений
- Поиск сходства
В этом уроке мы разберемся, как работают встраивания, и научимся получать доступ к набору данных Satellite Embedding и визуализировать его.
Понимание вложений
Встраивание — это способ сжатия больших объёмов информации в меньший набор признаков, представляющих осмысленную семантику. Модель AlphaEarth Foundations использует временные ряды изображений с таких сенсоров, как Sentinel-2, Sentinel-1 и Landsat, и обучается уникальному представлению взаимной информации между источниками и целями с помощью всего лишь 64 чисел (подробнее см. в статье ). Входной поток данных содержит тысячи каналов изображений с нескольких сенсоров, и модель преобразует эти высокоразмерные входные данные в низкоразмерное представление.
Хорошей ментальной моделью для понимания работы AlphaEarth Foundations является метод, называемый анализом главных компонент (PCA). PCA также помогает снизить размерность данных для приложений машинного обучения. Хотя PCA — это статистический метод, позволяющий сжать десятки входных диапазонов в несколько главных компонент, AlphaEarth Foundations — это модель глубокого обучения, которая может обрабатывать тысячи входных измерений временных рядов данных, полученных с нескольких датчиков, и обучается создавать 64-диапазонное представление, которое уникальным образом отражает пространственную и временную изменчивость каждого пикселя.
Поле эмбеддинга — это непрерывный массив или «поле» изученных эмбеддингов. Изображения в коллекциях полей эмбеддинга представляют собой пространственно-временные траектории, охватывающие весь год, и содержат 64 полосы (по одной для каждого измерения эмбеддинга).
Рисунок: n-мерный вектор встраивания, выбранный из поля встраивания
Доступ к набору данных Satellite Embedding
Набор данных Satellite Embedding представляет собой коллекцию изображений , содержащую ежегодные снимки, начиная с 2017 года (например, 2017, 2018, 2019 и т.д.). Каждое изображение содержит 64 канала, где каждый пиксель — это вектор внедрения, представляющий временной ряд мультисенсорных данных за данный год.
var embeddings = ee.ImageCollection('GOOGLE/SATELLITE_EMBEDDING/V1/ANNUAL');
Выберите регион
Начнём с определения интересующей области. В этом уроке мы выберем область вокруг водохранилища Кришна Раджа Сагара (KRS) в Индии и определим полигон в качестве геометрической переменной. Кроме того, вы можете использовать инструменты рисования в редакторе кода, чтобы нарисовать полигон вокруг интересующей области, который будет сохранён как geometry
переменная в импортируемых данных.
// 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));
Изображения, полученные с помощью Satellite Embedding, разбиты на тайлы размером до 163 840 x 163 840 м каждый и представлены в проекции зон UTM для каждого тайла. В результате мы получаем несколько тайлов, полученных с помощью Satellite Embedding, покрывающих интересующую область. Для объединения нескольких тайлов в одно изображение можно использовать функцию 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-визуализация трех осей пространства встраивания
Альтернативный способ визуализации этой информации — ее использование для группировки пикселей с аналогичными вложениями и использования этих группировок для понимания того, как модель изучила пространственную и временную изменчивость ландшафта.
Мы можем использовать методы неконтролируемой кластеризации для группировки пикселей в 64-мерном пространстве в группы или «кластеры» со схожими значениями. Для этого мы сначала выбираем несколько значений пикселей и обучаем ee.Clusterer
.
var nSamples = 1000;
var training = embeddingsImage.sample({
region: geometry,
scale: 10,
numPixels: nSamples,
seed: 100
});
print(training.first());
Если вывести значения первого образца, вы увидите, что он содержит 64 значения полосы, определяющие вектор внедрения для этого пикселя. Вектор внедрения имеет единичную длину (т.е. длина вектора от начала координат (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');
Рисунок: Изображение со спутникового изображения с тремя кластерами
Вы заметите, что полученные кластеры имеют очень чёткие границы. Это связано с тем, что вложения изначально включают пространственный контекст — пиксели одного объекта, как ожидается, будут иметь относительно схожие векторы вложений. Кроме того, один из кластеров включает области с сезонным уровнем воды вокруг основного водохранилища. Это связано с временным контекстом, запечатлённым в векторе вложений, который позволяет нам обнаруживать такие пиксели со схожими временными паттернами.
Давайте посмотрим, сможем ли мы дополнительно уточнить кластеры, сгруппировав пиксели в 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 .