सैटलाइट एम्बेडिंग डेटासेट के बारे में जानकारी

GitHub पर बदलाव करें
समस्या की शिकायत करें
पेज का इतिहास
लेखक: spatialthoughts
यह ट्यूटोरियल, सैटेलाइट एम्बेडिंग डेटासेट पर आधारित ट्यूटोरियल की सीरीज़ का हिस्सा है. इसके अलावा, बिना निगरानी वाला क्लासिफ़िकेशन, निगरानी वाला क्लासिफ़िकेशन, रिग्रेशन, और समानता खोज के बारे में भी जानें.

Google का AlphaEarth Foundations, जियोस्पेशल एम्बेडिंग मॉडल है. इसे पृथ्वी की अलग-अलग जगहों के डेटासेट पर ट्रेन किया गया है. इस मॉडल को, हर साल की इमेज की टाइम-सीरीज़ पर चलाया गया है. साथ ही, इससे मिले एम्बेडिंग, Earth Engine में विश्लेषण के लिए तैयार डेटासेट के तौर पर उपलब्ध हैं. इस डेटासेट की मदद से, उपयोगकर्ता फ़ाइन-ट्यूनिंग वाले कई ऐप्लिकेशन या अन्य टास्क बना सकते हैं. इसके लिए, उन्हें कंप्यूटेशनल रूप से महंगे डीप लर्निंग मॉडल चलाने की ज़रूरत नहीं होती. इस वजह से, एक सामान्य डेटासेट तैयार होता है. इसका इस्तेमाल कई तरह के डाउनस्ट्रीम टास्क के लिए किया जा सकता है. जैसे,

  • कैटगरी
  • रिग्रेशन
  • बदलाव का पता लगाना
  • मिलते-जुलते प्रॉडक्ट खोजने की सुविधा

इस ट्यूटोरियल में, हम यह समझेंगे कि एंबेडिंग कैसे काम करती हैं. साथ ही, हम सैटलाइट एंबेडिंग डेटासेट को ऐक्सेस करने और उसे विज़ुअलाइज़ करने का तरीका जानेंगे.

एम्बेड करने की सुविधा के बारे में जानकारी

एंबेडिंग, बड़ी मात्रा में मौजूद जानकारी को कम सुविधाओं वाले सेट में कंप्रेस करने का एक तरीका है. ये सुविधाएं, काम के सिमैंटिक को दिखाती हैं. AlphaEarth Foundations मॉडल, सेंसर से मिली इमेज की टाइम सीरीज़ का इस्तेमाल करता है. इनमें Sentinel-2, Sentinel-1, और Landsat शामिल हैं. यह मॉडल, सिर्फ़ 64 नंबरों का इस्तेमाल करके, सोर्स और टारगेट के बीच की जानकारी को यूनीक तरीके से दिखाने का तरीका सीखता है. ज़्यादा जानने के लिए, पेपर पढ़ें. इनपुट डेटा स्ट्रीम में, कई सेंसर से मिली हज़ारों इमेज बैंड होते हैं. मॉडल, इस हाई डाइमेंशन वाले इनपुट को लेता है और इसे कम डाइमेंशन वाले डेटा में बदल देता है.

AlphaEarth Foundations के काम करने के तरीके को समझने के लिए, प्रिंसिपल कॉम्पोनेंट एनालिसिस (पीसीए) नाम की तकनीक का इस्तेमाल किया जाता है. पीसीए, मशीन लर्निंग ऐप्लिकेशन के लिए डेटा की डाइमेंशनलिटी को कम करने में भी मदद करता है. पीसीए एक स्टैटिस्टिकल तकनीक है. यह इनपुट बैंड के कई डेटा को कुछ मुख्य कॉम्पोनेंट में कंप्रेस कर सकती है. वहीं, AlphaEarth Foundations एक डीप-लर्निंग मॉडल है. यह मल्टी-सेंसर टाइम-सीरीज़ डेटासेट के हज़ारों इनपुट डाइमेंशन ले सकता है. साथ ही, यह 64-बैंड वाला ऐसा डेटा तैयार करना सीखता है जो उस पिक्सल की स्पेशल और टेंपोरल वैरिएबिलिटी को यूनीक तरीके से कैप्चर करता है.

एंबेडिंग फ़ील्ड, सीखी गई एम्बेडिंग का लगातार चलने वाला ऐरे या “फ़ील्ड” होता है. एंबेडिंग फ़ील्ड कलेक्शन में मौजूद इमेज, पूरे साल की स्पेस-टाइम ट्रैजेक्ट्री दिखाती हैं. इनमें 64 बैंड होते हैं. हर बैंड, एंबेडिंग डाइमेंशन के लिए होता है.


