التصنيف الخاضع للإشراف باستخدام مجموعة بيانات التضمين عبر الأقمار الصناعية

التعديل على GitHub
الإبلاغ عن مشكلة
سجلّ الصفحات
المؤلفون: spatialthoughts
هذا البرنامج التعليمي هو جزء من سلسلة برامج تعليمية حول مجموعة بيانات Satellite Embedding، يمكنك أيضًا الاطّلاع على المقدمة والتصنيف غير الخاضع للإشراف والانحدار والبحث عن التشابه.

يمكن استخدام عمليات التضمين الخاصة بالأقمار الصناعية في مهام سير العمل العادية لتصنيف الاستشعار عن بُعد. تم تصميم عمليات التضمين خصيصًا للتفوّق في التعلّم من عدد قليل من الأمثلة، ما يعني أنّ هناك حاجة إلى عدد صغير نسبيًا من البيانات المصنّفة (من عشرات إلى مئات العيّنات) لتحقيق نتائج تصنيف عالية الجودة. بما أنّ عمليات التضمين تتضمّن سياقًا طيفيًا ومكانيًا وزمانيًا، يمكن للمصنّفات البسيطة، مثل خوارزمية الجار الأقرب (kNN) أو الغابة العشوائية، استخدام متجهات التضمين لتصنيف المناظر الطبيعية المعقّدة إلى فئات مستهدَفة.

في هذا البرنامج التعليمي، سنتعلّم كيفية استخدام أسلوب التعلّم الخاضع للإشراف باستخدام مصنّف kNN لتصنيف أشجار المانغروف باستخدام Satellite Embedding.

اختيار منطقة

لنبدأ بتحديد منطقة اهتمام. في هذا البرنامج التعليمي، سنختار منطقة على طول ساحل كينيا ونحدّد مضلّعًا كمتغيّر هندسي. بدلاً من ذلك، يمكنك استخدام "أدوات الرسم" في "محرّر الرموز" لرسم مضلّع حول المنطقة التي تهمّك وسيتم حفظها كمتغيّر هندسي في عمليات الاستيراد.

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


الشكل: اختيار المنطقة المهمة لتصنيف أشجار المانغروف

جمع عيّنات التدريب

لا تتطلّب مهام سير عمل التصنيف باستخدام Satellite Embedding سوى عدد قليل من العيّنات المصنَّفة لتحقيق نتائج دقيقة نسبيًا. بالنسبة إلى تصنيف الغطاء الأرضي، من الأسهل إسقاط النقاط وتصنيفها في 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

لدينا الآن صورة مرجعية من السنة المستهدَفة يمكن استخدامها لتصنيف العيّنات. أولاً، سنضبط الطبقات لجمع العيّنات. افتح قسم عمليات استيراد الأشكال الهندسية وانقر على + طبقة جديدة.


الشكل: إنشاء طبقة جديدة

انقر على "تعديل خصائص الطبقة" (رمز الترس) بجانب الطبقة الجديدة واضبطها كما هو موضّح أدناه. أدخِل اسم الطبقة على النحو التالي: mangroves، وغيِّر النوع إلى FeatureCollection. انقر على + موقع وأضِف موقعًا جديدًا landcover بالقيمة 1. غيِّر اللون إلى درجة من درجات اللون الأخضر وانقر على "حسنًا".


الشكل: ضبط خصائص طبقة أشجار المانغروف

وبالمثل، أضِف طبقتَين جديدتَين للصفوف الأخرى. استخدِم القيمة 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());

تتضمّن ميزات التدريب متّجهات التضمين كسمات إدخال والتصنيف المرتبط كسمة فئة. يمكننا الآن تدريب مصنّف باستخدام هذه الميزات المستخرَجة. يمكننا الاختيار من بين مجموعة متنوعة من المصنّفات المتاحة في Earth Engine. من الخيارات الجيدة للتصنيف باستخدام عدد صغير جدًا من الأمثلة (مثل مثالنا) خوارزمية الجار الأقرب. في تصنيف الجار الأقرب، تُستخدَم الأمثلة المصنَّفة لتقسيم مساحة التضمين أو تجميعها، مع تعيين تصنيف لكل بكسل استنادًا إلى تصنيفات الجيران الأقرب في مساحة التضمين. لنبدأ بتدريب مصنّف kNN باستخدام بيانات التدريب.

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

تصنيف فسيفساء صور القمر الصناعي المضمّنة

يمكننا الآن استخدام أداة التصنيف المدرَّبة للتنبؤ بالفئة في جميع وحدات البكسل في فسيفساء "تضمين بيانات الأقمار الصناعية".

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 فئات. يمكننا استخراج وحدات البكسل المصنّفة على أنّها أشجار مانغروف (الفئة 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. تم استخلاص مجموعة البيانات هذه من جهاز رادار ذي فتحة اصطناعية (SAR) بنطاق L من وكالة استكشاف الفضاء اليابانية (JAXA)، وتتضمّن خرائط سنوية لأشجار المانغروف من 1996 إلى 2020. تتوفّر مجموعة البيانات هذه في كتالوج "منتدى Earth Engine"، ما يتيح لنا تحميلها وعرضها بسهولة في 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)');

لاحظ أنّ هناك تطابقًا كبيرًا بين نتائج Global Mangrove Watch ونتائج التصنيف المنخفض الدقة لمجموعة بيانات Satellite Embedding. إذا بدّلت الخريطة الأساسية إلى "القمر الصناعي"، ستلاحظ أنّ تصنيف "تضمين القمر الصناعي" قد رصد أيضًا التفاصيل الدقيقة للمناظر الطبيعية غير المتوفّرة في تصنيف "مراقبة أشجار المانغروف العالمية".

جرِّب النص البرمجي الكامل لهذا الدليل التعليمي في "أداة تعديل الرموز البرمجية" في Earth Engine.