এম্বেডিংগুলি আর্থ পর্যবেক্ষণ ডেটা ব্যবহার করে অনুরূপ অবস্থান এবং বৈশিষ্ট্যগুলি সন্ধান করার একটি অনন্য সুযোগ উপস্থাপন করে। একটি এম্বেডিং ইমেজের অন্যান্য সমস্ত পিক্সেলের জন্য এম্বেডিং ভেক্টরের সাথে একটি রেফারেন্স অবস্থানের এমবেডিং ভেক্টরের তুলনা করে, আমরা এমন অবস্থানগুলি খুঁজে পেতে পারি যা রেফারেন্স অবস্থানের মতো একই বৈশিষ্ট্যগুলি প্রদর্শন করে। অনুশীলনে, এটি আমাদের আগ্রহের অঞ্চলে সহজেই বস্তু বা নির্দিষ্ট ধরনের সাইট খুঁজে পেতে দেয়।
এই টিউটোরিয়ালের জন্য, আমরা একটি অঞ্চলের সমস্ত শস্য সাইলো খুঁজে বের করার চেষ্টা করব। শস্যের সাইলো বা শস্য বিনগুলি হল লম্বা কাঠামো যা সাধারণত শস্যের বাল্ক স্টোরেজের জন্য ব্যবহৃত হয়। তারা খামার বা প্রক্রিয়াকরণ সুবিধা পাওয়া যায়. ঐতিহ্যগত রিমোট সেন্সিং পদ্ধতির সাথে এই কাঠামোর ম্যাপিং করা কঠিন হবে, এবং একটি কাস্টম অবজেক্ট সনাক্তকরণ মডেল প্রশিক্ষণের প্রয়োজন হবে। যেহেতু সাইলোগুলির একটি অনন্য আকৃতি, গঠন রয়েছে এবং সাধারণত অনুরূপ উপাদান দিয়ে তৈরি, সেহেতু স্যাটেলাইট এমবেডিং ইমেজে অনন্য এমবেডিং ভেক্টরের মাধ্যমে এগুলিকে উপস্থাপন করা হবে, যার ফলে আমরা একটি সাধারণ মিল অনুসন্ধানের মাধ্যমে তাদের সনাক্ত করতে পারি।
গ্রেইন সাইলোস (ছবি: উইকিপিডিয়া)
অনুসন্ধান অঞ্চল নির্বাচন করুন
এই টিউটোরিয়ালের জন্য, আমরা ফ্রাঙ্কলিন কাউন্টি, কানসাসের শস্য সাইলো ম্যাপ করব। আমরা একটি ফিল্টার প্রয়োগ করি এবং এই কাউন্টির জন্য বহুভুজ নির্বাচন করি।
var counties = ee.FeatureCollection('TIGER/2018/Counties');
// Select Franklin County, Kansas
var selected = counties
.filter(ee.Filter.eq('GEOID', '20059'));
var geometry = selected.geometry();
Map.centerObject(geometry);
Map.addLayer(geometry, {color: 'red'}, 'Search Area');
চিত্র: নির্বাচিত অঞ্চল
রেফারেন্স অবস্থান(গুলি) নির্বাচন করুন
আমরা এক বা একাধিক শস্য সাইলোর অবস্থান চিহ্নিত করে শুরু করি। কোড এডিটরে, আপনি স্যাটেলাইট বেসম্যাপ ব্যবহার করতে পারেন, যা বস্তুগুলি সনাক্ত করা সহজ করে তোলে।
// Use the satellite basemap
Map.setOptions('SATELLITE');
একবার আপনি আগ্রহের বস্তুর অবস্থান খুঁজে পেয়ে গেলে, একটি রেফারেন্স অবস্থান হিসাবে চিহ্নিত করতে একটি বিন্দু ড্রপ করার জন্য অঙ্কন সরঞ্জাম থেকে একটি মার্কার টুল ব্যবহার করুন।
চিত্র: একটি রেফারেন্স অবস্থান যোগ করা হচ্ছে
এমনকি একটি একক অবস্থান প্রায়শই যথেষ্ট, তবে আরও কয়েকটি উদাহরণ থাকা মিথ্যা ইতিবাচকতা হ্রাস করতে সহায়তা করে (এই ক্ষেত্রে, শস্য সিলো হিসাবে চিহ্নিত স্থানগুলি যেগুলি আসলে শস্য সিলো নয়)। আমরা জ্যামিতির ধরন পরিবর্তন করে ফিচার কালেকশন করব যাতে আমরা একাধিক রেফারেন্স পয়েন্ট যোগ করতে পারি। জ্যামিতির পাশে এডিট লেয়ার প্রোপার্টি বোতামে ক্লিক করুন। স্তরের নামটি samples
পরিবর্তন করুন এবং আমদানির ধরনটি FeatureCollection
হিসাবে সেট করুন। ওকে ক্লিক করুন।
চিত্র: নমুনা স্তর কনফিগার করা
মূল কোড এডিটর উইন্ডোতে ফিরে, আরও কয়েকটি প্রতিনিধি অবস্থানে পয়েন্ট যোগ করুন।
চিত্র: আরো রেফারেন্স অবস্থান যোগ করা হচ্ছে
এই টিউটোরিয়ালের জন্য, আমরা 3টি রেফারেন্স অবস্থান নির্বাচন করেছি। এগুলো স্যাটেলাইট এমবেডিং ইমেজ থেকে এমবেডিং ভেক্টর বের করতে ব্যবহার করা হবে।
একটি সময়কাল নির্বাচন করুন
একটি বছর বেছে নিন যার জন্য আমরা অনুসন্ধান চালাতে চাই।
var year = 2024;
var startDate = ee.Date.fromYMD(year, 1, 1);
var endDate = startDate.advance(1, 'year');
স্যাটেলাইট এমবেডিং ডেটাসেট ফিল্টার এবং মোজাইক করুন
আমরা স্যাটেলাইট এমবেডিং ডেটাসেট লোড করি, নির্বাচিত বছরের জন্য ছবি ফিল্টার করি এবং একটি মোজাইক তৈরি করি।
var embeddings = ee.ImageCollection('GOOGLE/SATELLITE_EMBEDDING/V1/ANNUAL');
var mosaic = embeddings
.filter(ee.Filter.date(startDate, endDate))
.mosaic();
নমুনা থেকে এমবেডিং ভেক্টর বের করুন
এই পয়েন্টগুলির সাথে যুক্ত এমবেডিং ভেক্টর পেতে আমরা রেফারেন্স অবস্থানে মোজাইক নমুনা করি। আমরা যে স্কেলটিতে এম্বেডিং ভেক্টরটি বের করতে এবং তুলনা করতে চাই সেটিও আমাদের নির্বাচন করতে হবে। স্যাটেলাইট এমবেডিং-এ এমবেডিংয়ের একটি খুব ব্যবহারিক বৈশিষ্ট্য হল যে সেগুলিকে রৈখিকভাবে সংমিশ্রণযোগ্য করার জন্য ডিজাইন করা হয়েছে, যার অর্থ দূরত্বের সম্পর্ক বজায় রেখে এবং অর্থ ব্যাখ্যা করার সময় এগুলি একত্রিত বা পিরামিড করা যেতে পারে। যদি আমরা 2x2 পিক্সেলের উপরে একটি স্থানিক গড় নিই, ফলাফলটি একটি বৃহত্তর নিম্ন-রেজোলিউশন পিক্সেলের এমবেডিংকে প্রতিনিধিত্ব করে। স্যাটেলাইট এম্বেডিংয়ের জন্য নেটিভ রেজোলিউশন হল 10 মিটার এবং শস্য সাইলোর মতো ছোট বস্তু সনাক্ত করার জন্য, এটি ব্যবহার করার জন্য একটি ভাল স্কেল হবে। কিন্তু আপনি যদি বড় আকারের বস্তু বা সাইট খুঁজছেন, তাহলে আপনি মোটা স্কেলে বস্তুর সাথে মিল করার জন্য একটি বড় মান (যেমন, 20 মি, 1000 মি) ব্যবহার করতে পারেন।
// Choose the scale
// You may choose a larger value for larger objects
var scale = 10;
// Extract the embedding vector from the samples
var sampleEmbeddings = mosaic.sampleRegions({
collection: samples,
scale: scale
});
সাদৃশ্য গণনা করুন
দুটি এমবেডিং ভেক্টরের মধ্যে ডট প্রোডাক্ট গণনা করা আমাদের তাদের সাদৃশ্য গণনা করতে দেয়। ডট পণ্য দুটি ভেক্টরের মাত্রা এবং তাদের মধ্যবর্তী কোণকে একটি একক সংখ্যায় কমিয়ে দেয় – এবং আমাদের ক্ষেত্রে, এমবেডিং ভেক্টরগুলি একক-দৈর্ঘ্য, ফলাফলটি হল ভেক্টরগুলির মধ্যে কোণ।
আমরা শুধু দুটি 64D, একক-দৈর্ঘ্য এম্বেডিং ভেক্টরকে গুণ করতে পারি এবং ভেক্টরগুলির মধ্যে কোণটির কোসাইন পেতে পণ্যগুলির যোগফল করতে পারি (ওরফে "ডট পণ্য")। আমরা প্রতি রেফারেন্স অবস্থানে 1টি চিত্র গণনা করি এবং ডট পণ্যের পিক্সেল মান সহ একটি চিত্র পেতে ফলাফলের গড় গ্রহণ করি।
// We compute the dot product between two embedding vectors
var bandNames = mosaic.bandNames();
var sampleDistances = ee.ImageCollection(sampleEmbeddings.map(function(f) {
var arrayImage = ee.Image(f.toArray(bandNames)).arrayFlatten([bandNames]);
var dotProduct = arrayImage.multiply(mosaic)
.reduce('sum')
.rename('similarity');
return dotProduct;
}));
// Calculate mean distance from all reference locations
var meanDistance = sampleDistances.mean();
1 এর কাছাকাছি একটি ডট পণ্য সহ পিক্সেলগুলিতে তুলনামূলকভাবে অনুরূপ এমবেডিং ভেক্টর রয়েছে (এগুলির মধ্যে কোণ 0 এর কাছাকাছি), যখন -1 এর কাছাকাছি ডট পণ্যগুলি ভেক্টরগুলির মধ্যে একটি বৃহত্তর বিচ্যুতি নির্দেশ করে (অর্থোগোনাল থেকে বিপরীত দিকে)। আমরা মানচিত্রে গড় দূরত্বের চিত্র যোগ করে ফলাফলগুলি কল্পনা করতে পারি।
var palette = [
'000004', '2C105C', '711F81', 'B63679',
'EE605E', 'FDAE78', 'FCFDBF', 'FFFFFF'
];
var similarityVis = {palette: palette, min: 0, max: 1};
Map.addLayer(meanDistance.clip(geometry), similarityVis,
'Similarity (bright = close)', false);
চিত্র: একটি রেফারেন্স পয়েন্টের চারপাশে পিক্সেলের সাদৃশ্য - উজ্জ্বল এলাকাগুলি আরও একই রকম
এক্সট্র্যাক্ট অবস্থান মিল
আমাদের পরবর্তী ধাপের জন্য, আমাদের একটি থ্রেশহোল্ড সংজ্ঞায়িত করতে হবে এবং আমাদের টার্গেট অবজেক্ট সহ অবস্থানগুলি বের করতে হবে। গ্রেইন সাইলো সহ সমস্ত পিক্সেলে এম্বেডিং ভেক্টর থাকবে রেফারেন্স এমবেডিং ভেক্টরের মতো এবং তাদের মধ্যে কোণটি 1 এর কাছাকাছি হবে। অঞ্চলের মধ্যে এই জাতীয় সমস্ত পিক্সেল খুঁজে পেতে আমরা একটি থ্রেশহোল্ড সংজ্ঞায়িত করি। সঠিক থ্রেশহোল্ড খোঁজার বিষয়টি নির্ভর করবে আপনি যে বস্তুটি খুঁজে বের করার চেষ্টা করছেন এবং স্কেলের উপর। আপনি বিভিন্ন মান নিয়ে পরীক্ষা করতে পারেন এবং দেখতে পারেন কোনটি আপনার অ্যাপ্লিকেশনের জন্য সবচেয়ে ভালো কাজ করে।
// Apply a threshold
var threshold = 0.90;
var similarPixels = meanDistance.gt(threshold);
ফলাফল থ্রেশহোল্ডের চেয়ে কম সাদৃশ্য মান সহ পিক্সেল সহ একটি বাইনারি চিত্র। আমরা এখন ফলস্বরূপ চিত্রটিকে বহুভুজে রূপান্তর করি।
// Mask 0 values using selfMask()
// to get polygons only for the matched pixels
var polygons = similarPixels.selfMask().reduceToVectors({
scale: scale,
eightConnected: false,
maxPixels: 1e10,
geometry: geometry
});
প্রতিটি বহুভুজ রেফারেন্স অবস্থানের সাথে মিল সহ একটি সাইটের প্রতিনিধিত্ব করে। মিলিত অবস্থানের প্রতিনিধিত্ব করতে আমরা সেন্ট্রোয়েড ব্যবহার করতে পারি।
// Extract the centroids of vectorized polygons
var predictedMatches = polygons.map(function(f) {
return f.centroid({maxError: 1});
});
একটি সম্পদে মিল রপ্তানি করুন (ঐচ্ছিক)
ভেক্টরাইজেশন হল আর্থ ইঞ্জিনে একটি মেমরি এবং কম্পিউট-ইনটেনসিভ অপারেশন। কম্পিউটেশন টাইম আউট বা টাইল ত্রুটি এড়াতে ফলাফলগুলি কল্পনা করার সময়, ফলাফলগুলিকে সম্পদ হিসাবে রপ্তানি করা একটি ভাল অনুশীলন ৷ একবার সম্পদ রপ্তানি হয়ে গেলে, এটি স্ক্রিপ্টে আমদানি করা যায় এবং কল্পনা করা যায়। এই পদ্ধতিটি নিশ্চিত করে যে আপনি সমস্যা ছাড়াই বৃহৎ এলাকায় অনুসন্ধান স্কেল করতে পারেন।
// Replace this with your asset folder
// The folder must exist before exporting
var exportFolder = 'projects/spatialthoughts/assets/satellite_embedding/';
var matchesExportFc = 'predicted_grain_silo_matches';
var matchesExportFcPath = exportFolder + matchesExportFc;
Export.table.toAsset({
collection: predictedMatches,
description: 'Predicted_Matches_Export',
assetId: matchesExportFcPath
});
রপ্তানি কাজগুলি শুরু করুন এবং আরও এগিয়ে যাওয়ার আগে এটি শেষ হওয়ার জন্য অপেক্ষা করুন৷ একবার রপ্তানির কাজ শেষ হয়ে গেলে, আমরা আমাদের কোডে আবার মিলগুলি আমদানি করি।
// Use the exported asset
var predictedMatches = ee.FeatureCollection(matchesExportFcPath);
ম্যাচগুলো ভিজ্যুয়ালাইজ করুন
আপনি ইন্টারেক্টিভভাবে মিলগুলি বের করেছেন বা একটি বৈশিষ্ট্য সংগ্রহে রপ্তানি করেছেন, আপনার কাছে এখন অনুসন্ধান এলাকার রেফারেন্স অবস্থানগুলির সাথে পূর্বাভাসিত মিলগুলির সাথে একটি predictedMatches
ম্যাচের পরিবর্তনশীল থাকবে৷ আসুন তাদের কল্পনা করা যাক।
Map.addLayer(predictedMatches, {color: 'cyan'}, 'Predicted Matches');
চিত্র: অনুমানকৃত শস্য সাইলো অবস্থান
ফলাফল যাচাই
ফলাফলগুলি মূল্যায়ন করতে, আপনি প্রতিটি ভবিষ্যদ্বাণী করা ম্যাচে জুম করে দেখতে পারেন যে সেই স্থানে একটি শস্য সাইলো আছে কিনা। আপনি দেখতে পাবেন যে এমন অনেক ম্যাচ রয়েছে যা সঠিকভাবে শস্য সিলো চিহ্নিত করেছে।
চিত্র: শস্য সাইলো সহ সঠিকভাবে চিহ্নিত সাইটগুলি
ফলাফল এছাড়াও কিছু মিথ্যা ইতিবাচক আছে. আপনি যদি লক্ষ্য করেন, আমাদের রেফারেন্স অবস্থানের সাথে মিলগুলির অনেকগুলি অনুরূপ বৈশিষ্ট্য রয়েছে এবং এইভাবে অনুরূপ এমবেডিং ভেক্টর রয়েছে।
চিত্র: মিথ্যা ইতিবাচক মিল
ফলাফল উন্নত করতে, আপনি রেফারেন্স অবস্থান এবং নির্বাচিত থ্রেশহোল্ড সামঞ্জস্য করতে পারেন।
আর্থ ইঞ্জিন কোড এডিটরে এই টিউটোরিয়ালটির জন্য সম্পূর্ণ স্ক্রিপ্টটি চেষ্টা করুন ।