หน้าแรก ดูโปรเจกต์ทั้งหมด
Easy

โปรเจกต์ ทำนาย Air Pollution ด้วย Computer Vision

ฉันสร้างระบบ AI ต้นทุนต่ำที่ทำนาย Air Quality จากภาพถ่ายเพียงใบเดียว โปรเจกต์นี้แสดงให้เห็นว่า AI on the edge ช่วยให้การทำ Environmental Monitoring มีราคาประหยัด ปรับขยายได้ และทุกคนเข้าถึงได้

โปรเจกต์ ทำนาย Air Pollution ด้วย Computer Vision

วิดีโอสาธิต

Video

▶ กดเพื่อดูวิดีโอสาธิตโปรเจกต์

2,921 การดู
4 ถูกใจ

รายการอุปกรณ์และเครื่องมือ

1x 4GB or Larger Micro SD Card
-
1x 18650 li-ion battery
-
1x UNIHIKER K10
-

แอปพลิเคชันและแพลตฟอร์ม

รายละเอียดและวิธีทำ

เมื่อเร็วๆ นี้ ผมได้โพสต์วิดีโอสอนเกี่ยวกับโปรเจกต์นี้บน YouTube

บทนำ

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

สิ่งที่ทำให้น่าตื่นเต้นคือทุกอย่างทำงานแบบ locally บนคอมพิวเตอร์บอร์ดเดี่ยวขนาดจิ๋วที่เรียกว่า UNIHIKER K10 โดยไม่มีการใช้ cloud servers หรือการประมวลผลภายนอก — เป็นเพียงโมเดล AI น้ำหนักเบาที่ทำงานบนอุปกรณ์โดยตรง

ในบทความนี้ ผมจะพาคุณไปดูขั้นตอนการสร้างระบบนี้ทีละขั้นตอน เราจะเริ่มจากการเก็บรวบรวมข้อมูล (data collection) ไปจนถึงการฝึกโมเดล (training the model) จากนั้นจะครอบคลุมถึงการนำไปใช้งาน (deployment) บน K10 และสุดท้ายคือการประเมินผลลัพธ์ ผมจะแบ่งปันความท้าทายที่ผมพบ ข้อจำกัดที่ต้องยอมรับ และไอเดียบางอย่างเกี่ยวกับวิธีการปรับปรุงโปรเจกต์นี้ในอนาคต

นี่ไม่ใช่แค่บทความสอน DIY ทั่วไป แต่มันคือโปรเจกต์ที่เชื่อมโยงเทคนิค TinyML ล้ำสมัยเข้ากับหนึ่งในปัญหาที่เร่งด่วนที่สุดของโลก นั่นคือ มลพิษทางอากาศ นอกจากนี้ผมจะอธิบายเกี่ยวกับวิทยาศาสตร์ของคุณภาพอากาศ มลพิษที่ส่งผลต่อสุขภาพของเรา และการทำงานของดัชนีคุณภาพอากาศของสหรัฐฯ (AQI) เป้าหมายของผมคือเมื่ออ่านจบ คุณจะไม่เพียงแต่เข้าใจวิธีการสร้างระบบนี้ แต่ยังเข้าใจว่าทำไมมันถึงมีความสำคัญ

อนึ่ง นี่เป็นโปรเจกต์ open-source คุณสามารถหา Code, ชุดข้อมูล (datasets) และไฟล์สนับสนุนทั้งหมดได้ใน GitHub repository นี้

เมื่อคุณทราบแล้วว่าโปรเจกต์นี้เกี่ยวกับอะไร เรามาเริ่มดูเรื่องราวการสร้างกันเลยครับ

อุปกรณ์

ก่อนจะเจาะลึกรายละเอียดการฝึกโมเดล AI และการนำไปใช้กับ microcontrollers เรามาพูดถึง Hardware และเครื่องมือที่ทำให้โปรเจกต์นี้เป็นจริงได้ หัวใจสำคัญของมันคือ UNIHIKER K10 ซึ่งเป็นคอมพิวเตอร์บอร์ดเดี่ยวที่พัฒนาโดย DFRobot อุปกรณ์ตัวเล็กนี้อาจดูไม่มีอะไรในตอนแรก แต่มันอัดแน่นไปด้วยประสิทธิภาพสำหรับแอปพลิเคชัน TinyML (Tiny Machine Learning)

K10 ถูกสร้างขึ้นโดยใช้ชิป ESP32-S3 Xtensa LX7 และมาพร้อมกับ:

  1. 16 MB flash memory
  2. 512 KB SRAM
  3. กล้อง 2 MP
  4. จอแสดงผลสีขนาด 2.8 นิ้ว ความละเอียด 240×320
  5. 2.4G Wi-Fi
  6. Bluetooth 5.0
  7. ช่องใส่ MicroSD card
  8. โมเดล Demo ที่ติดตั้งมาล่วงหน้า (การตรวจจับใบหน้า, คำสั่งเสียง และอื่นๆ)
  9. รองรับสภาพแวดล้อมที่หลากหลาย: Arduino IDE, Thonny IDE, PlatformIO และ Mind+

สรุปสั้นๆ คือ มันเป็น all-in-one solution สำหรับการทดลอง AI ที่ edge สิ่งที่ผมชอบที่สุดคือมันช่วยให้ Maker อย่างเราสามารถทดลองได้โดยไม่ต้องใช้ shield, module หรือการเดินสายที่ซับซ้อน ทุกอย่างมีมาให้พร้อมบนบอร์ดแล้ว

ผมได้รับ K10 ผ่านทาง การประกวด DFRobot Explore AI with K10 ซึ่งเป็นโปรแกรมที่จะแจกจ่ายบอร์ด 1,000 บอร์ดให้กับ Maker และนักการศึกษาทั่วโลก หากคุณมีไอเดีย AI ที่สร้างสรรค์ ผมขอแนะนำให้ลองสมัครดูครับ คุณจะประหลาดใจว่าบอร์ดเล็กๆ นี้ทำอะไรได้บ้าง

สำหรับชุดอุปกรณ์ที่ผมใช้ มีดังนี้:

  1. บอร์ด UNIHIKER K10
  2. MicroSD card (ผมใช้การ์ด 8GB ทั่วไป แต่ความจุที่มากกว่านี้ก็ใช้ได้)
  3. แหล่งจ่ายไฟ (แบตเตอรี่ที่ใช้งานร่วมกันได้สำหรับการใช้งานแบบพกพา)

เพียงเท่านี้ครับ ไม่มีการต่อ Hardware ที่ซับซ้อน มีเพียงบอร์ด พื้นที่จัดเก็บข้อมูล และแหล่งจ่ายไฟเท่านั้น

และแน่นอนว่า Code และไฟล์สำหรับการฝึกโมเดลทั้งหมดเป็น open-source บน GitHub repository นี้

เมื่อเตรียมอุปกรณ์พร้อมแล้ว มาลองดูว่าทำไมผมถึงสร้างโปรเจกต์นี้ขึ้นมา และทำไมคุณภาพอากาศถึงมีความสำคัญมากขนาดนี้

ทำไมคุณภาพอากาศถึงมีความสำคัญ

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

