Uydu yerleştirme veri kümesiyle denetimli sınıflandırma

GitHub'da düzenle
Sorun bildir
Sayfa geçmişi
Bu eğitim, Satellite Embedding veri kümesiyle ilgili bir dizi eğitimin parçasıdır. Ayrıca Giriş, Gözetimsiz Sınıflandırma, Regresyon ve Benzerlik Arama eğitimlerine de göz atın.

Uydu yerleştirmeleri, standart uzaktan algılama sınıflandırma iş akışları için kullanılabilir. Yerleştirmeler, özellikle az görevli öğrenmede başarılı olacak şekilde tasarlanmıştır. Bu da yüksek kaliteli sınıflandırma sonuçları elde etmek için nispeten az sayıda etiketlenmiş veri (örneğin, 10 ila 100 örnek) gerektiği anlamına gelir. Yerleştirmeler spektral, mekansal ve zamansal bağlam içerdiğinden k-En Yakın Komşular (kNN) veya Rastgele Orman gibi basit sınıflandırıcılar, karmaşık manzaraları hedef sınıflara sınıflandırmak için yerleştirme vektörlerini kullanabilir.

Bu eğitimde, uydu yerleştirme özelliğini kullanarak mangrovları sınıflandırmak için kNN sınıflandırıcısını kullanan denetimli öğrenme yaklaşımını nasıl kullanacağımızı öğreneceğiz.

Bölge seçin

İşe ilgi alanını tanımlayarak başlayalım. Bu eğitimde, Kenya kıyı şeridi boyunca bir bölge seçip geometri değişkeni olarak bir poligon tanımlayacağız. Alternatif olarak, ilgi alanının etrafına bir poligon çizmek için kod düzenleyicideki Çizim Araçları'nı kullanabilirsiniz. Bu poligon, içe aktarma işlemlerinde geometri değişkeni olarak kaydedilir.

var geometry = ee.Geometry.Polygon([[
  [39.4926, -4.39833],
  [39.4926, -4.47394],
  [39.5491, -4.47394],
  [39.5491, -4.39833]
]])


Şekil: Mangrov sınıflandırması için ilgi alanını seçme

Eğitim örnekleri toplama

Uydu yerleştirme özelliğini kullanan sınıflandırma iş akışlarında, nispeten doğru sonuçlar elde etmek için yalnızca birkaç etiketli örnek gerekir. Arazi örtüsü sınıflandırmamız için eğitim örnekleri oluşturmak üzere noktaları Earth Engine'e bırakıp etiketlemek en kolay yöntemdir. Uydu yerleştirme işleminden elde edilen her pikseli aşağıdaki üç sınıftan birine göre sınıflandıracak 3 sınıflı bir sınıflandırma oluşturacağız:

Arazi Örtüsü Sınıfı Açıklama Sınıf Değeri
mangrovlar Tuz toleranslı tüm kıyı bitkisi türleri 1
su Tüm yüzey suları (göl, gölet, nehir, okyanus vb.) 2
diğer Diğer tüm yüzeyler (binalar, açıkta kalan toprak, kum, ekinler, ağaçlar vb.) 3

Noktaları doğru şekilde etiketleyebilmemiz için önce Sentinel-2 bulutsuz kompozit oluşturup yüklüyoruz. Su, bitki örtüsü ve yerleşim alanları arasındaki farkı vurgulayan bir yanlış renk görselleştirme seçiyoruz. Bu sayede uygun örnekleri kolayca seçebiliyoruz.

// Pick a year for classification
var year = 2020;
var startDate = ee.Date.fromYMD(year, 1, 1);
var endDate = startDate.advance(1, 'year');

// Create a Sentinel-2 composite for the selected year
// for selecting training samples
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED');
var filteredS2 = s2
  .filter(ee.Filter.date(startDate, endDate))
  .filter(ee.Filter.bounds(geometry));

// Use the Cloud Score+ collection for cloud masking
var csPlus = ee.ImageCollection('GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED');
var csPlusBands = csPlus.first().bandNames();
var filteredS2WithCs = filteredS2.linkCollection(csPlus, csPlusBands);

function maskLowQA(image) {
  var qaBand = 'cs';
  var clearThreshold = 0.6;
  var mask = image.select(qaBand).gte(clearThreshold);
  return image.updateMask(mask);
}

var filteredS2Masked = filteredS2WithCs
  .map(maskLowQA)
  .select('B.*');

// Create a median composite of cloud-masked images
var composite = filteredS2Masked.median();
// Display the input composite
var swirVis = {min: 300, max: 4000, bands: ['B11', 'B8', 'B4']};

Map.centerObject(geometry);
Map.addLayer(composite.clip(geometry), swirVis, 'S2 Composite (False Color)');


