จุดเริ่มต้น: สอน AI ให้อ่านป้ายทะเบียนไทย
โปรเจกต์นี้เกิดขึ้นจากความต้องการจริงในงาน — เราต้องการระบบกล้อง AI ที่อ่านป้ายทะเบียนรถภาษาไทยได้แบบ Real-time บน Hardware ขนาดเล็กอย่าง Raspberry Pi 5 + Hailo-8 AI Accelerator
ปัญหาแรกที่เจอ: Hailo LPRNet ที่มีให้ใน Model Zoo รู้จักแค่ตัวอักษร Latin ไม่รู้จักภาษาไทยแม้แต่ตัวเดียว ทางออกคือต้อง Fine-Tune โมเดลใหม่ด้วยข้อมูลป้ายทะเบียนไทย
เราเริ่มจากการสร้าง Synthetic Dataset — ใช้ Python + PIL สร้างภาพป้ายทะเบียนสังเคราะห์ 100,000+ ภาพในเวลาเพียง 9 นาที ข้อดีคือได้ Label อัตโนมัติ ไม่ต้องนั่ง annotate ทีละใบ แล้วเริ่ม Training บน Jetson AGX Xavier ผ่าน SSH โดยใช้ tmux ให้โปรเซสทำงานต่อเนื่องข้ามคืน
สิ่งที่เราเห็นในระหว่าง Training
โมเดลเรียนรู้ได้เร็วและดีมาก ตัวเลขพุ่งขึ้นอย่างสม่ำเสมอทุก epoch:
| Epoch | Val Accuracy | หมายเหตุ |
|---|---|---|
| 10 | 85.36% | |
| 11 | 89.71% | |
| 12 | 92.78% | |
| 13 | 94.66% | |
| 15 | 95.75% | |
| 16 🏆 | 97.13% | Best Checkpoint |
| 17 | 97.13% | Plateau |
| 18 | 96.24% | เริ่มลดลง |
| Real ⚠ | 37.5% | ทดสอบกับ 200 ภาพที่ไม่เคยเห็น |

Epoch 16 ได้ 97.13% Validation Accuracy และไม่เพิ่มขึ้นอีก เราตัดสินใจหยุด export โมเดลออกมาเป็น ONNX แล้วนำไปทดสอบกับข้อมูลชุดใหม่ — ผลที่ได้ทำให้เราต้องหยุดคิดทบทวนทันที
ช็อค: โมเดล "ฉลาดในห้อง" แต่ "งง" ในโลกจริง
"โมเดลอ่านป้ายในชุดฝึกได้ถูกต้องเกือบทั้งหมด แต่พอเจอป้ายใหม่ที่ไม่เคยเห็น — ความแม่นยำหล่นจาก 97% เหลือ 37%"
| Metric | Validation Set | Calibration Set (ใหม่) | ต่าง |
|---|---|---|---|
| Overall Accuracy | 97.13% | 37.5% | −59.6% |
| Length Mismatches | — | 74 / 200 ภาพ | 37% ของทั้งหมด |
| Perfect Matches | — | 75 / 200 | ถูกทั้งคำเพียง 37.5% |


Error ที่พบบ่อยที่สุด: โมเดลสับสน ี → ร, า → ร, ร → ุ ซ้ำๆ — และมักใส่ตัวอักษรผิดตัวหรือผิดจำนวนเข้าไปในผลลัพธ์


ทำไมถึงเกิดขึ้น? — ทำความเข้าใจ Overfitting
📖 Overfitting คืออะไร?
จินตนาการว่าเรามีนักเรียนที่อ่านหนังสือเฉลยข้อสอบจำได้ทุกข้อ — แต่ไม่ได้ "เข้าใจ" หลักการจริงๆ พอออกข้อสอบใหม่ที่ดัดแปลงเล็กน้อย ก็ตอบไม่ได้
Overfitting คือปรากฏการณ์เดียวกันในโมเดล AI — มันจำ pattern ของข้อมูลฝึกได้แม่นมาก แต่พอเจอข้อมูลใหม่ที่ไม่เคยเห็น กลับทำงานผิดพลาด เพราะมัน "ท่องจำ" ไม่ใช่ "เรียนรู้"
ในกรณีของเรา โมเดลอาจเริ่มจดจำรายละเอียดเฉพาะของภาพ synthetic เช่น pattern ของฟอนต์ ขนาด หรือตำแหน่งที่คงที่เกินไป แทนที่จะเรียนรู้ feature ของตัวอักษรภาษาไทยอย่างแท้จริง
สัญญาณที่ควรระวัง
1. Synthetic data มีความหลากหลายน้อยเกินไป — ฟอนต์, ขนาด, ตำแหน่งข้อความ และ background ถูก generate ด้วย pattern ที่ค่อนข้างคงที่
2. หยุด train เร็วเกินไปที่ 20 epoch — โมเดลยังอยู่ในช่วงที่ "จดจำ" ไม่ใช่ "ทำความเข้าใจ"
3. Architecture ยังไม่เหมาะสมที่สุด สำหรับ charset ภาษาไทยที่ซับซ้อนกว่า Latin มาก
แผนการแก้ไข — รอบต่อไปจะต่างออกไป
ติดตามต่อ
เราจะอัปเดตผลลัพธ์ของ Training run ใหม่ที่นี่เมื่อเสร็จสิ้น พร้อมตัวเลขเปรียบเทียบกับรอบที่แล้ว และผลทดสอบบน Raspberry Pi 5 + Hailo-8 จริง
ถ้ากำลังทำโปรเจกต์ที่คล้ายกัน หรือสนใจระบบ Edge AI Camera สำหรับงานของคุณ ติดต่อทีมเราได้ที่ PWD Vision Works