มลพิษทางอากาศไม่ใช่แค่ความท้าทายด้านสิ่งแวดล้อม แต่มันคือวิกฤตสาธารณสุข จากข้อมูลขององค์การอนามัยโลก (WHO) ระบุว่า 99% ของประชากรโลกหายใจเอาอากาศที่เกินขีดจำกัดความปลอดภัยเข้าไป การสัมผัสนี้ส่งผลให้มีการเสียชีวิตก่อนวัยอันควรประมาณ 7 ล้านคนในทุกปี ส่วนใหญ่เกิดขึ้นในเอเชียตะวันออกเฉียงใต้และแปซิฟิกตะวันตก แต่ไม่มีภูมิภาคใดที่จะรอดพ้นไปได้

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

ด้วยการตระหนักถึงความเร่งด่วนของปัญหานี้ สมัชชาใหญ่แห่งสหประชาชาติจึงได้ประกาศให้วันที่ 7 กันยายน เป็น วันอากาศสะอาดสากลเพื่อท้องฟ้าสีคราม (International Day of Clean Air for Blue Skies) ในปี 2019 ตั้งแต่นั้นมา รัฐบาล NGO และนักวิจัยได้ใช้ในวันนี้เพื่อเน้นย้ำถึงแนวทางแก้ไขที่สร้างสรรค์และผลักดันนโยบายที่จะนำเราไปสู่โลกที่มีสุขภาพดีขึ้น

แต่ประเด็นสำคัญคือ เพื่อที่จะแก้ไขมลพิษทางอากาศ เราจำเป็นต้องวัดค่ามันอย่างแม่นยำก่อน ท้ายที่สุดแล้ว เราจะรู้ได้อย่างไรว่าเรากำลังหายใจเอาอากาศที่สะอาดหรือเป็นอันตรายเข้าไปหากเราไม่มีข้อมูลที่เชื่อถือได้?

วิธีการดั้งเดิมในการวัดคุณภาพอากาศ

สถานีตรวจสอบอากาศทั่วไปจะใช้ Hardware เฉพาะทางเพื่อตรวจจับมลพิษแบบ real-time ระบบเหล่านี้มีความแม่นยำสูงมาก แต่ก็มีราคาแพง เทอะทะ และซับซ้อน โดยทั่วไปจะอาศัยเครือข่ายของ Sensor ที่วัดมลพิษต่างกัน:

  1. ฝุ่นละออง (Particulate Matter - PM): อนุภาคของแข็งหรือละอองของเหลวขนาดเล็กที่ลอยอยู่ในอากาศ ที่อันตรายที่สุดคือ PM2.5 ซึ่งมีขนาดเล็กพอที่จะแทรกซึมลึกเข้าไปในปอดและเข้าสู่กระแสเลือดได้ ระดับ PM เป็นหนึ่งในตัวบ่งชี้มลพิษทางอากาศที่ชัดเจนที่สุด
  2. คาร์บอนมอนอกไซด์ (Carbon Monoxide - CO): ก๊าซที่ไม่มีสีและไม่มีกลิ่นซึ่งเกิดจากการเผาไหม้ที่ไม่สมบูรณ์ (เช่น เครื่องยนต์รถยนต์, ไฟป่า, การเผาไหม้เชื้อเพลิง) ในความเข้มข้นสูง CO อาจทำให้เสียชีวิตได้ จนได้รับฉายาว่า "ฆาตกรเงียบ"
  3. โอโซน (Ozone - O₃): ในระดับพื้นดิน โอโซนจะเกิดขึ้นเมื่อแสงแดดทำปฏิกิริยากับมลพิษ เช่น ไนโตรเจนออกไซด์ (NOx) และสารประกอบอินทรีย์ระเหยง่าย (VOCs) ต่างจากชั้นโอโซนที่ปกป้องโลกในชั้นบรรยากาศ โอโซนในระดับพื้นดินจะระคายเคืองต่อปอดและดวงตา
  4. ไนโตรเจนไดออกไซด์ (Nitrogen Dioxide - NO₂): ก๊าซสีน้ำตาลแดงจากการเผาไหม้เชื้อเพลิงฟอสซิล การสัมผัสในระยะยาวจะเพิ่มความเสี่ยงต่อโรคหอบหืดและโรคทางเดินหายใจอื่นๆ โดยเฉพาะในเด็กและผู้สูงอายุ
  5. ซัลเฟอร์ไดออกไซด์ (Sulfur Dioxide - SO₂): ก๊าซที่มีกลิ่นฉุนซึ่งปล่อยออกมาจากการเผาไหม้เชื้อเพลิงที่มีกำมะถันสูงและการปะทุของภูเขาไฟ เมื่อผสมกับไอน้ำจะเกิดเป็นกรดซัลฟิวริก ซึ่งเป็นส่วนประกอบสำคัญของฝนกรด

ในการวัดมลพิษเหล่านี้ สถานีจะใช้เทคนิคต่างๆ เช่น laser scattering (สำหรับฝุ่นละออง) และ non-dispersive infrared sensors (สำหรับ CO₂) บริษัทอย่าง IQAir ถึงกับสร้าง เครือข่ายการตรวจสอบทั่วโลก ที่ทุกคนสามารถตรวจสอบระดับมลพิษแบบ real-time ได้

แม้ว่าระบบเหล่านี้จะมีประสิทธิภาพ แต่ก็ใช้ทรัพยากรสูงมาก ต้องการการบำรุงรักษา การปรับเทียบ (calibration) และการลงทุนอย่างต่อเนื่อง ทำให้ยากต่อการขยายผลให้ครอบคลุมทุกที่

ทางเลือกด้วย AI

นี่คือจุดที่ Artificial Intelligence เข้ามามีบทบาท ในช่วงไม่กี่ปีที่ผ่านมา นักวิจัยเริ่มตั้งคำถามว่า: จะเป็นอย่างไรถ้าเราสามารถประมาณค่าคุณภาพอากาศได้โดยใช้รูปภาพท้องฟ้า?

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

ตัวอย่างเช่น ในปี 2025 ทีมนักวิทยาศาสตร์ จากจีน, เกาหลีใต้, โปแลนด์, คาซัคสถาน และทาจิกิสถาน ได้เผยแพร่ระบบที่ใช้ Deep Learning เพื่อวิเคราะห์ฟีดวิดีโอและประมาณค่าคุณภาพอากาศ โมเดลของพวกเขามีความแม่นยำถึง 94% โดยมี latency น้อยกว่าสองวินาที ทำให้เหมาะสำหรับการใช้งานแบบ real-time

อีกหนึ่งโปรเจกต์จากแคนาดา แสดงให้เห็นว่ากล้องจราจรที่มีอยู่สามารถนำมาประยุกต์ใช้เพื่อประมาณค่าระดับมลพิษ เช่น PM2.5, NO₂ และ O₃ ได้ ลองจินตนาการถึงทั้งเมืองที่ตรวจสอบคุณภาพอากาศผ่านกล้องที่ติดตั้งตามสี่แยกอยู่แล้ว โดยไม่ต้องติดตั้ง Sensor เพิ่มเติม

วิธีการเหล่านี้ไม่ได้มีไว้เพื่อแทนที่วิธีการดั้งเดิมทั้งหมด แต่เป็นเครื่องมือที่มีต้นทุนต่ำ ขยายผลได้ง่าย และเป็นส่วนเสริมสำหรับการตรวจสอบ