आंकड़ा: एम्बेड किए जा रहे फ़ील्ड से सैंपल किया गया n-डाइमेंशनल एम्बेडिंग वेक्टर

सैटलाइट एम्बेडिंग डेटासेट को ऐक्सेस करना

सैटलाइट इमेज के एम्बेडिंग का डेटासेट, 2017 से अब तक की इमेज का कलेक्शन है. जैसे, 2017, 2018, 2019…). हर इमेज में 64 बैंड होते हैं. इनमें हर पिक्सल, एम्बेडिंग वेक्टर होता है. यह वेक्टर, दिए गए साल के लिए मल्टी-सेंसर टाइम-सीरीज़ को दिखाता है.

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

देश या इलाका चुनें

आइए, सबसे पहले दिलचस्पी वाला कोई इलाका तय करते हैं. इस ट्यूटोरियल के लिए, हम भारत में कृष्णा राजा सागर (केआरएस) जलाशय के आस-पास का इलाका चुनेंगे. साथ ही, पॉलीगॉन को ज्यामिति वैरिएबल के तौर पर तय करेंगे. इसके अलावा, कोड एडिटर में मौजूद ड्राइंग टूल का इस्तेमाल करके, दिलचस्पी वाले क्षेत्र के चारों ओर एक पॉलीगॉन बनाया जा सकता है. यह इंपोर्ट में 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));

सैटलाइट से ली गई इमेज को 163,840 मीटर x 163,840 मीटर तक की टाइलों में बांटा जाता है. इसके बाद, इन्हें टाइल के लिए यूटीएम ज़ोन के प्रोजेक्शन में दिखाया जाता है. इस वजह से, हमें दिलचस्पी वाले इलाके को कवर करने वाली कई सैटेलाइट एम्बेडिंग टाइल मिलती हैं. एक से ज़्यादा टाइलों को मिलाकर एक इमेज बनाने के लिए, mosaic() फ़ंक्शन का इस्तेमाल किया जा सकता है. बैंड देखने के लिए, इमेज को प्रिंट करते हैं.

var embeddingsImage = filteredEmbeddings.mosaic();
print('Satellite Embedding Image', embeddingsImage);

आपको दिखेगा कि इमेज में 64 बैंड हैं, जिनके नाम A00, A01, … , A63 हैं. हर बैंड में, उस डाइमेंशन या ऐक्सिस में दिए गए साल के लिए एम्बेडिंग वेक्टर की वैल्यू होती है. स्पेक्ट्रल बैंड या इंडेक्स के उलट, अलग-अलग बैंड का कोई मतलब नहीं होता. इसके बजाय, हर बैंड, एम्बेडिंग स्पेस के एक ऐक्सिस को दिखाता है. डाउनस्ट्रीम ऐप्लिकेशन के लिए, इनपुट के तौर पर सभी 64 बैंड का इस्तेमाल किया जाएगा.


आंकड़ा: सैटलाइट एम्बेडिंग इमेज के 64 बैंड

सैटलाइट एम्बेडिंग डेटासेट को विज़ुअलाइज़ करना

जैसा कि हमने अभी देखा, हमारी इमेज में 64 बैंड हैं. सभी बैंड में मौजूद जानकारी को आसानी से विज़ुअलाइज़ करने का कोई तरीका नहीं है, क्योंकि हम एक बार में सिर्फ़ तीन बैंड का कॉम्बिनेशन देख सकते हैं.

हम एम्बेडिंग स्पेस के तीन ऐक्सिस को आरजीबी इमेज के तौर पर दिखाने के लिए, कोई भी तीन बैंड चुन सकते हैं.

var visParams = {min: -0.3, max: 0.3, bands: ['A01', 'A16', 'A09']};
Map.addLayer(embeddingsImage.clip(geometry), visParams, 'Embeddings Image');


आंकड़ा: एम्बेड किए जा रहे स्पेस के तीन ऐक्सिस का आरजीबी विज़ुअलाइज़ेशन

इस जानकारी को विज़ुअलाइज़ करने का एक और तरीका है. इसका इस्तेमाल, एक जैसी एम्बेडिंग वाले पिक्सल को ग्रुप करने के लिए किया जा सकता है. साथ ही, इन ग्रुपिंग का इस्तेमाल करके यह समझा जा सकता है कि मॉडल ने किसी लैंडस्केप की जगह और समय के हिसाब से अलग-अलग जानकारी को कैसे सीखा है.

