วิเคราะห์ความผิดปกติ
UAT 362 เทคโนโลยีระบบอากาศยานไร้คนขับเพื่ออุตสาหกรรม พลังงาน และโครงสร้างพื้นฐาน
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- อ่าน confusion matrix และคำนวณ precision, recall และ F1 ของระบบตรวจหาความผิดปกติ
- เลือก threshold ของโมเดลตามต้นทุนของการพลาดกับการเตือนผิด
- คำนวณอัตราสุ่มเฟรมจากวิดีโอให้ภาพซ้อนกันพอสำหรับการวิเคราะห์
- อธิบายข้อจำกัดของภาพ RGB และภาพความร้อนก่อนสรุปผล
ทำไมต้องรู้
การตรวจโซลาร์ฟาร์มหนึ่งครั้งได้ภาพหลายพันภาพ หรือวิดีโอหลายชั่วโมง คนดูทุกภาพไม่ไหว AI ช่วยคัดภาพที่น่าสงสัยได้ แต่ AI ทุกตัวทั้งพลาดและเตือนผิด คำถามสำคัญไม่ใช่ “AI แม่นไหม” แต่เป็น “พลาดกี่จุด เตือนผิดกี่จุด และเรารับได้แค่ไหน” ซึ่งขึ้นกับว่าการพลาดความเสียหายหนึ่งจุดแพงกว่าการส่งคนไปตรวจจุดที่ไม่มีอะไรเท่าใด
Confusion matrix
เมื่อเทียบผลของ AI กับการตรวจยืนยันของผู้เชี่ยวชาญ ได้สี่กลุ่ม
- TP (true positive) AI บอกผิดปกติ และผิดปกติจริง
- FP (false positive) AI บอกผิดปกติ แต่ปกติ คือการเตือนผิด
- FN (false negative) AI บอกปกติ แต่ผิดปกติจริง คือการพลาด
- TN (true negative) AI บอกปกติ และปกติจริง
ตามนิยามในเอกสารของ scikit-learn precision คือสัดส่วนที่เตือนแล้วถูก recall คือสัดส่วนของความผิดปกติจริงที่หาเจอ และ F1 คือค่าเฉลี่ยฮาร์มอนิกของทั้งสอง ในงานตรวจสินทรัพย์ TN มักมีจำนวนมหาศาล ค่า accuracy จึงดูสูงเสมอและไม่มีประโยชน์นัก
ตัวอย่างที่ 1 เลือก threshold จาก precision และ recall
ชุดทดสอบมีความผิดปกติจริง 50 จุดที่ผู้เชี่ยวชาญยืนยัน โมเดลตรวจจับให้คะแนนความมั่นใจแต่ละจุด
results = { # threshold: (TP, FP, FN)
0.3: (46, 30, 4),
0.5: (42, 12, 8),
0.7: (33, 4, 17),
}
for th, (tp, fp, fn) in results.items():
p, r = tp / (tp + fp), tp / (tp + fn)
f1 = 2 * p * r / (p + r)
print(f"threshold {th}: precision {p:.3f}, recall {r:.3f}, F1 {f1:.3f}, "
f"missed {fn}, false alarms {fp}")
threshold 0.3: precision 0.605, recall 0.920, F1 0.730, missed 4, false alarms 30
threshold 0.5: precision 0.778, recall 0.840, F1 0.808, missed 8, false alarms 12
threshold 0.7: precision 0.892, recall 0.660, F1 0.759, missed 17, false alarms 4
threshold 0.5 ได้ F1 สูงสุด แต่ไม่จำเป็นต้องเป็นตัวเลือกที่ดีที่สุด ถ้าการพลาดข้อต่อร้อนหนึ่งจุดอาจทำให้ไฟดับทั้งนิคม ทีมอาจเลือก 0.3 ที่พลาดเพียง 4 จุด แล้วให้คนคัดการเตือนผิด 30 จุดออก การเลือก threshold จึงเป็นการตัดสินใจทางธุรกิจและความปลอดภัย ไม่ใช่เพียงค่าทางสถิติ
จากวิดีโอสู่ภาพที่วิเคราะห์ได้
วิดีโอ 30 เฟรมต่อวินาทีมีภาพซ้ำกันมาก การวิเคราะห์ทุกเฟรมเปลืองเวลาและนับความผิดปกติจุดเดียวซ้ำหลายครั้ง จึงควรสุ่มเฟรมให้ภาพต่อเนื่องซ้อนกันพอดีกับที่ต้องการ
ตัวอย่างที่ 2 สุ่มเฟรมจากวิดีโอ
ภาพหนึ่งเฟรมครอบคลุมพื้นตามแนวบิน 20 m ต้องการซ้อนกัน 80% บิน 5 m/s วิดีโอ 30 fps
FOOT_ALONG, OVERLAP, SPEED, FPS = 20.0, 0.80, 5.0, 30
interval_s = FOOT_ALONG * (1 - OVERLAP) / SPEED
step = int(interval_s * FPS + 1e-9)
print(f"need one frame every {interval_s:.2f} s = one in every {step} frames at {FPS} fps")
print(f"a 10-minute video: {10 * 60 * FPS:,} frames -> {10 * 60 * FPS // step:,} frames to analyse")
need one frame every 0.80 s = one in every 24 frames at 30 fps
a 10-minute video: 18,000 frames -> 750 frames to analyse
การสุ่มเฟรมลดงานลงหลายสิบเท่า แต่ยังต้องตรวจความเบลอ (โมดูล 1) เพราะวิดีโอมักใช้ชัตเตอร์ช้ากว่าภาพนิ่ง และต้องรวมการตรวจพบที่ซ้ำกันในหลายเฟรมให้เป็นจุดเดียวตามตำแหน่ง
ข้อจำกัดของภาพ
หน่วยความรู้เรื่องข้อจำกัดของภาพ RGB และภาพความร้อนเตือนว่า สีบนภาพไม่ใช่ค่าที่วัด ภาพความร้อนที่ส่งออกเป็นภาพสีโดยไม่มีข้อมูลเรดิโอเมตริกอ่านอุณหภูมิไม่ได้ สิ่งที่ถูกบังไม่ปรากฏในภาพไม่ได้แปลว่าไม่มี และการเทียบภาพสองครั้งที่ใช้ชุดสีหรือสเกลต่างกันสรุปแนวโน้มไม่ได้ รายงานจึงต้องแยก “สิ่งที่เห็น” “สิ่งที่ถูกบัง” และ “สิ่งที่ยังไม่ทราบ”
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: ประเมินโมเดลตรวจหาความผิดปกติ
- เตรียมชุดภาพทดสอบที่ผู้เชี่ยวชาญติดป้ายความผิดปกติไว้ แยกจากชุดที่ใช้ฝึกโมเดล
- รันโมเดลตรวจจับ (เช่น จาก UAT 322) บันทึก TP, FP, FN ที่ threshold อย่างน้อยสามค่า
- ใช้โค้ดตัวอย่างที่ 1 คำนวณ precision, recall และ F1 แล้วเลือก threshold พร้อมเหตุผลด้านต้นทุนและความปลอดภัย
- สุ่มเฟรมจากวิดีโอจริงด้วยโค้ดตัวอย่างที่ 2 ตรวจว่าไม่มีช่วงขาดหาย
- เขียนรายงานที่แยกสิ่งที่เห็น สิ่งที่ถูกบัง และสิ่งที่ยังไม่ทราบ
ข้อผิดพลาดที่พบบ่อย
ระวัง
- รายงาน accuracy เมื่อภาพปกติมีมากกว่าภาพผิดปกติมาก
- ทดสอบด้วยภาพชุดเดียวกับที่ฝึก
- เลือก threshold จาก F1 อย่างเดียว โดยไม่คิดต้นทุนของการพลาด
- นับความผิดปกติซ้ำจากหลายเฟรม
- อ่านอุณหภูมิจากสีของภาพความร้อนที่ไม่มีข้อมูลวัด
สรุป
- Confusion matrix แยก TP, FP, FN, TN precision บอกความถูกของการเตือน recall บอกการหาเจอ
- threshold แลก precision กับ recall ต้องเลือกตามต้นทุนของการพลาดและการเตือนผิด
- สุ่มเฟรมจากวิดีโอตามการซ้อนภาพที่ต้องการ และรวมการตรวจพบซ้ำ
- สีไม่ใช่ค่าวัด และสิ่งที่ถูกบังไม่ได้แปลว่าไม่มี
แบบฝึกตรวจความเข้าใจ
- TP = 30, FP = 10, FN = 20 precision และ recall เท่าใด
- จากข้อ 1 F1 เท่าใด
- ถ้าการพลาดความเสียหายแพงมาก ควรเลือก threshold สูงหรือต่ำ
- footprint 15 m ซ้อน 75% บิน 5 m/s วิดีโอ 30 fps ต้องใช้ทุกกี่เฟรม
- ทำไม accuracy จึงทำให้เข้าใจผิดในงานตรวจสินทรัพย์
เฉลย
- ,
- ต่ำ เพื่อให้ recall สูง แล้วให้คนคัดการเตือนผิด
- s ดังนั้นทุก เฟรม
- ภาพปกติมีจำนวนมาก โมเดลที่ตอบว่าปกติทุกภาพก็ได้ accuracy สูง
สรุปสูตรสำคัญ
| Precision และ recall | |
| F1 | |
| ช่วงเวลาระหว่างเฟรมที่ใช้ |
แหล่งอ้างอิงหลัก
- scikit-learn developers. Metrics and scoring: Quantifying the quality of predictions (scikit-learn 1.9). link
- Szeliski, R. (2022). Computer vision: Algorithms and applications (2nd ed.). Springer. link
- OpenCV. OpenCV documentation. link
- Redmon, J., Divvala, S., Girshick, R., & Farhadi, A. (2016). You only look once: Unified, real-time object detection. In Proceedings of CVPR 2016 (pp. 779–788). link
- Memari, M., Shakya, P., Shekaramiz, M., Seibi, A. C., & Masoum, M. A. S. (2024). Review on the advancements in wind turbine blade inspection: Integrating drone and deep learning technologies for enhanced defect detection. IEEE Access, 12, 33236–33282. link
- O'Connor, J., Smith, M. J., & James, M. R. (2017). Cameras and settings for aerial surveys in the geosciences: Optimising image data. Progress in Physical Geography, 41(3), 325–344. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการเข้มข้นในแล็บและภาคสนาม บันทึกผลลงสมุดปฏิบัติการ
หลักฐานการเรียนรู้: สมุดปฏิบัติการที่อาจารย์ลงนาม