ด้วยแรงบันดาลใจจากงานวิจัยเหล่านี้ ผมจึงอยากทดลองแนวคิดนี้ด้วยตัวเอง ผมจะสามารถฝึกโมเดล AI ให้จำแนกภาพถ่ายทิวทัศน์ตามดัชนีคุณภาพอากาศของสหรัฐฯ (AQI) ได้หรือไม่? และผมจะสามารถรันมันบนบอร์ดเล็กๆ อย่าง UNIHIKER K10 ได้หรือไม่?

นั่นคือความท้าทายที่ผมตั้งใจจะสำรวจครับ

ภาพรวมของโปรเจกต์

แนวคิดเบื้องหลังโปรเจกต์นี้เรียบง่ายมาก: ใช้ Artificial Intelligence เพื่อวิเคราะห์ภาพถ่ายทิวทัศน์และประมาณค่าดัชนีคุณภาพอากาศ (AQI) แทนที่จะพึ่งพา Sensor ราคาแพง ระบบจะจำแนกรูปภาพและรายงานว่าอากาศอยู่ในเกณฑ์ดี, ปานกลาง, ไม่ดีต่อสุขภาพ หรืออันตราย โดยอิงตาม มาตรฐาน AQI ของสหรัฐฯ

หัวใจสำคัญของโปรเจกต์นี้ประกอบด้วยองค์ประกอบหลัก 3 ส่วน:

  1. การถ่ายภาพ (Image Capture) - บอร์ด UNIHIKER K10 มีกล้องในตัวที่สามารถถ่ายภาพทิวทัศน์รอบๆ ได้
  2. การอนุมานด้วย AI (AI Inference) - โมเดล TinyML ที่ฝึกฝนจากรูปภาพท้องฟ้าและทิวทัศน์ที่มีป้ายกำกับ (labeled) จะทำงานโดยตรงบน K10 โมเดลนี้จะประมวลผลรูปภาพและทำนายหมวดหมู่ AQI
  3. การตอบสนองต่อผู้ใช้ (User Feedback) - ผลลัพธ์จะถูกแสดงบนหน้าจอของ K10 ทันที โดยมีตัวบ่งชี้คุณภาพอากาศที่ชัดเจนและแยกตามสี

สิ่งที่ทำให้การสร้างครั้งนี้น่าตื่นเต้นคือมันทำงานแบบ offline ทั้งหมด ไม่จำเป็นต้องใช้ cloud computing หรือ server ภายนอก ทุกอย่างตั้งแต่การถ่ายภาพไปจนถึงการประมวลผลด้วย AI เกิดขึ้นบน microcontroller เอง

สิ่งที่คุณจะได้เรียนรู้

จากการทำตามบทความนี้ คุณจะได้รับประสบการณ์ลงมือทำจริงในด้าน:

  1. การใช้ UNIHIKER K10 สำหรับโปรเจกต์ computer vision
  2. การฝึกฝนและนำโมเดล TensorFlow Lite ไปใช้งานสำหรับ embedded AI
  3. การสร้างแอปพลิเคชันที่ผสมผสาน วิทยาศาสตร์สิ่งแวดล้อมเข้ากับ edge computing

โปรเจกต์นี้ไม่ได้มีไว้เพื่อแทนที่ระบบตรวจสอบคุณภาพอากาศระดับมืออาชีพ แต่มันเป็น การพิสูจน์แนวคิด (proof of concept) ที่แสดงให้เห็นว่า AI สามารถนำมาประยุกต์ใช้อย่างสร้างสรรค์กับปัญหาในโลกแห่งความเป็นจริงได้อย่างไร ลองคิดว่ามันเป็นการ ทดลองแบบ DIY ที่เชื่อมโยงความตระหนักด้านสิ่งแวดล้อม, AI และวัฒนธรรม Maker เข้าด้วยกัน

การเก็บรวบรวมข้อมูล

โปรเจกต์ Machine Learning ใดๆ จะดีได้เท่ากับชุดข้อมูลที่มี และโปรเจกต์นี้ก็ไม่มีข้อยกเว้น โชคดีที่ผมไม่ต้องเริ่มจากศูนย์ หลังจากค้นหาอยู่พักหนึ่ง ผมพบ ชุดข้อมูลแบบเปิด (open dataset) ที่ยอดเยี่ยมซึ่งเป็นรูปภาพทิวทัศน์เมืองจากอินเดียและเนปาล

ชุดข้อมูลนี้สร้างขึ้นโดยนักวิจัย Adarsh Rouniyar, Sapdo Utomo, Dr. John A., และ Dr. Pao-Ann Hsiung ซึ่งรวบรวมรูปภาพเมืองในอินเดียและเนปาลมากกว่า 12,000 ภาพ และติดป้ายกำกับตาม ดัชนีคุณภาพอากาศของสหรัฐฯ (AQI)

นั่นหมายความว่าทุกรูปถ่ายมีการระบุหมวดหมู่ไว้แล้ว เช่น:

  1. ดี (Good)
  2. ปานกลาง (Moderate)
  3. ไม่ดีต่อสุขภาพสำหรับกลุ่มที่อ่อนไหว (Unhealthy for Sensitive Groups)
  4. ไม่ดีต่อสุขภาพ (Unhealthy)
  5. ไม่ดีต่อสุขภาพอย่างมาก (Very Unhealthy)
  6. อันตราย (Severe)

นี่คือการกระจายตัวของคลาสในชุดข้อมูล:

การกระจายตัวของคลาส

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

ทำไมชุดข้อมูลนี้ถึงมีความสำคัญ

ชุดข้อมูลอินเดีย/เนปาลมีค่าด้วยเหตุผลหลายประการ:

  1. มีความหลากหลายของสภาพเมือง ทั้งสภาพอากาศ แสง และทัศนวิสัยที่แตกต่างกัน
  2. มีขนาดใหญ่พอ (12,000+ รูปภาพ) ในการฝึก CNN ขนาดเบาโดยไม่เกิดการ overfitting
  3. เชื่อมโยงโปรเจกต์กับปัญหามลพิษทางอากาศในโลกแห่งความเป็นจริง เนื่องจากทั้งอินเดียและเนปาลเผชิญกับความท้าทายด้านคุณภาพอากาศที่รุนแรง

ความโปร่งใสเกี่ยวกับข้อจำกัด

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

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

การฝึกโมเดล (Training the Model)

เมื่อผมรวบรวมชุดข้อมูลรูปภาพทิวทัศน์ได้แล้ว ขั้นตอนใหญ่ถัดไปคือการฝึกโมเดลที่สามารถจดจำรูปแบบที่เกี่ยวข้องกับคุณภาพอากาศได้ สำหรับงานนี้ ผมใช้ Convolutional Neural Network (CNN) — ซึ่งเป็นโมเดล Deep Learning ประเภทหนึ่งที่ออกแบบมาเพื่องานจำแนกรูปภาพโดยเฉพาะ

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

การตั้งค่าการฝึกโมเดลแบบ DIY ของผม

