AI Inference Service
หน่วยประมวลผล AI ที่รันเป็น ONNX Worker subprocess ภายใน Backend เดียวกัน
AI Inference Service
หน่วยประมวลผล AI ที่รันเป็น ONNX Worker subprocess ภายใน Backend เดียวกัน
บทบาท
AI Inference Service คือ ONNX Worker subprocess ที่ถูกเรียกจาก API Application และส่งคืน:
- Segmentation Mask ระบุพิกเซลที่ถูกดัดแปลง
- Heatmap สำหรับ XAI overlay
- คะแนนตรวจจับภาพ AI-Generated
- Visual Risk Score (S_visual) — สเกลอิสระ 0–100% (เป็นปัจจัยหลักใน Worst-Case Trigger และหาก $\ge 80$ บังคับเป็น High ทันที)
โมเดลที่ทำงานใน Service นี้
1. ตรวจจับการตัดต่อภาพ (SegFormer)
- เทคนิค: Semantic Segmentation Preprocessing → SegFormer Model Inference
- ผลลัพธ์: Binary Segmentation Mask + Confidence Heatmap
- หน้าที่: ตรวจจับ Splicing, Copy-Move และการแก้ไขพิกเซล
2. ตรวจจับภาพสังเคราะห์จาก AI (AI-Gen Classifier)
- เทคนิค: CNN หรือ ViT-based Binary Classifier แยกต่างหาก
- ผลลัพธ์: ค่าความน่าจะเป็น (0–1) ว่าภาพสร้างจาก Generative AI
- หน้าที่: จับภาพจาก GAN, Diffusion Model ที่ไม่มี Splice Artifact แบบดั้งเดิม
3. สร้าง Heatmap (Mask-to-Heatmap Overlay)
- Input: Probability map ระดับพิกเซลจาก SegFormer ONNX (tiling 512 + overlap 64)
- วิธี: แปลง prob map เป็นภาพสีแล้วซ้อนทับบนภาพต้นฉบับ
- ผลลัพธ์: ไฟล์
{image_hash}_heatmap.jpgเก็บที่{LOCAL_UPLOAD_DIR}/heatmaps/เสิร์ฟผ่าน/uploadsstatic mount ให้ Mobile App ดึงไปแสดงผล
Inference Pipeline
scan_service เรียก inference_service
|
Preprocessing:
- ยืนยันไฟล์รูปจริง + ดึง EXIF (จำกัดภาพสูงสุด 100M พิกเซล)
- normalize เป็น PNG ก่อนส่ง AI
|
Forward Pass (SegFormer ONNX):
- tiling 512x512 overlap 64, softmax 2 classes
- prob map เต็ม resolution ต้นฉบับ
|
Post-processing:
- คำนวณ visual_risk_score และ ai_gen_probability จากค่า max ของ prob map
- แผนที่ความร้อนแบบ mask-to-heatmap overlay
- ใช้ SegFormer ตัวเดียวใน pipeline
|
OCR และ Text Extraction (Surya OCR v0.5.0):
- รองรับภาษาไทยและอังกฤษ
- ส่งมอบข้อความ OCR ให้ Scam Keyword Matching
|
XAI reasoning (Qwen2.5-1.5B สำหรับสร้างคำอธิบายภาษาไทย)
|
บันทึกรูปต้นฉบับและ Heatmap ลง Storage
|
ส่งคืนคะแนนภาพ, ความน่าจะเป็น AI-Gen, บริเวณผิดปกติ, Heatmap และข้อความ OCR
รายละเอียด Runtime
| ด้าน | รายละเอียด |
|---|---|
| Framework (Training) | PyTorch |
| Framework (Inference) | ONNX Runtime |
| ความเร็วที่เพิ่มขึ้นจาก ONNX | เป้าหมาย ≥2 เท่าเทียบ Native PyTorch รุ่นเดียวกัน (วิธีวัด: GPU T4 เฉลี่ย 100 ภาพ; ตัวเลขจริงต้องบันทึกจาก benchmark) |
| รูปแบบโมเดล | ไฟล์ ONNX (tile 512 / overlap 64) |
| Input Tensor | ภาพ RGB ขนาด 512x512 ต่อ tile |
| Output Tensor | 2 classes ต่อ tile (authentic / tampered) |
| OCR | Surya OCR v0.5.0 (Native PyTorch) |
| XAI reasoning | Qwen2.5-1.5B สำหรับสร้างคำอธิบายภาษาไทย |
| Heatmap | แผนที่ความร้อนแบบ mask-to-heatmap overlay |
| Topology | ONNX Worker subprocess ภายใน Backend เดียวกัน |
การจัดการโมเดล
- Model Weight แบบ ONNX; ตาราง model_versions เก็บ registry พร้อม metrics
- Admin deploy ผ่าน endpoint deploy/dry-run — worker โหลดโมเดลใหม่ผ่าน hot-reload signal โดยไม่ restart API service (zero-downtime; งานที่กำลังรันจบด้วยโมเดลเดิม — รายละเอียดดู
Document/admin/admin.md§deploy) - Semantic Versioning:
segformer_v1.0.0,segformer_v1.1.0เป็นต้น
การพิจารณา Scaling
- Subprocess นี้ใช้ทรัพยากรมากที่สุดในระบบ (GPU/CPU สำหรับ Model Inference)
- การแยกเป็น subprocess ช่วยแยกภาระงาน AI ออกจากการตอบสนอง request หลักของ FastAPI
- Redis Cache (SHA-256, TTL 30 วัน) ใน API Application ลดการเรียก subprocess นี้สำหรับรูปที่เคยวิเคราะห์แล้ว