हम बिना निगरानी वाली क्लस्टरिंग तकनीकों का इस्तेमाल करके, 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;
};

अब हम बड़ी एम्बेडिंग इमेज को क्लस्टर कर सकते हैं, ताकि एक जैसी एम्बेडिंग वाले पिक्सल के ग्रुप देखे जा सकें. इससे पहले, यह समझना ज़रूरी है कि मॉडल ने पूरे साल के लिए, हर पिक्सल की पूरी टाइम सीरीज़ कैप्चर की है. इसका मतलब है कि अगर दो पिक्सल की स्पेक्ट्रल वैल्यू सभी इमेज में एक जैसी हैं, लेकिन अलग-अलग समय पर हैं, तो उन्हें अलग किया जा सकता है.

यहां हमारी दिलचस्पी वाले इलाके की विज़ुअलाइज़ेशन इमेज दी गई है. इसे साल 2024 के लिए, बादलों से ढकी हुई Sentinel-2 इमेज से लिया गया है. ध्यान रखें कि फ़ाइनल एम्बेडिंग को समझने के लिए, सभी इमेज का इस्तेमाल किया गया है. इनमें Sentinel-2, Landsat 8/9, और कई अन्य सेंसर की इमेज शामिल हैं.


आंकड़ा: हमारे इलाके के लिए, Sentinel-2 की सालाना टाइम-सीरीज़

लैंडस्केप को तीन क्लस्टर में बांटकर, सैटलाइट एम्बेडिंग इमेज को विज़ुअलाइज़ करते हैं,

var cluster3 = getClusters(3);
Map.addLayer(cluster3.randomVisualizer().clip(geometry), {}, '3 clusters');


आंकड़ा: तीन क्लस्टर वाली सैटलाइट इमेज को एम्बेड करने की सुविधा

आपको दिखेगा कि नतीजे के तौर पर मिले क्लस्टर की सीमाएं बहुत साफ़ हैं. ऐसा इसलिए है, क्योंकि एम्बेडिंग में स्वाभाविक रूप से स्पेशल कॉन्टेक्स्ट शामिल होता है. एक ही ऑब्जेक्ट के पिक्सल में, एम्बेडिंग वेक्टर एक जैसे होने चाहिए. साथ ही, एक क्लस्टर में मुख्य जलाशय के आस-पास के ऐसे इलाके शामिल हैं जहां सीज़न के हिसाब से पानी होता है. ऐसा, एम्बेडिंग वेक्टर में कैप्चर किए गए टेंपोरल कॉन्टेक्स्ट की वजह से होता है. इससे हमें एक जैसे टेंपोरल पैटर्न वाले पिक्सल का पता लगाने में मदद मिलती है.

आइए, पिक्सल को पांच क्लस्टर में ग्रुप करके देखते हैं कि क्या हम क्लस्टर को और बेहतर बना सकते हैं.

var cluster5 = getClusters(5);
Map.addLayer(cluster5.randomVisualizer().clip(geometry), {}, '5 clusters');


आंकड़ा: पांच क्लस्टर वाली सैटलाइट इमेज को एम्बेड करना

हम क्लस्टर की संख्या बढ़ाकर, इमेज को ज़्यादा खास ग्रुप में बांट सकते हैं. यहां 10 क्लस्टर वाली इमेज दिखाई गई है.

var cluster10 = getClusters(10);
Map.addLayer(cluster10.randomVisualizer().clip(geometry), {}, '10 clusters');


आंकड़ा: 10 क्लस्टर वाली सैटलाइट इमेज को एम्बेड करना

हमें कई तरह की जानकारी मिल रही है. साथ ही, अलग-अलग तरह की फ़सलों को अलग-अलग क्लस्टर में ग्रुप किया जा रहा है. सैटलाइट एम्बेडिंग, जलवायु के वैरिएबल के साथ-साथ फ़सल की फ़िनोलॉजी को कैप्चर करती है. इसलिए, यह फ़सल के टाइप की मैपिंग के लिए सबसे सही है. अगले ट्यूटोरियल (बिना निगरानी वाला क्लासिफ़िकेशन) में, हम देखेंगे कि फ़ील्ड-लेवल के कुछ या बिना लेबल वाले सैटलाइट एम्बेडिंग डेटा की मदद से, फ़सल के टाइप का मैप कैसे बनाया जाता है.

Earth Engine Code Editor में, इस ट्यूटोरियल के लिए पूरी स्क्रिप्ट आज़माएं.