ข้อมูลเบื้องต้นเกี่ยวกับชุดข้อมูลการฝังดาวเทียม

แก้ไขใน GitHub
รายงานปัญหา
ประวัติหน้าเว็บ
ผู้เขียน spatialthoughts
บทแนะนำนี้เป็นส่วนหนึ่งของชุดบทแนะนำเกี่ยวกับชุดข้อมูลการฝังดาวเทียม โปรดดู�0x0A>การจัดประเภทแบบไม่มีการกำกับดูแล การจัดประเภทแบบมีการกำกับดูแล การถดถอย และการค้นหาความคล้ายคลึงกัน

AlphaEarth Foundations ของ Google คือโมเดลการฝังเชิงพื้นที่ที่ได้รับการฝึกด้วยชุดข้อมูลการสังเกตการณ์โลก (EO) ที่หลากหลาย โมเดลนี้ทำงานกับอนุกรมเวลาของรูปภาพรายปี และการฝังที่ได้จะพร้อมใช้งานเป็นชุดข้อมูลที่พร้อมสำหรับการวิเคราะห์ใน Earth Engine ชุดข้อมูลนี้ช่วยให้ผู้ใช้สร้างแอปพลิเคชันการปรับแต่งหรืองานอื่นๆ ได้ไม่จำกัดจำนวนโดยไม่ต้องเรียกใช้โมเดล Deep Learning ที่ใช้การคำนวณสูง ผลลัพธ์ที่ได้คือชุดข้อมูลอเนกประสงค์ที่ใช้กับงานดาวน์สตรีมต่างๆ ได้ เช่น

  • การจัดประเภท
  • การถดถอย
  • การตรวจหาการเปลี่ยนแปลง
  • การค้นหาความคล้ายคลึง

ในบทแนะนำนี้ เราจะทำความเข้าใจวิธีการทำงานของการฝัง และเรียนรู้วิธีเข้าถึงและแสดงภาพชุดข้อมูลการฝังดาวเทียม

ทำความเข้าใจการฝัง

การฝังเป็นวิธีบีบอัดข้อมูลจำนวนมากให้เป็นชุดฟีเจอร์ขนาดเล็กที่แสดงถึงความหมายที่มีนัยสำคัญ โมเดลของ AlphaEarth Foundations ใช้ชุดรูปภาพอนุกรมเวลาจากเซ็นเซอร์ต่างๆ ซึ่งรวมถึง Sentinel-2, Sentinel-1 และ Landsat และเรียนรู้วิธีแสดงข้อมูลร่วมระหว่างแหล่งที่มาและเป้าหมายอย่างเป็นเอกลักษณ์ด้วยตัวเลขเพียง 64 ตัว (ดูข้อมูลเพิ่มเติมได้ในเอกสาร) สตรีมข้อมูลอินพุตมีแถบรูปภาพหลายพันแถบจากเซ็นเซอร์หลายตัว และโมเดลจะรับอินพุตที่มีมิติสูงนี้แล้วเปลี่ยนให้เป็นการแสดงที่มีมิติต่ำกว่า

โมเดลทางความคิดที่ดีในการทำความเข้าใจวิธีการทำงานของ AlphaEarth Foundations คือเทคนิคที่เรียกว่าการวิเคราะห์องค์ประกอบหลัก (PCA) PCA ยังช่วยลดมิติของข้อมูลสำหรับแอปพลิเคชันแมชชีนเลิร์นนิงด้วย แม้ว่า PCA จะเป็นเทคนิคทางสถิติและสามารถบีบอัดแถบอินพุตหลายสิบแถบให้เหลือเพียงไม่กี่องค์ประกอบหลัก แต่ AlphaEarth Foundations เป็นโมเดลดีปเลิร์นนิงที่สามารถรับมิติข้อมูลอินพุตหลายพันมิติของชุดข้อมูลอนุกรมเวลาแบบหลายเซ็นเซอร์ และเรียนรู้ที่จะสร้างการแสดงผลแบบ 64 แถบที่จับความแปรปรวนเชิงพื้นที่และเชิงเวลาของพิกเซลนั้นๆ ได้อย่างเป็นเอกลักษณ์