Şekil: Sentinel-2 yanlış renk bileşeni

Artık hedef yıldan, sınıflandırma için örnekleri etiketlemek üzere kullanılabilecek bir referans resmimiz var. İlk olarak, örnek toplama katmanlarını yapılandıracağız. Geometri İçe Aktarma İşlemleri bölümünü açın ve + yeni katman'ı tıklayın.


Şekil: Yeni katman oluşturma

Yeni katmanın yanındaki Katman Özelliklerini Düzenle'yi (dişli simgesi) tıklayın ve aşağıda gösterildiği gibi yapılandırın. Katman adını mangroves olarak girin ve türü FeatureCollection olarak değiştirin. + Özellik'i tıklayın ve 1 değeriyle yeni bir özellik landcover ekleyin. Rengi yeşilin bir tonu olarak değiştirin ve Tamam'ı tıklayın.


Şekil: Mangrov katmanının katman özelliklerini yapılandırma

Benzer şekilde, diğer sınıflar için 2 yeni katman ekleyin. Su için landcover değerini, diğerleri için 2 değerini kullanın.3


Şekil: (Solda) su ve (sağda) diğer katmanlar için katman özelliklerini yapılandırma

Katmanlar yapılandırıldıktan sonra örnek toplamaya başlayabiliriz. Bir bölgeyi yakınlaştırın ve farklı sınıflardaki pikselleri görsel olarak tanımlayın. mangroves katmanını seçin ve İşaretçi ekle aracını kullanarak, yanlış renkli Sentinel-2 kompozitimizde orta tonlu yeşil olarak görünen (referans için uydu haritası görünümünü de kontrol edebilirsiniz) mangrov ormanlarına ait piksellere nokta bırakın. Uydu yerleştirme veri kümesiyle sınıflandırma yaparken çok fazla noktaya ihtiyacınız yoktur. Bunun yerine, ilgi alanınızdaki değişkenliği temsil eden yüksek kaliteli örnekler seçmeniz daha önemlidir. Bu eğitim için 10 örnek yeterli olacaktır.


Şekil: Mangrov sınıfı için örnek toplama

Ardından water katmanına geçin ve açık su için SWIR bantlarının güçlü emilimi nedeniyle Sentinel-2 kompozitimizde neredeyse siyah görünen yüzey suyu pikselleri için örnekler toplayın. other katmanı için işlemi tekrarlayın. Bu katmanda ne mangrove ne de water olan örnekleri seçin.


Şekil: Su ve diğer sınıflar için örnek toplama

Eğitim için örnek toplama işlemi tamamlandı. Üç ayrı FeatureCollection'ı tek bir yer kontrol noktası (gcps) koleksiyonunda birleştirebiliriz.

var gcps = mangroves.merge(water).merge(other);

Sınıflandırıcı eğitme

Artık bir sınıflandırıcıyı eğitmeye hazırız. Uydu yerleştirme veri kümesini yükler, seçtiğimiz yıl ve ilgi alanımızdaki bölgeler için döşemeleri filtreler, mozaik oluşturur ve ardından eğitim veri kümesi oluşturmak için yerleştirme vektörlerini örnekleriz.

var embeddings = ee.ImageCollection('GOOGLE/SATELLITE_EMBEDDING/V1/ANNUAL');

var embeddingsFiltered = embeddings
  .filter(ee.Filter.date(startDate, endDate))
  .filter(ee.Filter.bounds(geometry));

var embeddingsImage = embeddingsFiltered.mosaic();

// Overlay the samples on the image to get training data.
var training = embeddingsImage.sampleRegions({
  collection: gcps,
  properties: ['landcover'],
  scale: 10
});

print('Training Feature', training.first());

Eğitim özelliklerinde giriş özellikleri olarak yerleştirme vektörleri, sınıf özelliği olarak da ilişkili etiket kullanılır. Artık bu çıkarılan özelliklerle bir sınıflandırıcı eğitebiliriz. Earth Engine'de bulunan çeşitli sınıflandırıcılar arasından seçim yapabiliriz. Az örnekli sınıflandırma (örneğimizdeki gibi çok az sayıda örnek kullanılarak yapılan sınıflandırma) için iyi bir seçenek olan k-En Yakın Komşular (kNN) algoritması, kNN sınıflandırmasında, etiketli örnekler yerleştirme alanını "bölmek" veya kümelemek için kullanılır. Yerleştirme alanındaki en yakın komşularının etiketlerine göre her piksele bir etiket atanır. Eğitim verilerimizle bir kNN sınıflandırıcı eğitelim.

var classifier = ee.Classifier.smileKNN().train({
  features: training,
  classProperty: 'landcover',
  inputProperties: embeddingsImage.bandNames()
});

