# การออกแบบระบบฝึกสอนโมเดล (Model Training Design)

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

## 1. ภาพรวมของระบบ Training
ระบบถูกออกแบบเพื่อรองรับกระบวนการเตรียมข้อมูล การฝึกสอน (Training) การวัดผล และการแปลงโมเดลให้อยู่ในรูปแบบที่พร้อมใช้งาน โดยรองรับทั้งการเทรนรอบแรก (Initial Training) และการเรียนรู้เพิ่มเติม (Incremental Learning) ในอนาคต

## 2. Dataset Design
* การคัดเลือกชุดข้อมูลภาพ (Dataset) ที่ประกอบไปด้วยภาพปกติและภาพตัดต่อ (Forged) หรือชุดข้อมูลมาตรฐาน (CASIA, IMD2020)
* การกำหนดโครงสร้าง Annotation ในรูปแบบ Segmentation Mask (ภาพขาวดำที่ชี้จุดดัดแปลง) เพื่อสอน AI ในระดับพิกเซล

## 3. Data Preprocessing
* **การทำความสะอาดข้อมูล**: การจัดระเบียบโครงสร้างโฟลเดอร์ให้สอดคล้องกับ Dataloader
* **Data Augmentation**: ใช้เทคนิคต่างๆ เช่น `RandomResize`, `RandomCrop`, `RandomFlip` และที่สำคัญคือ `PhotoMetricDistortion` (ปรับแต่งแสง/สี) เพื่อให้โมเดลทนทานต่อการแต่งแสงหลอก
* การแบ่งชุดข้อมูลเป็น Train / Validation / Test Set แบบ **stratified 80:10:10** (คงสัดส่วน class แท้/ปลอม และแหล่งข้อมูลทุกชุด, กำหนด seed คงที่, test set ถูก freeze ห้ามนำมา tune)

## 4. Initial Training
* การนำน้ำหนักเริ่มต้น (Pre-trained Weights) ของโมเดล SegFormer มาใช้งานเพื่อย่นระยะเวลาการเรียนรู้
* การสอนบนชุดข้อมูลหลักทั้งหมด (Base Dataset) เพื่อปรับพื้นฐานโมเดลให้รู้จักลักษณะของรอยตัดต่อดิจิทัล

## 5. Fine-tuning
* การปรับจูนโมเดลกับชุดข้อมูลภาพหลอกลวงแบบเฉพาะเจาะจง
* ใช้ค่า Learning Rate ที่ต่ำลงกว่ารอบแรกเพื่อค่อย ๆ ปรับน้ำหนักโดยไม่ทำลายความรู้เดิม

## 6. Incremental Fine-tuning
* ทบทวนรอบ retrain ทุก 30 วัน หรือเมื่อมีภาพกลโกงชนิดใหม่ที่ approved + research-consented สะสม ≥ 500 ภาพ (แล้วแต่เงื่อนไขใดถึงก่อน) แล้วทำ incremental update โดยไม่ต้องเทรนใหม่ทั้งหมดจากศูนย์
* เป็นการเรียนรู้ต่อเนื่องโดยไม่ต้องเริ่มต้นเทรนใหม่ทั้งหมดจากศูนย์

## 7. Parameter-wise Fine-tuning
* การกำหนดอัตราการเรียนรู้ (Learning Rate) แยกตามชิ้นส่วนโมเดล เพื่อรักษาฟีเจอร์เดิมแต่ยังปรับตัวเข้ากับโดเมนใหม่ได้
* Backbone (MiT Encoder): ปรับตัวช้าๆ (`lr_mult=0.1`) เพื่อไม่ให้ลืมความรู้การมองภาพรวม
* Decode Head (SegFormer Head): เรียนรู้อย่างรวดเร็ว (`lr_mult=10.0`) เพื่อจับรอยตัดต่อ

## 8. Replay Dataset
* กลยุทธ์การนำรูปภาพส่วนหนึ่งจากฐานข้อมูลดั้งเดิมมาผสมกับข้อมูลชุดใหม่ในระหว่างการทำ Incremental Training
* เพื่อป้องกันปัญหา Catastrophic Forgetting (การที่ AI ลืมวิธีตรวจจับกลโกงแบบเก่า หลังจากเรียนรู้กลโกงแบบใหม่)

## 9. Validation
* การประเมินผลระหว่างการเทรนในแต่ละรอบ (Epoch) ด้วยชุดข้อมูล Validation Set
* คอยตรวจสอบค่า Loss เพื่อดูพัฒนาการของโมเดลว่าไม่ได้กำลังจดจำคำตอบ (Overfitting)