นี่คือส่วนที่ผมภูมิใจที่สุด: ผมฝึกโมเดล locally บน PC ที่ผมประกอบเองในราคาต่ำกว่า $300 หลายคนคิดว่าคุณต้องใช้ Hardware ราคาแพงสำหรับโปรเจกต์ AI แต่นั่นไม่เป็นความจริงเสมอไปหากคุณทำงานกับ Framework ที่ได้รับการปรับแต่งมาอย่างดีอย่าง TensorFlow Lite

นี่คือสเปกเครื่องที่เรียบง่ายแต่เชื่อถือได้ของผม:

  1. CPU: Intel Xeon E5-2670 v3 @ 2.30GHz
  2. RAM: 16GB DDR4 @ 2133 MHz
  3. GPU: Nvidia GT 1030 (2GB)
  4. Storage: 512GB 2.5” SSD
  5. Power Supply: Corsair CV650 80 Plus Bronze, 650W
  6. Operating System: Ubuntu 24.04.2 LTS

เครื่องนี้ไม่ใช่เครื่องสเปกแรง แต่มันมีความสามารถเกินพอสำหรับการรับมือกับการทดลอง AI น้ำหนักเบาและการฝึกโมเดล TinyML ส่วน GPU นั้นไม่ได้แรงเป็นพิเศษสำหรับ Deep Learning (VRAM 2GB นั้นน้อยมาก) แต่เนื่องจากผมทำงานกับชุดข้อมูลที่กะทัดรัดและโมเดลที่ปรับแต่งมาแล้ว การฝึกฝนจึงยังคงเป็นไปได้

หากคุณสงสัยเกี่ยวกับการประกอบเครื่องนี้ ผมได้ทำวิดีโออธิบายวิธีการประกอบ PC เครื่องนี้ไว้แล้ว — คุณสามารถรับชมได้ทาง YouTube channel ของผมครับ

ความพยายามครั้งแรกและข้อจำกัดของ Hardware

มีอัลกอริทึมและสถาปัตยกรรมนับไม่ถ้วนสำหรับปัญหา computer vision ความพยายามครั้งแรกของผมคือการใช้ MobileNetV2 — ซึ่งเป็น CNN น้ำหนักเบายอดนิยมที่ออกแบบมาสำหรับงาน embedded vision ด้วยการปรับแต่งเล็กน้อย มันสามารถทำความแม่นยำ (validation accuracy) ได้ประมาณ 86% นั่นเป็นเรื่องที่น่าตื่นเต้น จนกระทั่งผมลองนำไปใช้กับ UNIHIKER K10

ปัญหาคืออะไร? หน่วยความจำ (Memory)

MobileNetV2 ต้องการ SRAM เกือบ 2MB ในขณะที่ K10 มีให้ใช้เพียง 512KB เท่านั้น นั่นทำให้มันไม่สามารถใช้งานได้เลยสำหรับโปรเจกต์นี้

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

การเตรียมชุดข้อมูล

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

ผมแบ่งชุดข้อมูลโดยใช้ กฎ 70/20/10:

  1. 70% สำหรับการฝึก (Training)
  2. 20% สำหรับการตรวจสอบ (Validation)
  3. 10% สำหรับการทดสอบ (Testing)

เพื่อหลีกเลี่ยงการเกิด overfitting ผมตั้งค่า 60 training epochs พร้อมด้วย early stopping patience ที่ 6 นั่นหมายความว่าการฝึกจะหยุดลงหากความแม่นยำในการตรวจสอบไม่ดีขึ้นติดต่อกันหกครั้ง และจะกู้คืนน้ำหนัก (weights) ที่ดีที่สุดโดยอัตโนมัติ

ผมยังได้ใช้เทคนิค data augmentation เช่น การพลิกภาพแบบสุ่ม (random flips), การหมุนเล็กน้อย และการซูม สิ่งเหล่านี้ช่วยให้โมเดลสามารถทำงานได้ดีขึ้นในสถานการณ์จริงโดยการจำลองความแปรปรวนที่อาจเกิดขึ้น

กระบวนการฝึกฝน

หลังจากลองผิดลองถูก ผมใช้ TensorFlow เพื่อออกแบบ CNN ที่มีโครงสร้างดังนี้:

  1. Convolutional layers เพื่อสกัดคุณลักษณะระดับต่ำ เช่น ขอบและสี
  2. Pooling layers เพื่อลดมิติข้อมูลและรักษาไว้เฉพาะข้อมูลที่สำคัญที่สุด
  3. Dense layers ในตอนท้ายเพื่อทำการทำนายหมวดหมู่ AQI

การฝึกฝนไม่ได้ราบรื่นเสมอไป ผมต้องทดลองกับ hyperparameter ต่างๆ (เช่น learning rate และ batch size) และรับมือกับข้อจำกัดของหน่วยความจำ แต่ในที่สุด ผมก็สามารถสร้างโมเดลที่เล็กพอจะบรรจุลงใน K10 ได้ โดยที่ยังคงประสิทธิภาพที่ดีในการทดสอบ

Script สำหรับการฝึกถูกออกแบบมาเพื่อ:

  1. บันทึกโมเดลที่ดีที่สุดตาม validation accuracy
  2. ใช้ class weights เพื่อจัดการกับหมวดหมู่ที่ไม่สมดุล
  3. บันทึกค่า metrics และสร้างภาพประกอบ (accuracy curves, loss curves, confusion matrix)
  4. แปลงโมเดลสุดท้ายเป็น TensorFlow Lite ด้วย int8 quantization

Quantization เป็นสิ่งที่สำคัญมาก หากไม่มีสิ่งนี้ โมเดลจะมีขนาดใหญ่เกินกว่าจะบรรจุลงในหน่วยความจำ ด้วย int8 quantization น้ำหนัก (weights) และ activations จะถูกบีบอัดให้เป็นเลขจำนวนเต็มขนาด 8 บิต ซึ่งช่วยลดขนาดลงอย่างมากในขณะที่ยังคงรักษาความแม่นยำส่วนใหญ่ไว้ได้

ผลลัพธ์

เมื่อสิ้นสุดการฝึกฝน CNN ขนาดจิ๋วของผมสามารถทำ test accuracy ได้ 71.29% เมื่อพิจารณาจากข้อจำกัดที่รุนแรงของหน่วยความจำใน K10 นี่ถือว่าเป็นผลลัพธ์ที่น่าพอใจมาก

กระบวนการนี้ให้ความสำคัญกับ memory footprint ที่ต่ำมากกว่าความแม่นยำดิบๆ ซึ่งเป็นสิ่งที่คุณต้องการสำหรับอุปกรณ์ IoT และ edge ที่มีข้อจำกัดด้านทรัพยากรอย่าง ESP32-S3 หรือ UNIHIKER K10

ผมจะเจาะลึกเกี่ยวกับการแลกเปลี่ยน (tradeoff) ระหว่างการใช้ทรัพยากรและความแม่นยำในส่วนถัดไป แต่สำหรับตอนนี้ นี่คือภาพรวมของประสิทธิภาพของโมเดล:

การนำไปใช้งานบน UNIHIKER K10

นี่เป็น ความท้าทายที่ยากที่สุด ที่ผมต้องเผชิญ: คุณจะรันโมเดล AI ที่สร้างขึ้นเองบน UNIHIKER K10 ได้อย่างไร?