Uydu yerleştirme mozaiğini sınıflandırın

Artık eğitilmiş sınıflandırıcıyı kullanarak uydu yerleştirme mozağinin tüm piksellerindeki sınıfı tahmin edebiliriz.

var classified = embeddingsImage.classify(classifier);

Sınıflandırılmış resmi öğeye aktarma (isteğe bağlı)

Büyük bir bölgeyi sınıflandırmaya çalışıyorsanız Earth Engine'in, etkileşimli bilgi işlem ortamında izin verilen süreden daha fazla zamana ihtiyacı vardır. Görev yürütme için daha uzun sınırlara ve daha fazla kaynağa sahip olan toplu işlem ortamından yararlanmak üzere ara sonuçları öğe olarak dışa aktarmak iyi bir uygulamadır. Bu, büyük bölgelerle çalışırken computation timed out (hesaplama zaman aşımına uğradı) veya user memory exceeded (kullanıcı belleği aşıldı) hatalarının giderilmesine de yardımcı olur. Sınıflandırılmış görüntüyü dışa aktaralım.

// Replace this with your asset folder
// The folder must exist before exporting
var exportFolder = 'projects/spatialthoughts/assets/satellite_embedding/';

var classifiedExportImage = 'mangrove_classification';
var classifiedExportImagePath = exportFolder + classifiedExportImage;

Export.image.toAsset({
  image: classified.clip(geometry),
  description: 'Classified_Image_Export',
  assetId: classifiedExportImagePath,
  region: geometry,
  scale: 10,
  maxPixels: 1e10
});

Dışa aktarma görevlerini başlatın ve devam etmeden önce tamamlanmasını bekleyin. Dışa aktarma görevi tamamlandıktan sonra sınıflandırılmış görüntüyü kodumuza tekrar aktarırız.

// Use the exported asset
var classified = ee.Image(classifiedExportImagePath);

Sınıflandırmayı görselleştirme

Sınıflandırmanızı etkileşimli olarak çalıştırdıysanız veya bir öğeye aktardıysanız artık sınıflandırmanızın sonuçlarını içeren sınıflandırılmış bir değişkeniniz olacak.

// Choose a 3-color palette
// Assign a color for each class in the following order
// Mangrove, Water, Other
var palette = ['green', 'blue', 'gray'];

Map.addLayer(
  classified.clip(geometry),
  {min: 1, max: 3, palette: palette},
  'Classified Satellite Embeddings Image');


Şekil: Sınıflandırılmış uydu yerleştirme görüntüsü

Mangrov haritası oluşturma

3 sınıflı bir sınıflandırılmış görüntü oluşturduk. Mangrov haritası oluşturmak için Mangrov (1. sınıf) olarak sınıflandırılan pikselleri ayıklayabiliriz.

// Extract mangroves class
var mangrovesImage = classified.eq(1).selfMask();

var mangroveVis = {min: 0, max: 1, palette: ['green']};

Map.addLayer(mangrovesImage.clip(geometry),
  mangroveVis, 'Mangroves Map (Satellite Embedding Classification)');


Şekil: Mangrov haritası

Sonuçları doğrulama

Sonuçlarımızı değerlendirmek için bunları yüksek kaliteli ve uzman incelemesinden geçmiş bir veri kümesi olan Global Mangrove Watch ile karşılaştırabiliriz. Bu veri kümesi, JAXA'nın L-bandı Sentetik Açıklıklı Radar (SAR) verilerinden elde edilmiş olup 1996-2020 yılları arasındaki yıllık mangrov haritalarını içerir. Bu veri kümesi GEE Community Catalog'da bulunduğundan Earth Engine'e kolayca yüklenebilir ve görselleştirilebilir.

var gmw = ee.ImageCollection(
  'projects/earthengine-legacy/assets/projects/sat-io/open-datasets/GMW/extent/GMW_V3');
var gmwFiltered = gmw
  .filter(ee.Filter.date(startDate, endDate))
  .filter(ee.Filter.bounds(geometry));
var gmwImage = gmwFiltered.first();

Map.addLayer(gmwImage.clip(geometry),
  mangroveVis, 'Mangroves (Global Mangrove Watch)');

Küresel mangrov gözlem sonuçları ile Satellite Embedding veri kümesinin az görüntülü sınıflandırma çıkışı arasında yakın bir eşleşme olduğunu unutmayın. Temel haritayı uydu görünümüne geçirdiğinizde, uydu yerleştirme sınıflandırmasının, küresel mangrov gözlem sınıflandırmasında eksik olan manzaranın daha ayrıntılı kısımlarını da yakaladığını görürsünüz.

Bu eğitimin tam komut dosyasını Earth Engine Kod Düzenleyici'de deneyin.