ฟิลด์การฝังคืออาร์เรย์ต่อเนื่องหรือ "ฟิลด์" ของการฝังที่เรียนรู้ รูปภาพในคอลเล็กชันฟิลด์การฝังแสดงถึงวิถีอวกาศ-เวลาที่ครอบคลุมทั้งปีและมี 64 แถบ (1 แถบสำหรับมิติการฝังแต่ละมิติ)


รูปภาพ: เวกเตอร์การฝัง n มิติที่สุ่มจากฟิลด์การฝัง

เข้าถึงชุดข้อมูลการฝังดาวเทียม

ชุดข้อมูลการฝังดาวเทียมคือคอลเล็กชันรูปภาพที่มีรูปภาพรายปีตั้งแต่ปี 2017 เป็นต้นไป (เช่น 2017, 2018, 2019…) รูปภาพแต่ละรูปมี 64 แถบ โดยแต่ละพิกเซลคือเวกเตอร์การฝังที่แสดงอนุกรมเวลาแบบหลายเซ็นเซอร์สำหรับปีที่กำหนด

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

เลือกภูมิภาค

มาเริ่มด้วยการกำหนดภูมิภาคที่สนใจกัน สำหรับบทแนะนำนี้ เราจะเลือกภูมิภาคบริเวณอ่างเก็บน้ำกฤษณะราชาสาคระ (KRS) ในอินเดีย และกำหนดรูปหลายเหลี่ยมเป็นตัวแปรเรขาคณิต หรือจะใช้เครื่องมือวาดในเครื่องมือแก้ไขโค้ดเพื่อวาดรูปหลายเหลี่ยมรอบภูมิภาคที่สนใจซึ่งจะบันทึกเป็นตัวแปร 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 ม. แต่ละไทล์ และแสดงในการฉายภาพสำหรับโซน UTM ของไทล์ ด้วยเหตุนี้ เราจึงได้ไทล์การฝังสภาพพื้นผิวจากดาวเทียมหลายรายการที่ครอบคลุมภูมิภาคที่สนใจ เราสามารถใช้ฟังก์ชัน mosaic() เพื่อรวมไทล์หลายรายการเป็นรูปภาพเดียว มาพิมพ์ภาพที่ได้เพื่อดูแถบกัน

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

คุณจะเห็นว่ารูปภาพมี 64 แถบชื่อ A00, A01, … , A63 แต่ละแถบจะมีค่าของเวกเตอร์การฝังสำหรับปีที่ระบุในมิติข้อมูลหรือแกนนั้น แถบแต่ละแถบไม่มีความหมายโดยอิสระ ซึ่งต่างจากแถบสเปกตรัมหรือดัชนี แต่ละแถบแสดงถึงแกนหนึ่งของพื้นที่ฝัง คุณจะใช้แถบความถี่ทั้ง 64 แถบเป็นอินพุตสำหรับแอปพลิเคชันดาวน์สตรีม


รูปภาพ: แถบ 64 แถบของรูปภาพการฝังดาวเทียม

แสดงภาพชุดข้อมูลการฝังดาวเทียม

ดังที่เราได้เห็นไปแล้ว รูปภาพมี 64 แถบ การแสดงภาพข้อมูลทั้งหมดที่มีอยู่ในแถบความถี่ทั้งหมดไม่ใช่เรื่องง่าย เนื่องจากเราดูได้เพียงชุดค่าผสมของแถบความถี่ 3 แถบในแต่ละครั้ง

เราเลือกแถบใดก็ได้ 3 แถบเพื่อแสดงภาพแกน 3 แกนของพื้นที่ฝังเป็นรูปภาพ RGB

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


รูปภาพ: การแสดงภาพ RGB ของ 3 แกนของพื้นที่การฝัง

อีกวิธีหนึ่งในการแสดงข้อมูลนี้คือการใช้ข้อมูลเพื่อจัดกลุ่มพิกเซลที่มีการฝังที่คล้ายกัน และใช้การจัดกลุ่มเหล่านี้เพื่อทำความเข้าใจว่าโมเดลได้เรียนรู้ความแปรปรวนเชิงพื้นที่และเชิงเวลาของภูมิประเทศอย่างไร

เราสามารถใช้เทคนิคการจัดกลุ่มแบบไม่มีการกำกับดูแลเพื่อจัดกลุ่มพิกเซลในพื้นที่ 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;
};