หากคุณจำได้จากช่วงต้นของบทความนี้ K10 สามารถเขียนโปรแกรมได้โดยใช้เครื่องมือ 4 อย่าง ณ เดือนกันยายน 2025 Arduino IDE เป็นตัวเลือกที่มีความยืดหยุ่นมากที่สุดสำหรับการสร้างโปรเจกต์ K10 ของคุณเอง

ในการควบคุมบอร์ด คุณต้องมี Library พิเศษที่ชื่อว่า unihiker_k10 ซึ่งจัดทำโดย DFRobot ในการใช้งาน คุณต้องค้นหาคำว่า UNIHIKER ใน Boards Manager และติดตั้งแอปพลิเคชัน

ใน Boards Manager ให้ติดตั้งแอปพลิเคชัน UNIHIKER

เอกสารประกอบอย่างเป็นทางการนั้นมีตัวอย่างที่ยอดเยี่ยม แต่ไม่ได้อธิบายถึงวิธีการรันโมเดล AI ของคุณเอง

แล้วเราจะทำให้มันทำงานได้อย่างไร? คำตอบคือ TensorFlow Lite for Microcontrollers (TFLite Micro) — Library อย่างเป็นทางการของ TensorFlow สำหรับการรันโมเดล AI บน microcontrollers ใน Arduino Library Manager คุณจะพบสองเวอร์ชัน: เวอร์ชันหนึ่งสำหรับบอร์ด Arduino มาตรฐาน และอีกเวอร์ชันหนึ่งสำหรับอุปกรณ์ ESP32 สำหรับ K10 เราต้องใช้ เวอร์ชัน ESP32 (TensorFlowLite_ESP32)

ใน Library Manager ให้ติดตั้ง Library TensorFlowLite_ESP32

ทำไม Quantization ถึงมีความสำคัญ

จำที่ผมพูดถึง int8 quantization ระหว่างการฝึกได้ไหมครับ? ขั้นตอนนี้สำคัญมากสำหรับการนำไปใช้งานบนอุปกรณ์ edge ในระหว่างการทำ quantization โมเดลของคุณจะถูกแปลงเป็น C array ซึ่ง microcontroller สามารถอ่านและประมวลผลได้โดยตรง

มีข้อสังเกตคือ: TFLite Micro ไม่สามารถรันโมเดลที่เก็บไว้ใน micro SD card ได้ ซึ่งหมายความว่าโมเดลจะต้องอยู่ใน internal flash memory ของบอร์ด ซึ่งมีขนาดเพียง 16MB การทำ quantization ช่วยให้มั่นใจว่าโมเดล AI มีขนาดเล็กพอที่จะใส่ลงไปได้ หากไม่มีขั้นตอนนี้ แม้แต่ CNN ขนาดปานกลางก็อาจจะใหญ่เกินกว่าจะโหลดได้

การอัปโหลดโมเดล

เมื่อการฝึกเสร็จสิ้น ไฟล์ best_model_int8.h สุดท้ายจะต้องถูกวางไว้ ในโฟลเดอร์เดียวกับ Arduino Sketch ของคุณ เมื่อคุณกด Upload ใน Arduino IDE ทั้งโปรแกรมและโมเดล AI จะถูกเก็บไว้ด้วยกันใน flash memory ของ K10

โมเดลและ Sketch อยู่ในโฟลเดอร์เดียวกัน

มาถึงจุดนี้ คุณมีทุกอย่างพร้อมสำหรับการรัน inference โดยตรงบนบอร์ดแล้ว ตอนนี้ AI สามารถวิเคราะห์รูปภาพ จำแนกคุณภาพอากาศ และให้ผลการทำนายได้ — ทั้งหมดนี้โดยไม่ต้องพึ่งพา PC หรือ Cloud Server

ต่อไป เราจะมาดู Code ของ Arduino ที่ทำให้สิ่งมหัศจรรย์นี้เกิดขึ้น โดยจะแสดงให้เห็นว่า K10 โต้ตอบกับโมเดล ถ่ายภาพ และส่งผลการทำนายออกมาแบบ real-time ได้อย่างไร

คำอธิบาย Code ของ Arduino

Arduino Sketch สำหรับโปรเจกต์นี้มีความยาวกว่า 500 บรรทัด ดังนั้นการเจาะลึกทีละบรรทัดอาจจะมากเกินไป ผมจะสรุป ภาพรวม โดยเน้นที่สถาปัตยกรรม, ฟังก์ชันสำคัญ และการตัดสินใจเชิงเทคนิคที่ทำให้ UNIHIKER K10 ทำงานได้ตามที่ต้องการ การเข้าใจโครงสร้างนี้จะช่วยให้คุณนำไปประยุกต์ใช้กับโปรเจกต์ของคุณเองได้

ส่วนประกอบหลัก

K10 มีส่วนประกอบ Hardware หลัก 3 อย่างที่โปรแกรมของเราเข้าไปโต้ตอบ:

  1. กล้อง (Camera) - เพื่อถ่ายภาพทิวทัศน์สำหรับการวิเคราะห์ด้วย AI
  2. หน้าจอ (Screen) - หน้าจอสีขนาด 2.8 นิ้ว 240x320 สำหรับแสดงเมนู, คำแนะนำ และผลลัพธ์
  3. Micro SD Card - สำหรับเก็บรูปภาพชั่วคราวและไฟล์ UI ต่างๆ

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

หน้าจอและ User Interface

หน้าจอแสดงผลมีความสามารถที่น่าทึ่ง แต่ Library unihiker_k10 อย่างเป็นทางการมีข้อจำกัดบางประการ — คุณสามารถตั้งค่าสีข้อความและสีพื้นหลังได้ แต่คุณ ไม่สามารถ:

  1. เปลี่ยนประเภทหรือขนาดตัวอักษร
  2. ปรับระยะห่างระหว่างบรรทัดหรือระยะห่างระหว่างตัวอักษร
  3. ใส่สีไล่ระดับ (gradients) หรือเอฟเฟกต์กราฟิกขั้นสูง

ถึงกระนั้น ผมก็ได้ออกแบบ Interface ที่ชัดเจนและโต้ตอบได้:

  1. เมื่อผู้ใช้เปิดเครื่อง K10 หน้าจอโลโก้จะปรากฏขึ้น ตามด้วยเมนูหลัก
  2. เมนูจะแนะนำผู้ใช้: กด A หรือ B เพื่อเลื่อนเมนู
  1. กด B → เปิดหน้าจอข้อมูลพร้อมคำอธิบายสั้นๆ ของระบบ
  1. กด B อีกครั้ง → กลับสู่เมนู
  2. กด A → เข้าสู่โหมดถ่ายภาพ
  1. ในโหมดถ่ายภาพ จะมีข้อความสั้นๆ อธิบายวิธีถ่ายภาพ
  2. กล้องเปิดขึ้น และผู้ใช้กด:
  3. A → ถ่ายภาพ
  4. B → กลับสู่เมนู
  5. หลังจากถ่ายภาพ AI จะวิเคราะห์และแสดงผลการจำแนก AQI ที่ทำนายไว้บนหน้าจอ