## 10. Model Evaluation
* การวัดผลประสิทธิภาพบน Test Set เพื่อคัดเลือกโมเดลที่ดีที่สุด ด้วยมาตรวัด (Metrics) เฉพาะทางสำหรับงาน Semantic Segmentation ได้แก่:
  * **mIoU (Mean Intersection over Union)**: หาค่าเฉลี่ยความทับซ้อนของพื้นที่พิกเซลที่โมเดลตรวจพบเทียบกับพื้นที่รอยปลอมแปลงจริง
  * **mDice (Mean Dice Coefficient)**: ค่าการวัดผลคล้ายคลึงกับ F1-Score ในระดับพิกเซล ให้ความสำคัญกับการทายผลพื้นที่ที่เล็กและถูกบีบอัดให้แม่นยำ

## 11. Hyperparameters & Hardware Optimization
* **VRAM Optimization**: ใช้ `AmpOptimWrapper` (Mixed Precision) เพื่อลดการใช้หน่วยความจำ ทำให้เทรนบนอุปกรณ์ที่มี VRAM จำกัดได้อย่างเต็มประสิทธิภาพ
* **Optimizer & Scheduler**: ใช้ AdamW ร่วมกับ LinearLR (Warmup) และ PolyLR
* **Loss Function**: ใช้ `Binary Cross-Entropy Loss (BCE)` ควบคู่กับ `DiceLoss` (`use_sigmoid=True`) เพื่อแก้ปัญหา Class Imbalance (พื้นที่รอยปลอมแปลงเล็กมากเมื่อเทียบกับพื้นหลัง)

## 12. Checkpoint & Version Management
* การจัดเก็บสถานะน้ำหนักโมเดล (Model State Dict) เป็นไฟล์นามสกุล `.pth` หรือ `.pt` โดยจะบันทึก Checkpoint เมื่อค่า Loss บน Validation Set ต่ำที่สุด (Save Best Checkpoint) เพื่อนำไฟล์น้ำหนักเหล่านั้นไปใช้ต่อ หรือ Rollback หากเกิดความผิดพลาด
* **Automated Version Increment**: ระบบมีการจัดการเวอร์ชันของโมเดลอัตโนมัติในรูปแบบ Semantic Versioning แบบ Tag-based (เช่น `segformer_v1.0.1`, `segformer_v1.1.0` ตามรูปแบบ `segformer_v{major}.{minor}.{patch}`) โดยจะเข้าไปอ่านประวัติการเทรนใน `work_dirs` เพื่อหาเวอร์ชันที่สูงที่สุด แล้วบวกเพิ่ม 1 ให้เสมอ ช่วยป้องกันการเขียนทับผลรันรอบก่อนหน้า และรับประกันว่าจะไม่มีการย้อนกลับไปใช้เลขเวอร์ชันเดิมที่น้อยกว่า

## 13. Export ONNX
* ขั้นตอนการนำไฟล์ Checkpoint (.pth) ที่ดีที่สุด มาแปลงร่าง (Export) ให้อยู่ในฟอร์แมต ONNX 
* ช่วยเพิ่มความเร็วในการทำ Inference ลดการพึ่งพาไลบรารีขนาดใหญ่ในฝั่ง Backend

## 14. Model Deployment
* กระบวนการนำไฟล์ ONNX และไฟล์การตั้งค่าที่เกี่ยวข้อง (Config) จัดเก็บลงใน Model Registry หรือส่งต่อให้ API Server

## 15. Hot Reload
* กลไกของฝั่ง Backend Server ในการโหลดไฟล์โมเดลเวอร์ชันใหม่เข้าสู่ระบบ และนำไปใช้ประมวลผลคำขอใหม่ทันที โดยไม่ต้องปิด/เปิด Server ใหม่ (Zero-downtime)

## 16. Rollback
* แผนสำรองในการปรับย้อน (Revert) ไปใช้งานโมเดลเวอร์ชันก่อนหน้าทันที หากพบว่าโมเดลตัวใหม่สร้างผลลัพธ์ผิดพลาด (False Positive) อย่างรุนแรงในสภาพแวดล้อมจริง (Production)

## 17. Training Workflow
* ภาพรวมผังงาน (Workflow) แบบอัตโนมัติ (เช่น MLOps หรือ CI/CD สำหรับ AI) เพื่อจัดการตั้งแต่ การรับข้อมูลชุดใหม่ -> การทดสอบการเทรน -> การแพ็กเกจจิ้งไฟล์ -> จนถึงการ Deploy อย่างเป็นระบบ
