# การออกแบบโมเดลปัญญาประดิษฐ์ (AI Model Design)

เอกสารนี้ตอบคำถามว่า **โมเดล AI ถูกออกแบบอย่างไร และทำงานอย่างไร** โดยไม่ครอบคลุมถึงกระบวนการเทรน (Training) ซึ่งจะแยกอยู่ใน `training.md`

## 1. ภาพรวมของโมเดล AI
* **วัตถุประสงค์**: เพื่อตรวจจับและระบุตำแหน่งของร่องรอยการตัดต่อ ดัดแปลง หรือปลอมแปลงในรูปภาพ (Image Forgery Detection / Manipulation Localization) 
* **บทบาทของโมเดลในระบบ**: ทำหน้าที่เป็นแกนหลักในการวิเคราะห์รูปภาพที่ผู้ใช้อัปโหลดเข้ามาจากแอปพลิเคชัน โดยรับข้อมูลภาพดิบมาประมวลผลเพื่อค้นหาพิกเซลที่ผิดปกติ
* **ขอบเขตการทำงาน**: ครอบคลุมตั้งแต่การรับภาพเข้า (Input) การสกัดจุดเด่น (Feature Extraction) ไปจนถึงการสร้างภาพแผนที่ความร้อน (Heatmap) ที่ระบุจุดเสี่ยงบนรูปภาพและส่งคืนผลลัพธ์กลับไปยัง API
* **ชั้นวิเคราะห์ข้อความ (Textual Layer)**: ขับเคลื่อนด้วย Surya-OCR เวอร์ชัน v0.5.0 (Native PyTorch — โมเดล `vikp/surya_det3` สำหรับตรวจจับกล่องข้อความ และ `vikp/surya_rec2` สำหรับอ่านข้อความ) โดยข้อความที่สกัดได้จะถูกส่งเข้าสู่กระบวนการคัดกรองคำหลอกลวง (Scam-keyword Scoring) เพื่อคำนวณคะแนน S_text

## 2. เหตุผลในการเลือก SegFormer
* **ทำไมเลือก SegFormer**: SegFormer เป็นสถาปัตยกรรมแบบ Transformer ที่ออกแบบมาสำหรับงาน Semantic Segmentation โดยเฉพาะ ซึ่งทำงานได้รวดเร็วและแม่นยำโดยไม่ต้องพึ่งพากลไก Positional Encoding ที่ซับซ้อน ทำให้มีประสิทธิภาพสูง
* **ข้อดี**: 
  * มีน้ำหนักเบาและทำงานได้เร็วกว่า Vision Transformer รุ่นอื่น ๆ (Efficient)
  * ประสิทธิภาพสูงในการวิเคราะห์รายละเอียดทั้งในระดับกว้าง (Global Context) และระดับย่อย (Local Details) ผ่าน Multi-scale Feature
* **ข้อจำกัด**: อาจต้องใช้ทรัพยากรการประมวลผล (RAM/VRAM) สูงกว่าโมเดลแบบ CNN แบบดั้งเดิมในบางกรณี
* **ความเหมาะสมกับโครงงาน**: โครงงานต้องการชี้ชัดบริเวณที่ถูกตัดต่อในระดับพิกเซล (Pixel-level) ทำให้ตรงกับโจทย์ Semantic Segmentation และความรวดเร็วของ SegFormer ตอบโจทย์การใช้งานบนแอปพลิเคชันที่ต้องการผลลัพธ์ทันที

## 3. สถาปัตยกรรมของโมเดล
* **Input**: รับรูปภาพสี (RGB) ขนาดที่กำหนด
* **Preprocessing**: การปรับขนาดภาพ (Resize) และทำ Normalization ให้อยู่ในช่วงค่าที่โมเดลรับได้
* **MiT Encoder (Mix Transformer Encoder)**: ทำหน้าที่สกัด Features จากภาพในหลายระดับความละเอียด (Hierarchical features) เพื่อดึงข้อมูลตั้งแต่รูปแบบรวม ๆ จนถึงรายละเอียดระดับพิกเซล
* **Multi-scale Feature**: การนำฟีเจอร์จากหลายระดับชั้น (Layers) มาประมวลผลร่วมกัน เพื่อรักษาข้อมูลขอบเขตของบริเวณที่ถูกดัดแปลงให้คมชัด
* **SegFormer Decoder**: โครงสร้างแบบ All-MLP Decoder ที่รวมฟีเจอร์จาก Encoder เข้าด้วยกันเพื่อสร้างการทำนายคลาส
* **Pixel Prediction**: การประเมินผลลัพธ์ระดับพิกเซลว่าพิกเซลใดคือภาพดั้งเดิม และพิกเซลใดคือบริเวณที่ถูกดัดแปลง

