GeoAI และการเผยแพร่แผนที่

นักวิจัยตรวจชั้นข้อมูลต้นไม้และอาคารจากภาพถ่ายทางอากาศบนจอ
ภาพประกอบแนวคิดสร้างด้วย AI

บทฝึก M05 ใช้ AI ช่วยเสนอขอบวัตถุจากแผนที่ที่สร้างเสร็จแล้ว จากนั้นให้คนตรวจและเพิ่มความหมายก่อนส่งต่อเป็นข้อมูล GIS งานนี้เกิดหลังบินบนคอมพิวเตอร์หรือบริการประมวลผล แยกจาก Edge AI ที่ต้องตัดสินใจบนโดรนระหว่างบิน

เตรียมภาพและนิยามสิ่งที่จะนับ

ควรใช้ QGIS เปิด raster/vector และเข้าใจ CRS ได้ เตรียม orthomosaic RGB ที่มีสิทธิ์ใช้ พิกัดถูกต้อง และพื้นที่เล็กพอให้ตรวจทุกวัตถุด้วยตา นิยามเป้าหมายก่อน เช่น “ขอบหลังคาที่เห็นในภาพ” หรือ “เรือนยอดที่แยกเป็นต้นได้” เพราะนิยามต่างกันทำให้ผลประเมินต่างกัน

ติดตั้ง SamGeo ตาม คู่มือติดตั้งของผู้พัฒนา ใน environment แยก เลือก dependency และ runtime ที่เข้ากับระบบ Windows/Linux และฮาร์ดแวร์จริง บันทึก package version รุ่นโมเดล และชื่อ weights ที่ใช้ โมเดลต่างรุ่นอาจมีข้อกำหนดและทรัพยากรต่างกัน บทนี้ไม่อ้างว่าทดสอบความเร็วหรือการติดตั้งบนทุกเครื่องแล้ว

จากภาพสู่ mask แล้วจึงเป็นชั้นข้อมูล

GeoTIFF ถูกแบ่งพื้นที่ประมวลผล สร้าง mask ตรวจแก้โดยคน และแปลงเป็น vector พร้อมสถานะก่อนเผยแพร่

Segmentation แบ่งกลุ่มพิกเซลหรือขอบวัตถุ แต่ mask ที่แยกออกมาไม่ได้รับรองว่าเป็นชนิดวัตถุที่เราต้องการ SAM แบบสร้าง mask อัตโนมัติอาจแยกหลังคา เงา และส่วนของต้นไม้ออกเป็นหลายชิ้น การตั้งชื่อชั้นว่า “อาคารทั้งหมด” ทันทีจึงเพิ่มข้อสรุปที่กระบวนการยังไม่พิสูจน์

SamGeo รองรับภาพ GeoTIFF การใช้ prompts และการส่งออก vector หลายรูปแบบ เป็นเครื่องมือช่วยรักษาการเชื่อมกับพิกัดใน workflow แต่ความหมายทางภูมิศาสตร์และสถานะการยืนยันยังต้องออกแบบเพิ่ม คลังโครงการ SamGeo

แยกชั้นผลดิบกับผลตรวจแล้ว ใช้ฟิลด์ class_label, review_status, reviewer, image_date และ model_version เพื่อให้ผู้รับทราบว่าขอบมาจากอะไรและใครตรวจแล้ว

แบ่งภาพใหญ่โดยรักษาพิกัดและความอิสระของชุดตรวจ

การแบ่งเป็น tiles ช่วยจำกัดหน่วยความจำ แต่ต้องเก็บตำแหน่งต้นกำเนิด ขนาดพิกเซล CRS และขอบเขตของแต่ละ tile การตัดเป็น PNG โดยไม่เก็บการแปลงพิกัดทำให้ mask กลับไปวางบนโลกไม่ได้อย่างน่าเชื่อถือ

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

สำหรับการปรับ prompts/thresholds หรือฝึกโมเดล ให้แบ่งพื้นที่พัฒนากับพื้นที่ตรวจคนละบริเวณก่อนตัด tiles หาก tile ข้างกันหรือส่วนของวัตถุเดียวกันกระจายอยู่ทั้งสองชุด ผลทดสอบอาจดูดีเพราะมีข้อมูลใกล้เคียงรั่วเข้าไป สำหรับการประเมินข้ามพื้นที่จริง ควรมีพื้นที่หรือช่วงเวลาที่แยกจากการปรับงานด้วย

