طبقه بندی نظارت شده با مجموعه داده های تعبیه شده ماهواره ای

در GitHub ویرایش کنید
گزارش مشکل
تاریخچه صفحه
نویسنده(ها): اندیشه های فضایی
این آموزش بخشی از مجموعه ای از آموزش های مربوط به مجموعه داده های جاسازی ماهواره است، همچنین به مقدمه ، طبقه بندی بدون نظارت ، رگرسیون و جستجوی مشابه مراجعه کنید.

Satellite Embeddings را می توان برای جریان های کاری طبقه بندی سنجش از راه دور استاندارد استفاده کرد. جاسازی ها به طور خاص برای برتری در یادگیری کم شات طراحی شده اند، به این معنی که برای دستیابی به نتایج طبقه بندی با کیفیت به تعداد نسبتا کمی از داده های برچسب زده شده (به 10 تا 100 نمونه فکر کنید) نیاز است. از آنجایی که تعبیه‌ها شامل زمینه طیفی، مکانی و زمانی است، طبقه‌بندی‌کننده‌های ساده مانند k-Nearest Neighbors (kNN) یا Random Forest می‌توانند از بردارهای جاسازی برای طبقه‌بندی مناظر پیچیده به کلاس‌های هدف استفاده کنند.

در این آموزش، نحوه استفاده از رویکرد یادگیری نظارت شده با استفاده از طبقه بندی کننده kNN برای طبقه بندی حرا با استفاده از Satellite Embedding را خواهیم آموخت.

یک منطقه را انتخاب کنید

بیایید با تعریف منطقه مورد علاقه شروع کنیم. برای این آموزش، منطقه ای را در امتداد خط ساحلی کنیا انتخاب می کنیم و چند ضلعی را به عنوان متغیر هندسه تعریف می کنیم. همچنین، می‌توانید از ابزار طراحی در ویرایشگر کد برای ترسیم چند ضلعی در اطراف ناحیه مورد نظر استفاده کنید که به عنوان متغیر هندسه در Imports ذخیره می‌شود.

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


شکل: انتخاب منطقه مورد نظر برای طبقه بندی حرا

نمونه های آموزشی را جمع آوری کنید

برای دستیابی به نتایج نسبتاً دقیق، گردش‌های کاری طبقه‌بندی با جاسازی ماهواره تنها به تعداد انگشت شماری از نمونه‌های برچسب‌دار نیاز دارند. برای طبقه‌بندی پوشش زمین، ساده‌ترین کار این است که نقاط را رها کنیم و آنها را در Earth Engine برچسب‌گذاری کنیم تا نمونه‌های آموزشی ایجاد کنیم. ما یک طبقه بندی 3 کلاسه ایجاد خواهیم کرد که هر پیکسل از Satellite Embedding را به یکی از سه کلاس زیر طبقه بندی می کند:

کلاس پوشش زمین توضیحات ارزش کلاس
حرا همه گونه های گیاهی ساحلی مقاوم به نمک 1
آب تمام آب های سطحی - دریاچه، برکه ها، رودخانه ها، اقیانوس ها و غیره. 2
دیگر تمام سطوح دیگر - از جمله خاک ساخته شده، در معرض، ماسه، محصولات زراعی، درختان و غیره. 3

برای اینکه بتوانیم نقاط را به درستی برچسب گذاری کنیم، ابتدا یک کامپوزیت بدون ابر Sentinel-2 ایجاد کرده و آن را بارگذاری می کنیم. ما یک تصویرسازی با رنگ کاذب را انتخاب می کنیم که تفاوت بین آب، پوشش گیاهی و سطوح ساخته شده را برجسته می کند و به ما امکان می دهد نمونه های مناسب را به راحتی انتخاب کنیم.

// 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)');


شکل: کامپوزیت رنگ کاذب Sentinel-2