## 4. โครงสร้างข้อมูล
* **Input**: โครงสร้างแบบ Tensor ขนาด `[Batch, Channel, Height, Width]` ที่ `[1, 3, 512, 512]` (ความละเอียดนำเข้ามาตรฐานของโมเดลคือ 512×512 พิกเซล ตามที่โมเดลถูกฝึกสอนไว้ — Tiled Inference ตัดภาพเป็น Tile ขนาด 512×512 พร้อม Overlap 64px ตรงกับ `ONNX_TILE_SIZE=512` / `ONNX_TILE_OVERLAP=64` ใน `server/app/core/config.py`)
* **Output**: Tensor ที่เก็บค่าความน่าจะเป็นของการเป็นรอยดัดแปลง (Probability Map) ขนาดเท่ารูป Input
* **Segmentation Mask**: ภาพขาวดำ (Binary Mask) ที่แบ่งแยกพิกเซลที่น่าจะถูกปลอมแปลงออกอย่างชัดเจน
* **Heatmap**: อาร์เรย์ค่าความเชื่อมั่น (Confidence Score) ของแต่ละพิกเซล 
* **Risk Score**: คะแนนความเสี่ยงรวม (0-100) ที่คำนวณตามแนวทาง Hybrid Worst-Case Trigger (S_base = max(S_visual, S_text, S_source) + Compounding) ร่วมกับการแจกแจงความเสี่ยง 3 มิติอิสระเต็ม 100% แล้วจัดเกรดความเสี่ยง: Low (0-39), Medium (40-69), High (70-100) โดยกรณี $S_{visual} \ge 80$ เป็น High ทันที

## 5. Explainable AI
* **Heatmap**: การแปลงค่าตัวเลขความเชื่อมั่นเป็นสี (เช่น แดง=เสี่ยงมาก, น้ำเงิน=ปลอดภัย) เพื่อให้ผู้ใช้เข้าใจผลการตรวจจับด้วยตาเปล่า
* **Overlay**: การนำ Heatmap ไปซ้อนทับภาพต้นฉบับด้วยความโปร่งใส เพื่อแสดงตำแหน่งปัญหาให้ผู้ใช้อนุมานและตรวจสอบด้วยตนเองต่อได้
* **Visualization**: เทคนิคการแสดงผลบน UI ของแอปเพื่อให้สื่อสารสิ่งที่ AI "มองเห็น" ออกมาให้ชัดเจนที่สุด

## 6. AI Inference Pipeline
* **การไหลของข้อมูล (Data Flow)**: 
  1. API โหลดภาพเข้าหน่วยความจำและส่งเข้า Pipeline
  2. การทำ Preprocessing บนภาพดิบ
  3. ส่งผ่านโมเดล AI (Forward Pass)
  4. ทำ Post Processing ดึงข้อมูล Mask และ Heatmap
* **Post Processing**: การแปลงผลลัพธ์ดิบจาก Tensor กลับเป็นไฟล์รูปภาพ (เช่น PNG) การกรองสัญญาณรบกวน (Noise) ออก และรวมผลคะแนน (Risk Score) ด้วยแนวทาง Hybrid Worst-Case Trigger (S_base = max(S_visual, S_text, S_source) + Compounding) พร้อมจัดเกรด Low (0-39), Medium (40-69), High (70-100) โดยกรณี $S_{visual} \ge 80$ เป็น High ทันที
* **เป้าหมายประสิทธิภาพ (Target Metrics)**: Accuracy + mDice ≥ 85% วัดบน held-out test set ที่ไม่ซ้ำ train/val (แบ่งแบบ stratified ตาม class/แหล่งข้อมูล, test set ถูก freeze — รายละเอียดดู `training.md` §2–§3) ; Latency วิเคราะห์ใหม่ P50 ≤ 15s / Cache Hit P95 ≤ 3s / AI Inference ≤ 10s (GPU) โดยรวมผลการทำงานผ่าน ONNX Runtime ใน Worker Subprocess แล้ว

## 7. Model Version
* **Versioning**: ใช้ระบบ Tagging หรือ Semantic Versioning (เช่น `segformer_v1.0.0`) เพื่อแยกแยะรุ่นของโมเดล
* **Checkpoint**: ไฟล์น้ำหนักของโมเดล (Weights)
* **ONNX**: การแปลงโมเดลให้อยู่ในฟอร์แมตมาตรฐาน ONNX (Open Neural Network Exchange) เพื่อทำ Inference ให้รวดเร็วและเป็นอิสระจาก Framework ตอนฝึกสอน
* **Model Registry**: แหล่งเก็บข้อมูลโมเดลเวอร์ชันต่างๆ ที่พร้อมใช้งาน (Production-ready)

## 8. ข้อจำกัดของโมเดล
* ความแม่นยำอาจลดลงหากภาพเป้าหมายถูกลดคุณภาพลงอย่างหนัก (เช่น ถูกบีบอัดภาพซ้ำ ๆ ผ่านแอปพลิเคชันแชทหลายทอด)
* ความท้าทายในการตรวจพบภาพที่สร้างขึ้นจาก Generative AI เต็มรูปแบบ เนื่องจากไม่มีการ "ตัดต่อ" เชิงโครงสร้างพิกเซลแบบดั้งเดิม

## 9. แนวทางพัฒนาในอนาคต
* การเสริมโมเดลย่อย (Ensemble Model) เพื่อตรวจสอบลักษณะของ AI-Generated Images ควบคู่กับภาพตัดต่อ
* การบีบอัดขนาดโมเดลด้วยเทคนิค Quantization ให้พร้อมทำงานแบบ On-device ภายในตัวมือถือเองในอนาคต