ตอนนี้เราสามารถจัดกลุ่มรูปภาพ Embedding ที่ใหญ่ขึ้นเพื่อดูกลุ่มพิกเซลที่มี Embedding คล้ายกันได้แล้ว ก่อนที่จะดำเนินการดังกล่าว คุณควรทราบว่าโมเดลได้บันทึกวิถีชั่วคราวทั้งหมดของแต่ละพิกเซลตลอดทั้งปี ซึ่งหมายความว่าหากพิกเซล 2 พิกเซลมีค่าสเปกตรัมที่คล้ายกันในรูปภาพทั้งหมด แต่ในช่วงเวลาที่ต่างกัน ก็สามารถแยกพิกเซลทั้ง 2 ออกจากกันได้

ด้านล่างนี้คือภาพการแสดงข้อมูลพื้นที่ที่เราสนใจซึ่งบันทึกโดยภาพ Sentinel-2 ที่มีการมาสก์เมฆสำหรับปี 2024 โปรดทราบว่าเราใช้รูปภาพทั้งหมด (รวมถึงรูปภาพจาก Sentinel-2, Landsat 8/9 และเซ็นเซอร์อื่นๆ อีกมากมาย) เพื่อเรียนรู้การฝังขั้นสุดท้าย


รูปภาพ: อนุกรมเวลาประจำปีของ Sentinel-2 สำหรับภูมิภาคของเรา

มาแสดงภาพรูปภาพการฝังดาวเทียมโดยแบ่งภูมิประเทศออกเป็น 3 คลัสเตอร์กัน

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


รูปที่ 1: รูปภาพการฝังดาวเทียมที่มี 3 คลัสเตอร์

คุณจะเห็นว่าคลัสเตอร์ที่ได้มีขอบเขตที่ชัดเจนมาก เนื่องจากการฝังมีบริบทเชิงพื้นที่โดยธรรมชาติ ซึ่งคาดว่าพิกเซลภายในออบเจ็กต์เดียวกันจะมีเวกเตอร์การฝังที่คล้ายกัน นอกจากนี้ กลุ่มหนึ่งยังมีพื้นที่ที่มีน้ำตามฤดูกาลรอบอ่างเก็บน้ำหลัก ซึ่งเป็นผลมาจากบริบทชั่วคราวที่บันทึกไว้ในเวกเตอร์การฝังที่ช่วยให้เราตรวจพบพิกเซลดังกล่าวที่มีรูปแบบชั่วคราวคล้ายกันได้

มาดูกันว่าเราจะปรับแต่งคลัสเตอร์เพิ่มเติมได้ไหมโดยจัดกลุ่มพิกเซลเป็น 5 คลัสเตอร์

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


รูปภาพ: การฝังภาพถ่ายจากดาวเทียมที่มี 5 คลัสเตอร์

เราสามารถดำเนินการต่อและปรับแต่งรูปภาพให้เป็นกลุ่มที่เฉพาะเจาะจงมากขึ้นได้โดยการเพิ่มจำนวนคลัสเตอร์ รูปภาพที่มี 10 คลัสเตอร์จะมีลักษณะดังนี้

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


รูปภาพ: การฝังภาพจากดาวเทียมที่มี 10 คลัสเตอร์

มีรายละเอียดมากมายที่กำลังเกิดขึ้น และเราเห็นว่ามีการจัดกลุ่มพืชผลประเภทต่างๆ เป็นคลัสเตอร์ต่างๆ เนื่องจากข้อมูลฝังตัวของดาวเทียมจะบันทึกปรากฏการณ์ทางพืชวิทยาของพืชผลพร้อมกับตัวแปรทางสภาพอากาศ จึงเหมาะอย่างยิ่งสำหรับการแมปประเภทพืชผล ในบทแนะนำถัดไป (การแยกประเภทแบบไม่มีการกำกับดูแล) เราจะดูวิธีสร้างแผนที่ประเภทพืชโดยใช้ข้อมูลการฝังดาวเทียมที่มีป้ายกำกับระดับฟิลด์เพียงเล็กน้อยหรือไม่มีเลย

ลองใช้สคริปต์ฉบับเต็มสำหรับบทแนะนำนี้ในโปรแกรมแก้ไขโค้ดของ Earth Engine