ما اکنون یک تصویر مرجع از سال هدف داریم که می تواند برای برچسب زدن نمونه ها برای طبقه بندی استفاده شود. ابتدا لایه ها را برای جمع آوری نمونه پیکربندی می کنیم. قسمت Geometry Imports را باز کنید و روی + لایه جدید کلیک کنید.


شکل: ایجاد یک لایه جدید

روی Edit Layer Properties (Gear Icon) در کنار لایه جدید کلیک کنید و آن را مطابق شکل زیر پیکربندی کنید. نام لایه را به صورت mangroves وارد کنید و نوع آن را به FeatureCollection تغییر دهید. روی + Property کلیک کنید و یک landcover ملک جدید با مقدار 1 اضافه کنید. رنگ را به رنگ سبز تغییر دهید و روی OK کلیک کنید.


شکل: پیکربندی خصوصیات لایه برای لایه حرا

به همین ترتیب، 2 لایه جدید برای کلاس های دیگر اضافه کنید. از مقدار landcover 2 برای آب و 3 برای دیگر استفاده کنید.


شکل: پیکربندی ویژگی های لایه برای (چپ) آب و (راست) لایه های دیگر

پس از پیکربندی لایه ها، می توانیم نمونه برداری را شروع کنیم. روی یک منطقه بزرگنمایی کنید و پیکسل های کلاس های مختلف را به صورت بصری شناسایی کنید. لایه mangroves را انتخاب کنید و از ابزار افزودن نشانگر برای رها کردن نقاط روی پیکسل‌های متعلق به جنگل‌های حرا استفاده کنید، که در ترکیب با رنگ کاذب Sentinel-2 ما به صورت سبز رنگ متوسط ظاهر می‌شوند (و همچنین می‌توانید نمای نقشه پایه ماهواره‌ای را برای مرجع بررسی کنید). هنگام طبقه بندی با مجموعه داده های Satellite Embedding به نکات زیادی نیاز ندارید. بلکه مهم تر است که نمونه هایی با کیفیت بالا انتخاب کنید که نشان دهنده تنوع در منطقه مورد علاقه شما باشد. برای این آموزش مجموعه 10 نمونه کافی است.


شکل: جمع آوری نمونه برای کلاس حرا

سپس، به لایه water بروید و نمونه‌هایی را برای پیکسل‌های آب سطحی جمع‌آوری کنید، که در کامپوزیت Sentinel-2 ما به دلیل جذب قوی نوارهای SWIR برای آب‌های آزاد تقریباً سیاه به نظر می‌رسند. فرآیند را برای لایه other تکرار کنید، نمونه هایی از آن را انتخاب کنید که به وضوح نه mangrove هستند و نه water .


شکل: جمع آوری نمونه برای آب و سایر طبقات

مجموعه نمونه آموزشی اکنون کامل شده است. ما می‌توانیم سه FeatureCollection را در یک مجموعه واحد از نقاط کنترل زمین (gcps) ادغام کنیم.

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

یک طبقه بندی کننده آموزش دهید

ما اکنون آماده آموزش یک طبقه بندی هستیم. مجموعه داده‌های Satellite Embedding را بارگذاری می‌کنیم، به کاشی‌ها برای سال و منطقه مورد علاقه خود فیلتر می‌کنیم، یک موزاییک ایجاد می‌کنیم و سپس از بردارهای جاسازی نمونه‌برداری می‌کنیم تا یک مجموعه داده آموزشی ایجاد کنیم.

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());