ลงมือ M05 บนคอมพิวเตอร์

  1. เปิด orthomosaic ใน QGIS ตัดพื้นที่เล็กเป็น GeoTIFF ที่ยังมี CRS และแบนด์ RGB ครบ กำหนดขอบเขตพื้นที่ที่ใช้ปรับผลกับพื้นที่ตรวจไว้ล่วงหน้า
  2. เปิด notebook สร้าง mask อัตโนมัติของ SamGeo ใน environment ที่ติดตั้ง ใช้ไฟล์ GeoTIFF ของตนเองแทนขั้นดาวน์โหลดแผนที่ตัวอย่าง และเลือก runtime ตามข้อกำหนดของ notebook
  3. บันทึกรุ่นโมเดล สร้าง mask และส่งออก vector ตามตัวอย่างของรุ่นนั้น ตรวจข้อความผิดพลาดและการใช้หน่วยความจำก่อนเพิ่มขนาดพื้นที่
  4. เปิด mask และ vector ซ้อนกับภาพต้นฉบับใน QGIS ตรวจมุมภาพอย่างน้อยสองมุมและวัตถุขนาดเล็กว่าพิกัดยังตรง
  5. เพิ่ม class และสถานะตรวจ แก้ขอบ ตัดวัตถุที่ไม่ใช่เป้าหมาย และรวม/แยกชิ้นตามนิยามที่เขียนไว้ เก็บผลดิบแยกจากผลแก้ไข
  6. ตรวจพื้นที่ที่กันไว้กับ annotation อ้างอิง รายงานทั้งวัตถุที่ตกหล่นและวัตถุเกิน ไม่เลือกเฉพาะภาพตัวอย่างที่ออกมาดี

หากรันไม่ได้เพราะทรัพยากรไม่พอ ให้ลดพื้นที่ทดลองหรือใช้ runtime ที่รองรับตามคู่มือ บันทึกข้อจำกัดนั้น ไม่ลดความละเอียดหลายครั้งจนวัตถุหายแล้วนำผลไปเปรียบเทียบกับงานเดิมโดยไม่ระบุการเปลี่ยน input

ตัวอย่างประเมิน: ขอบทับกันกับการนับเป็นคนละเรื่อง

สำหรับ mask เป้าหมายสองชุด IoU = พื้นที่ส่วนร่วม / พื้นที่รวม สมมติขอบอ้างอิง 100 m² ผล AI 110 m² และส่วนที่ทับกัน 80 m² จะได้พื้นที่รวม 130 m² และ IoU = 80/130 ≈ 0.615 นี่เป็นตัวอย่างสังเคราะห์ ไม่ใช่คะแนน SamGeo จากชุด Mygla

สมมติอีกงานมีวัตถุอ้างอิง 10 ชิ้น โมเดลให้ 12 ชิ้น และจับคู่ถูก 8 ชิ้นตามเกณฑ์ที่กำหนด จะได้ precision = 8/12 ≈ 0.667 และ recall = 8/10 = 0.80 ต้องประกาศกติกาจับคู่ก่อน เช่น IoU ขั้นต่ำและการจับคู่หนึ่งต่อหนึ่ง มิฉะนั้น mask หลายชิ้นที่ทับวัตถุเดียวอาจถูกนับเป็นความสำเร็จซ้ำ

คะแนนความมั่นใจหรือ predicted IoU ที่โมเดลให้ไม่ใช่ IoU ที่วัดกับ annotation อ้างอิงของงานนี้ และ mask ที่ขอบดีไม่ได้พิสูจน์ว่าป้ายชนิดวัตถุถูกต้อง ให้รายงานการตรวจขอบและการตรวจ class ตามคำถามที่ต้องใช้งาน

เตรียมเผยแพร่โดยรักษาความหมายของข้อมูล

เก็บฉบับวิเคราะห์ใน GeoPackage แล้ว export สำเนาที่ตรวจแล้วเป็น GeoJSON สำหรับชั้นเล็ก ตรวจพิกัด longitude/latitude ลำดับแกนและขอบเขตก่อนเปิดบนเว็บ ลด attributes ที่ไม่จำเป็น และคงเครดิต แหล่งภาพ วันที่ รุ่นโมเดล และสถานะตรวจไว้

MapLibre GL JS ใช้ GeoJSON เป็น source และเพิ่ม layer เพื่อแสดง polygon ได้ ตัวอย่างทางการแสดงการกำหนด source กับ style ของชั้นข้อมูล ซึ่งเป็นขั้นแสดงผล ไม่ได้ประมวลผล segmentation หรือยืนยันคุณภาพข้อมูลให้ MapLibre: Add a GeoJSON polygon

ภาพ orthomosaic ขนาดใหญ่ควรเตรียมเป็นรูปแบบและบริการ raster ที่ viewer รองรับ ส่วน vector ขนาดใหญ่อาจเหมาะกับ vector tiles มากกว่าโหลด GeoJSON ทั้งก้อน ต้องทดสอบความเร็วและการซูมบนอุปกรณ์เป้าหมายจริง รักษา master ฉบับเต็มไว้ เพราะการลดจุดเส้นขอบเพื่อแสดงผลอาจเปลี่ยนพื้นที่หากนำสำเนานั้นกลับไปวัด

สิ่งส่งมอบและข้อจำกัดที่ต้องเปิดเผย

ส่ง GeoTIFF พื้นที่ทดลองหรือข้อมูลอ้างถึง mask ดิบ vector ที่ตรวจแล้ว กติกา annotation ตารางผลประเมิน และบันทึก environment ผู้เรียนผ่านเมื่อผลวางตรงกับภาพ อธิบาย mask เกิน/ขาดได้ แยกคะแนนโมเดลจากคะแนนตรวจจริง และเปิดไฟล์ส่งออกกลับมาได้

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

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

แหล่งอ้างอิง

ตรวจเอกสาร 8 กันยายน 2569; ตัวอย่างคะแนนเป็นข้อมูลสังเคราะห์และไม่ใช่ benchmark

GeoAISamGeosegmentationGeoJSONMapLibreIoU