เนื่องจากข้อจำกัดของ Library ผมจึงใช้วิธีแก้ปัญหาเพื่อให้ UI (user interface) ดูสวยงามยิ่งขึ้น:

  1. ผมออกแบบหน้า Interface ทั้งหมดใน Canva
  2. บันทึกเป็นรูปภาพลงใน micro SD card
  3. โปรแกรมจะโหลดรูปภาพที่ถูกต้องเป็นพื้นหลังเมื่อใดก็ตามที่ผู้ใช้นำทางไปยังหน้าจอนั้นๆ

วิธีนี้เรียบง่ายแต่ได้ผลดี ต่อมาผมพบวิธีที่ก้าวหน้ากว่าซึ่งใช้โดย Mirko Pavleski ใน โปรเจกต์เครื่องวัดแสง เขาใช้ TFT_eSPI Library และทำการถอดรหัส (reverse-engineer) ขาของจอแสดงผล K10 เพื่อให้ควบคุมหน้าจอได้เต็มรูปแบบ มันเป็นทางเลือกที่สวยงาม แต่ผมเลือกที่จะใช้วิธี SD card เพื่อความเรียบง่าย

การถ่ายภาพและประมวลผลรูปภาพ

เมื่อผู้ใช้ถ่ายภาพ:

  1. K10 จะถ่ายภาพขนาด 240x320 และบันทึกลงใน SD card
  2. ใช้อัลกอริทึมที่เขียนขึ้นเอง ปรับขนาดภาพเป็น 64x64 พิกเซล เพื่อให้ตรงกับ input shape ของโมเดล AI ของเรา
  3. การปรับขนาดนี้จำเป็นเพราะ CNN ถูกฝึกด้วยรูปภาพขนาด 64x64 เพื่อลดภาระการคำนวณ
  4. รูปภาพที่ปรับขนาดแล้วจะถูกบันทึกลงใน SD card เช่นกัน

การรันโมเดล AI

หลังจากปรับขนาดแล้ว ขั้นตอนการทำ inference นั้นตรงไปตรงมา:

  1. โมเดล TFLite Micro จะโหลดรูปภาพ 64x64 จากหน่วยความจำ
  2. โมเดลจะให้ผลลัพธ์เป็น array ของความน่าจะเป็น 6 ค่า ซึ่งแต่ละค่าแทนคลาส AQI หนึ่งคลาส
  3. คลาสที่มี ความน่าจะเป็นสูงสุด จะถูกเลือกและแสดงผลเหนือรูปภาพต้นฉบับ
  4. หากมีสองคลาสหรือมากกว่าที่มีความน่าจะเป็นเท่ากัน คลาสแรกจะถูกเลือกโดยปริยาย

การตั้งค่านี้ช่วยให้มั่นใจได้ว่ากระบวนการ AI ทั้งหมด ตั้งแต่การถ่ายภาพไปจนถึงการแสดงผลการจำแนกประเภท จะทำงานบน K10 ทั้งหมด โดยไม่ต้องมีการประมวลผลผ่าน PC หรือ Cloud

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

ผลลัพธ์

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

อย่างที่คุณเห็นจากรูปภาพด้านบน ผมได้ทดสอบโมเดลนอกสถานที่โดยการถ่ายภาพท้องฟ้าหลายๆ มุม ส่วนใหญ่แล้ว โมเดลจะทำนายว่าคุณภาพอากาศอยู่ในระดับ ปานกลาง (moderate) จากข้อมูลของ IQAir สถานที่ที่ทำการทดสอบได้คะแนน 55 (ปานกลาง) ดังนั้นดูเหมือนว่าระบบจะทำงานได้ถูกต้อง แต่นั่นนำไปสู่คำถามที่สำคัญ: นี่คือโมเดลที่ดีจริงๆ หรือไม่? ผมจะมั่นใจได้อย่างไรว่ามันไม่ได้เกิดภาวะ underfitting หรือ overfitting?

เพื่อเจาะลึกลงไป ผมได้ประเมินโมเดลกับชุดข้อมูลที่มัน ไม่เคยเห็นมาก่อน สำหรับการทดสอบนี้ ผมได้ใช้คอลเลกชัน ภาพถ่ายทิวทัศน์จากสมาร์ทโฟนที่ถ่ายโดย Ruikuan Zhu

ชุดข้อมูลภายนอกนี้ประกอบด้วยรูปภาพ 456 ภาพ ในหมวดหมู่ AQI 5 หมวดหมู่ที่กำหนดโดยหน่วยงานคุ้มครองสิ่งแวดล้อมของสหรัฐฯ (EPA):

  1. 135 ภาพในคลาส Good (ดี)
  2. 188 ภาพในคลาส Moderate (ปานกลาง)
  3. 29 ภาพในคลาส Unhealthy for Sensitive Groups (ไม่ดีต่อสุขภาพสำหรับกลุ่มที่อ่อนไหว)
  4. 78 ภาพในคลาส Unhealthy (ไม่ดีต่อสุขภาพ)
  5. 26 ภาพในคลาส Very Unhealthy (ไม่ดีต่อสุขภาพอย่างมาก)

ผมเขียน Script เพื่อโหลดโมเดล quantized ตัวเดียวกับที่ผมใช้บน UNIHIKER K10 และประเมินกับชุดข้อมูลนี้ หลังจากใช้เวลาประเมินสักพัก ผลลัพธ์ที่ได้ก็เป็นอย่างที่ผมกังวล

โมเดลทำความแม่นยำโดยรวมได้เพียง 6.61% ในชุดข้อมูลนี้

ความแม่นยำแยกตามคลาสมีดังนี้:

  1. Moderate: 0%
  2. Unhealthy for Sensitive Groups: 0%
  3. Good: 16.3%
  4. Unhealthy: 3.85%
  5. Very Unhealthy: 19.23%

มีเพียง การทำนายที่ผิดพลาด (invalid) สองครั้งโดยรวม และโมเดลแทบจะไม่ทำนายคลาส "Hazardous" เลย

นี่คือ confusion matrix เพื่อความชัดเจน:

แล้วเกิดอะไรขึ้น?

มีสาเหตุหลายประการที่ทำให้การทำงานในวงกว้าง (generalization) แย่ลง:

ความไม่สอดคล้องของข้อมูล (Data mismatch): ชุดข้อมูลฝึกฝนมีรูปภาพที่ปรับขนาดเป็น 224×224 ในขณะที่ชุดข้อมูลประเมินประกอบด้วย รูปภาพ 4K (4032×3024 หรือ 3024×4032) เนื่องจากอินพุตของโมเดล K10 มีขนาดเพียง 64×64 การปรับขนาดภาพ 4K ลงมาขนาดนี้ทำให้สูญเสียรายละเอียดอย่างมาก เบาะแสเล็กๆ น้อยๆ ที่แยกความแตกต่างระหว่างหมวดหมู่ AQI จึงหายไป

ข้อจำกัดของ Hardware: การตัดสินใจฝึกฝนที่ความละเอียด 64×64 ไม่ใช่เรื่องบังเอิญ แต่มันคือความจำเป็น เนื่องจาก K10 มี SRAM เพียง 512KB ซึ่งบีบให้ผมต้องฝึก CNN ที่กะทัดรัดมาก โมเดลที่ใหญ่กว่าและแสดงออกได้มากกว่าอย่าง MobileNetV2 หรือ EfficientNet จะทำงานได้ดีกว่า แต่มันไม่สามารถใส่ลงใน K10 ได้