ویژگی های آموزشی دارای بردارهای embedding به عنوان خصوصیات ورودی و برچسب مرتبط به عنوان ویژگی کلاس هستند. اکنون می توانیم یک طبقه بندی کننده با این ویژگی های استخراج شده آموزش دهیم. ما می توانیم از بین انواع طبقه بندی کننده های موجود در Earth Engine انتخاب کنیم. یک انتخاب خوب برای طبقه بندی کم شات (طبقه بندی با استفاده از تعداد بسیار کمی مثال، مانند مثال ما)، k-Nearest Neighbors (kNN) است. در یک طبقه‌بندی kNN، از نمونه‌های برچسب‌گذاری‌شده برای «پارتیشن‌سازی» یا خوشه‌بندی فضای تعبیه‌شده استفاده می‌شود، و یک برچسب برای هر پیکسل بر اساس برچسب(های) نزدیکترین همسایه(های) آن در فضای جاسازی اختصاص می‌دهد. بیایید یک طبقه بندی کننده kNN را با داده های آموزشی خود آموزش دهیم.

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

طبقه بندی موزاییک تعبیه ماهواره

اکنون می‌توانیم از طبقه‌بندی‌کننده آموزش‌دیده برای پیش‌بینی کلاس در تمام پیکسل‌های موزاییک Satellite Embedding استفاده کنیم.

var classified = embeddingsImage.classify(classifier);

صادرات تصویر طبقه بندی شده به دارایی (اختیاری)

اگر می‌خواهید یک منطقه بزرگ را طبقه‌بندی کنید، Earth Engine به زمان بیشتری از آنچه در محیط محاسبات تعاملی مجاز است نیاز دارد. این یک روش خوب است که نتایج میانی را به عنوان دارایی صادر کنیم تا از محیط محاسبات دسته ای استفاده کنیم که محدودیت های طولانی تری برای اجرای کار دارد و منابع بیشتری دارد. این همچنین به غلبه بر زمان انجام محاسبات یا بیش از خطاهای حافظه کاربر هنگام کار با مناطق بزرگ کمک می کند. بیایید تصویر طبقه بندی شده را صادر کنیم.

// 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
});

کارهای صادراتی را شروع کنید و منتظر بمانید تا قبل از ادامه کار به پایان برسد. پس از اتمام کار صادرات، تصویر طبقه بندی شده را دوباره به کد خود وارد می کنیم.

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

طبقه بندی را تجسم کنید

چه طبقه بندی خود را به صورت تعاملی اجرا کرده باشید یا به یک دارایی صادر کرده باشید، اکنون یک متغیر طبقه بندی شده با نتایج طبقه بندی خود خواهید داشت.

// 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');


شکل: تصویر طبقه بندی شده تعبیه شده های ماهواره ای

یک نقشه حرا ایجاد کنید

ما یک تصویر طبقه بندی شده با 3 کلاس ایجاد کردیم. ما می توانیم پیکسل های طبقه بندی شده به عنوان Mangroves (کلاس 1) را استخراج کنیم تا یک نقشه حرا ایجاد کنیم.

// 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)');


شکل: نقشه حرا

نتایج را تایید کنید

برای ارزیابی نتایج خود، می‌توانیم آنها را با یک مجموعه داده با کیفیت بالا مقایسه کنیم: Global Mangrove Watch . این مجموعه داده از رادار دیافراگم مصنوعی باند L (SAR) از JAXA مشتق شده است و دارای نقشه‌های سالانه حرا از سال 1996 تا 2020 است. این مجموعه داده در کاتالوگ انجمن GEE موجود است، بنابراین می‌توانیم به راحتی آن را در Earth Engine بارگیری و تجسم کنیم.

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)');


شکل: (سمت چپ) نقشه حرا از جاسازی های ماهواره ای (راست) نقشه حرا از GMW

توجه داشته باشید که تطابق نزدیکی بین نتایج تماشای جهانی حرا و خروجی طبقه‌بندی کم شات مجموعه داده‌های Satellite Embedding وجود دارد. اگر نقشه پایه را به Satellite تغییر دهید، خواهید دید که طبقه بندی Satellite Embedding جزئیات دقیق تری از منظره گم شده در طبقه بندی جهانی تماشای حرا را نیز به تصویر کشیده است.

اسکریپت کامل این آموزش را در ویرایشگر کد موتور زمین امتحان کنید .