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