ความเสี่ยงของ Overfitting: เนื่องจาก CNN ของผมค่อนข้างตื้น (shallow) มันจึงน่าจะเกิด overfitting กับชุดข้อมูลฝึกฝนที่จำกัด วิธีการที่แข็งแกร่งกว่าคือการใช้ transfer learning กับโมเดลที่ฝึกมาก่อน (pretrained models) (เช่น MobileNetV2) แต่อีกครั้งที่ข้อจำกัดของ Hardware เป็นอุปสรรค

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

สรุปสั้นๆ: แม้ว่าโมเดลจะทำงานได้ในการทดสอบที่ควบคุมและรันบน K10 ได้ แต่ ความสามารถในการใช้งานทั่วไป (generalize) ยังคงต่ำ การแลกเปลี่ยนระหว่างความแม่นยำและข้อจำกัดของหน่วยความจำกำหนดทุกตัวเลือกการออกแบบในโปรเจกต์นี้ และนั่นคือเหตุผลว่าทำไมการพิจารณา Platform Hardware ใหม่ๆ จึงมีความสำคัญในอนาคต

การปรับปรุงและงานในอนาคต

แม้ว่าโปรเจกต์ UNIHIKER K10 จะประสบความสำเร็จในการแสดงให้เห็นว่า AI ขนาดจิ๋วสามารถจำแนกคุณภาพอากาศจากภาพทิวทัศน์ได้ แต่ก็ยังมีช่องว่างอีกมากสำหรับการปรับปรุง Edge AI นั้นเป็นเรื่องของการแลกเปลี่ยนระหว่างความแม่นยำ, ความซับซ้อนของโมเดล และข้อจำกัดของ Hardware การสำรวจความเป็นไปได้เหล่านี้จะเปิดทิศทางที่น่าตื่นเต้นสำหรับงานในอนาคต

1. ขนาดอินพุตที่สูงขึ้นและสถาปัตยกรรมที่ซับซ้อนขึ้น

ปัจจุบัน CNN ของเราทำงานบนรูปภาพขนาด 64x64 เพื่อให้อยู่ภายใต้ข้อจำกัดของหน่วยความจำของ K10 การเพิ่มขนาดอินพุต เป็น 128x128 หรือแม้แต่ 224x224 จะช่วยให้โมเดลจับรายละเอียดภาพได้มากขึ้น เช่น การไล่ระดับของหมอกควันที่ละเอียดอ่อนหรือวัตถุที่อยู่ไกล ซึ่งอาจช่วยเพิ่มความแม่นยำได้

นอกจากนี้ การทดลองกับ สถาปัตยกรรมที่ซับซ้อนขึ้น — เช่น MobileNet, EfficientNet หรือ ResNet รุ่นต่างๆ — อาจช่วยให้โมเดลเรียนรู้คุณลักษณะที่หลากหลายขึ้น สถาปัตยกรรมเหล่านี้ถูกออกแบบมาเพื่อประสิทธิภาพบนอุปกรณ์มือถือและ embedded ดังนั้นด้วยการทำ pruning และ quantization ที่ระมัดระวัง พวกมันอาจยังรันบนบอร์ดหรือ microcontroller ที่มีความสามารถสูงขึ้นเล็กน้อยได้

การใช้ transfer learning เป็นอีกแนวทางที่น่ามีความหวัง แทนที่จะฝึกโมเดลตั้งแต่ต้น เราสามารถเริ่มจากโมเดลที่ฝึกฝนมาแล้วจากชุดข้อมูลรูปภาพขนาดใหญ่ เช่น ImageNet และปรับจูน (fine-tune) สำหรับการจำแนกคุณภาพอากาศ ซึ่งปกติจะช่วยเพิ่มประสิทธิภาพได้อย่างมหาศาล โดยเฉพาะเมื่อชุดข้อมูลมีจำกัด

2. การใช้ Hardware ที่มีประสิทธิภาพมากขึ้น

ข้อจำกัดอย่างหนึ่งของ K10 คือ SRAM 512KB และ flash memory 16MB บอร์ดที่มีประสิทธิภาพมากกว่า เช่น UNIHIKER M10 มีการอัปเกรดที่สำคัญดังนี้:

  1. Quad-Core ARM Cortex-A35, สูงสุด 1.2GHz
  2. 512MB RAM
  3. ระบบปฏิบัติการ Debian
  4. หน้าจอสัมผัสแบบ Capacitive

แม้ว่า M10 จะไม่มีกล้องมาในตัว แต่มันรองรับกล้อง USB ภายนอก ทำให้สามารถถ่ายภาพแบบ real-time ได้ การใช้ Hardware ดังกล่าวจะช่วยให้ใช้ โมเดลที่ใหญ่ขึ้น, รูปภาพความละเอียดสูงขึ้น และ การทำ inference ที่เร็วขึ้น ซึ่งจะเปิดโอกาสสู่แอปพลิเคชันที่ซับซ้อนมากขึ้น

ทางเลือกอื่นๆ ได้แก่ บอร์ด Raspberry Pi หรือคอมพิวเตอร์บอร์ดเดี่ยวที่เน้น AI ซึ่งให้ข้อดีที่คล้ายกัน: การประมวลผลที่ดีขึ้น, รองรับ Python/TensorFlow เต็มรูปแบบ และการเชื่อมต่อกล้องที่ง่าย สิ่งนี้จะทำให้การฝึกฝนและนำโมเดลที่ซับซ้อนมาใช้งานจริงเป็นไปได้

3. การเปลี่ยนเป็นระบบบนมือถือหรือระบบแบบ Real-Time

อีกแนวทางที่น่าตื่นเต้นคือการเปลี่ยนระบบให้เป็น แอปพลิเคชันบนโทรศัพท์มือถือ สมาร์ทโฟนมีกล้อง, CPU/GPU ที่ทรงพลัง และมีการเข้าถึงที่แพร่หลายอยู่แล้ว การนำโมเดลไปใช้บน iOS หรือ Android จะช่วยให้ ทุกคนสามารถวัดคุณภาพอากาศในท้องถิ่นได้ ด้วยการแตะเพียงไม่กี่ครั้ง เป็นการขยายผลกระทบของโปรเจกต์จากกลุ่ม Maker ไปสู่สาธารณชนทั่วไป

นอกจากนี้ ระบบยังสามารถบูรณาการเข้ากับ กล้องรักษาความปลอดภัย และ กล้องจราจร ได้ หลายเมืองมีเครือข่ายกล้องที่กว้างขวางอยู่แล้ว การนำโมเดล AI คุณภาพอากาศไปใช้กับโครงสร้างพื้นฐานที่มีอยู่เหล่านี้จะช่วยให้สามารถ ตรวจสอบคุณภาพอากาศในระดับเมืองแบบ real-time และให้ข้อมูลที่นำไปปฏิบัติได้จริงแก่ประชาชนและหน่วยงานภาครัฐ

4. การสร้างชุดข้อมูลที่แข็งแกร่งขึ้น

ชุดข้อมูลปัจจุบันมุ่งเน้นไปที่ทิวทัศน์เมืองในเวลากลางวันจากอินเดียและเนปาล เพื่อให้ได้ โมเดลที่แข็งแกร่ง และ ใช้งานได้ทั่วไปมากขึ้น ชุดข้อมูลควรประกอบด้วย:

  1. รูปภาพเวลากลางคืน ซึ่งทัศนวิสัยและแสงไฟมีความแตกต่างกันอย่างมาก
  2. ความแปรปรวนตามฤดูกาล เช่น หมอกควันในฤดูร้อน เทียบกับหมอกในฤดูหนาว
  3. ฉากที่หลากหลาย รวมถึงป่าไม้, ทะเลสาบ, ภูเขา, พื้นที่อุตสาหกรรม และทิวทัศน์เมืองที่มีตึกระฟ้า

นอกจากนี้ การสร้างป้ายกำกับเฉพาะสำหรับเขม่าควัน (smog) เทียบกับหมอก (haze) จะช่วยให้โมเดลสามารถแยกแยะประเภทของมลพิษได้ ซึ่งจะช่วยให้ประเมินคุณภาพอากาศได้ละเอียดขึ้น

5. สู่การตรวจสอบแบบต่อเนื่องและ Real-Time

เป้าหมายสูงสุดของระบบนี้คือการตรวจสอบสิ่งแวดล้อมแบบ real-time การรวมอุปกรณ์ edge ที่ทรงพลังเข้ากับกระแสข้อมูลภาพอย่างต่อเนื่องจะช่วยให้สามารถ:

  1. บันทึกข้อมูลคุณภาพอากาศโดยอัตโนมัติเมื่อเวลาผ่านไป
  2. แจ้งเตือนเมื่อมลพิษถึงระดับอันตราย
  3. บูรณาการกับการวางผังเมืองหรือโปรเจกต์วิจัยสิ่งแวดล้อม

จากการนำ AI นี้ไปใช้ในหลายตำแหน่งและใช้ประโยชน์จากโครงสร้างพื้นฐานกล้องที่มีอยู่ เราสามารถสร้าง เครือข่ายตรวจสอบคุณภาพอากาศขนาดใหญ่ที่มีต้นทุนต่ำ เพื่อเสริม Sensor แบบดั้งเดิมและให้ข้อมูล real-time ที่มีค่าแก่รัฐบาล นักวิจัย และสาธารณชน

โดยสรุป โปรเจกต์ UNIHIKER K10 เป็นเพียงก้าวแรกของวิสัยทัศน์ที่กว้างใหญ่กว่า ตั้งแต่โมเดลความละเอียดสูงและสถาปัตยกรรมที่ซับซ้อน ไปจนถึงแอปมือถือและการตรวจสอบระดับเมืองแบบ real-time โอกาสในการขยายผล ปรับแต่ง และยกระดับงานนี้มีมหาศาล ด้วยการให้ความสำคัญกับข้อจำกัดของ Hardware, คุณภาพของชุดข้อมูล และกลยุทธ์การนำไปใช้งาน ระบบนี้อาจพัฒนาจากการทดลองแบบ DIY ไปสู่เครื่องมือที่ใช้งานได้จริงเพื่อความตระหนักด้านสิ่งแวดล้อมและสาธารณสุข

บทสรุป

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

การดำเนินงานในปัจจุบันรัน CNN น้ำหนักเบาบนรูปภาพขนาด 64×64 และแม้ว่ามันจะทำงานได้ดีพอสมควรในชุดข้อมูลฝึกฝน แต่การประเมินจากภายนอกเผยให้เห็นข้อจำกัดของมัน เมื่อทดสอบกับชุดข้อมูลรูปภาพจากสมาร์ทโฟนที่แตกต่างกันโดยสิ้นเชิง ความแม่นยำลดลงเหลือเพียง 6.61% ซึ่งเน้นย้ำถึงปัญหาเกี่ยวกับการใช้งานในวงกว้าง (generalization), ความไม่สมดุลของคลาส และการสูญเสียรายละเอียดอย่างรุนแรงจากการปรับขนาดภาพ 4K ลงเหลือ 64×64 ผลลัพธ์เหล่านี้ทำให้ชัดเจนว่า: โมเดลทำงานได้ภายใต้เงื่อนไขที่ควบคุม แต่ยังคงประสบปัญหาเมื่อต้องเผชิญกับความแปรปรวนในโลกแห่งความเป็นจริง

อย่างไรก็ตาม ความจริงที่ว่าอุปกรณ์ที่มีข้อจำกัดอย่างมาก โดยมี SRAM เพียง 512KB สามารถรันโมเดล AI ที่สร้างขึ้นเองได้ก็นับเป็นความสำเร็จในตัวมันเอง ระบบนี้ไม่ได้มีไว้เพื่อแทนที่สถานีตรวจสอบอย่างเป็นทางการ แต่เป็นการเสริมศักยภาพโดยการสำรวจว่าอุปกรณ์ edge สามารถให้การตรวจวัดสภาพแวดล้อมที่ราคาถูกและขยายผลได้ง่ายอย่างไร

ตลอดการทำงาน โปรเจกต์นี้ได้เน้นย้ำถึงบทเรียนสำคัญเกี่ยวกับการเตรียมชุดข้อมูล, การปรับแต่งโมเดล, overfitting และการแลกเปลี่ยนระหว่าง ความแม่นยำ และ ข้อจำกัดของหน่วยความจำ — ซึ่งเป็นความท้าทายที่พบได้ทั่วไปในแอปพลิเคชัน AI-on-edge ส่วนใหญ่

และนี่เป็นเพียงจุดเริ่มต้น ด้วยชุดข้อมูลที่สมบูรณ์ขึ้น, สถาปัตยกรรมที่ก้าวหน้าขึ้นอย่าง MobileNet หรือ EfficientNet, transfer learning และบอร์ดที่ทรงพลังมากขึ้นอย่าง UNIHIKER M10 หรือ Raspberry Pi เราจะสามารถปลดล็อกระบบที่ตรวจสอบคุณภาพอากาศได้อย่างต่อเนื่อง แบบ real-time และในระดับเมือง ลองจินตนาการถึงการฝังโมเดลเหล่านี้ลงในสมาร์ทโฟน, กล้องจราจร หรือโครงสร้างพื้นฐานของเมือง ทำให้มลพิษที่มองไม่เห็นสามารถมองเห็นได้ และ มอบอำนาจให้ชุมชน ในการดำเนินการอย่างมีความรู้

ในท้ายที่สุด โปรเจกต์นี้เป็นมากกว่าการทดลองทางเทคนิค มันเป็นข้อพิสูจน์ว่านวัตกรรมมักเริ่มต้นจากสิ่งเล็กๆ: จากข้อจำกัด, จากการยอมรับข้อจำกัด และจากความพยายามอย่างต่อเนื่อง ด้วยการผลักดันขอบเขตของสิ่งที่เป็นไปได้บน Hardware ราคาประหยัด เราได้ก้าวเข้าใกล้การทำให้การตรวจวัดสิ่งแวดล้อมเป็นเรื่องที่ทุกคนเข้าถึงได้ผ่าน AI อีกก้าวหนึ่ง

Code

🔒 ปลดล็อก Code

สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้

รหัสอ้างอิงโปรเจกต์: predict-air-pollution-with-computer-vision-e8d1e2
299 บาท
PromptPay QR Code