Image Labeling คืองานด้านคอมพิวเตอร์วิทัศน์ที่โครงข่ายประสาทเทียมกำหนดป้ายกำกับให้กับรูปภาพจากชุดคลาสที่กำหนดไว้ล่วงหน้า ตั้งแต่แบบง่าย (แมว สุนัข รถยนต์) ไปจนถึงแบบเฉพาะ (ชนิดของพืช รุ่นสมาร์ทโฟน ภาพสแกนทางการแพทย์) ในการพัฒนาแอปมือถือ Image Labeling ถูกใช้สำหรับการติดป้ายกำกับรูปภาพในแกลเลอรีอัตโนมัติ การกลั่นกรองเนื้อหาผู้ใช้ การค้นหาสินค้าด้วยภาพจากรูปภาพ และแอปพลิเคชัน AR ตามข้อมูลจาก Google ML Kit, 2025 ตัวจำแนกในตัวสามารถจดจำได้มากกว่า 400 หมวดหมู่ใน 10–20 มิลลิวินาทีต่อเฟรมด้วยความแม่นยำ 91% (top-1)
ประเด็นสำคัญ
Image Labeling เป็นประเภทย่อยของการจำแนกรูปภาพที่โมเดลรับรูปภาพเป็นอินพุตและส่งคืนความน่าจะเป็นสำหรับแต่ละคลาสจากชุดฝึก ต่างจากการตรวจจับวัตถุ Image Labeling ไม่ระบุตำแหน่งของวัตถุในรูปภาพ — เพียงแค่การมีอยู่หรือไม่มีอยู่ ต่างจากการแบ่งส่วนรูปภาพ มันไม่ได้ระบุขอบเขตของวัตถุ Image Labeling ตอบคำถาม “ในรูปมีอะไร?” ไม่ใช่ “ที่ไหนและมีอะไรในรูป?”
สถาปัตยกรรมตัวจำแนก: CNN backbone (MobileNet, ResNet, EfficientNet) แยกแผนที่คุณลักษณะจากรูปภาพ Global Average Pooling ย่อขนาดเชิงพื้นที่ และเลเยอร์ที่เชื่อมต่ออย่างสมบูรณ์ (Dense) พร้อมการเปิดใช้งาน Softmax สร้างความน่าจะเป็นของคลาส MobileNetV2 เป็น backbone ที่ได้รับความนิยมมากที่สุดสำหรับอุปกรณ์มือถือ: 3.5M พารามิเตอร์, การอนุมาน 0.5–2 มิลลิวินาทีบน Pixel 6 ผ่าน GPU EfficientNet-Lite เป็นทางเลือกที่มีอัตราส่วนความแม่นยำ/พารามิเตอร์ที่ดีกว่า
ความแม่นยำ Top-1 เทียบกับ Top-5: top-1 — โมเดลทำนายคลาสหลักได้ถูกต้อง (91% ใน ML Kit); top-5 — คลาสที่ถูกต้องอยู่ในห้าคลาสที่น่าจะเป็นไปได้มากที่สุด (98% ใน ML Kit) สำหรับแอปพลิเคชันในระบบผลิต ให้ใช้ top-5 และแสดงตัวเลือกป้ายกำกับหลายรายการให้ผู้ใช้ สำหรับการกลั่นกรองเนื้อหา ให้ใช้ top-1 โดยมีเกณฑ์ความเชื่อมั่น >= 0.8 (ลดอัตราผลบวกลวงลง 40%)
| สถาปัตยกรรม | พารามิเตอร์ | ความหน่วง | Top-1 | ขนาด |
|---|---|---|---|---|
| MobileNetV2 | 3.5M | 0.5–2 มิลลิวินาที | 90.2% | 14 MB |
| MobileNetV3 | 2.5M | 0.3–1.5 มิลลิวินาที | 91.5% | 10 MB |
| EfficientNet-Lite0 | 4.7M | 1–3 มิลลิวินาที | 92.3% | 18 MB |
| ResNet-50 | 25.6M | 10–30 มิลลิวินาที | 95.2% | 98 MB |
บนอุปกรณ์เทียบกับคลาวด์: การจำแนกบนอุปกรณ์ (ML Kit, Core ML) ให้ความหน่วง 1–20 มิลลิวินาทีพร้อมความเป็นส่วนตัวของข้อมูลอย่างสมบูรณ์ API คลาวด์ (Google Cloud Vision, AWS Rekognition) มีความหน่วง 500–2000 มิลลิวินาทีบวกค่าใช้จ่ายต่อคำขอ แต่แม่นยำกว่า (97–99%) เนื่องจากโมเดลที่ใหญ่กว่า (ViT, CLIP) สำหรับแอปพลิเคชันแบบเรียลไทม์ (กล้อง, AR) ให้เลือกแบบบนอุปกรณ์ สำหรับสถานการณ์ที่ซับซ้อน (การแพทย์, การวิเคราะห์โดยผู้เชี่ยวชาญ) ให้ใช้คลาวด์พร้อมการสำรองบนอุปกรณ์
ML Kit Image Labeling เป็นไลบรารีพร้อมใช้งานจาก Google สำหรับการจำแนกรูปภาพบนอุปกรณ์ มีให้เลือกสองโหมด: บนอุปกรณ์ (ฟรี, ป้ายกำกับมากกว่า 400 รายการ, 10–20 มิลลิวินาที) และคลาวด์ (เสียเงิน, ป้ายกำกับมากกว่า 10,000 รายการ, มากกว่า 500 มิลลิวินาที) เวอร์ชันบนอุปกรณ์ใช้ MobileNetV3 พร้อมการควอนไทซ์ INT8 ใช้พื้นที่ดิสก์ 4 MB ML Kit จะตรวจจับการวางแนวของรูปภาพโดยอัตโนมัติและปรับขนาดให้เหมาะสมก่อนการจำแนก
ML Kit API: InputImage (จาก Bitmap, media.Image, filePath) → ImageLabeler → OnSuccessListener พร้อมรายการ ImageLabel (ป้ายกำกับ, ความเชื่อมั่น, ดัชนี) เกณฑ์ความเชื่อมั่น (ค่าเริ่มต้น 0.5) คือความเชื่อมั่นขั้นต่ำในการส่งคืนป้ายกำกับ การเพิ่มเกณฑ์เป็น 0.7 จะลดจำนวนป้ายกำกับต่อเฟรม แต่เพิ่มความแม่นยำของแต่ละป้ายกำกับ สำหรับการกลั่นกรองเนื้อหา ให้ตั้งค่าเกณฑ์เป็น 0.8
val labeler = ImageLabeling.getClient(
ImageLabelerOptions.DEFAULT_OPTIONS
)
labeler.process(inputImage)
.addOnSuccessListener { labels ->
labels
.filter { it.confidence >= 0.7f }
.forEach { label ->
log("Label: ${label.label}")
log("Confidence: ${label.confidence}")
}
}
.addOnFailureListener { error -> handleError(error) }
ML Kit บน iOS: API คล้ายกับ Android ใช้ UIImage หรือ CMSampleBuffer ML Kit ใช้ Core ML + ANE บนอุปกรณ์ A12+ โดยอัตโนมัติ สำหรับ iOS 16+ ML Kit Image Labeling ให้ความหน่วง 8–15 มิลลิวินาทีบน iPhone 15 Pro เพื่อลดความหน่วงให้ส่งผ่านความละเอียดรูปภาพที่เล็กที่สุดเท่าที่เป็นไปได้ (224x224 สำหรับ MobileNet) — ML Kit จะปรับขนาดโดยอัตโนมัติ แต่การแปลงรูปภาพขนาดใหญ่เพิ่มโอเวอร์เฮด 2–5 มิลลิวินาที
Core ML คือเฟรมเวิร์กของ Apple สำหรับเรียกใช้โมเดล ML บนอุปกรณ์ เมื่อรวมกับ Vision Framework (VNCoreMLRequest) แล้ว Core ML ช่วยให้สามารถจำแนกรูปภาพด้วยโค้ดเพียงเล็กน้อย Apple มีโมเดลในตัว: SqueezeNet (5 MB, 80.5% top-1), ResNet50 (98 MB, 95.2%), MobileNetV2 (14 MB, 90.2%) โมเดลในรูปแบบ .mlmodel หรือ .mlpackage จะถูกแปลงผ่าน coremltools จาก TensorFlow หรือ PyTorch
VNCoreMLRequest คือ Vision API ที่จัดการการประมวลผลล่วงหน้าของรูปภาพ (การปรับขนาด, การครอบตัด, การแปลงพื้นที่สี) และส่งผลลัพธ์ไปยังโมเดล Vision ส่งคืน VNClassificationObservation พร้อม identifier (ชื่อคลาส) และ confidence (0..1) MaxCandidates คือจำนวนป้ายกำกับสูงสุดที่ส่งคืน (ค่าเริ่มต้น 1) สำหรับการจำแนกแบบเลือกอัตโนมัติ ให้ใช้ VNCoreMLRequest โดยมี imageCropAndScaleOption = .centerCrop
guard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { return }
let request = VNCoreMLRequest(model: model) { request, _ in
guard let results = request.results as? [VNClassificationObservation] else { return }
results.prefix(5).forEach { obs in
print("ป้ายกำกับ: \(obs.identifier), ความเชื่อมั่น: \(obs.confidence)")
}
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])
Core ML เทียบกับ ML Kit บน iOS: Core ML เป็นแบบเนทีฟ ไม่ต้องใช้ SDK เพิ่มเติม และปรับให้เหมาะสมกับ ANE (Apple Neural Engine) มากกว่า ML Kit แม่นยำกว่าบนฉากที่ซับซ้อนด้วยโมเดลของ Google Core ML รองรับโมเดลใดก็ได้ (แปลงผ่าน coremltools) ในขณะที่ ML Kit รองรับเฉพาะโมเดลของตัวเองเท่านั้น สำหรับการนำไปใช้อย่างรวดเร็ว ให้ใช้ ML Kit สำหรับการควบคุมโมเดลสูงสุด ให้ใช้ Core ML วิธีการที่ใช้งานได้จริง: ใช้ทั้งสองเฟรมเวิร์กในแอปเดียว — ML Kit สำหรับป้ายกำกับมาตรฐาน, Core ML สำหรับป้ายกำกับที่กำหนดเอง
โมเดล Image Labeling ที่กำหนดเอง — การฝึกตัวจำแนกของคุณเองสำหรับงานเฉพาะ: การรู้จำคุณภาพผลไม้, การตรวจจับข้อบกพร่องบนสายการผลิต, การจำแนกสายพันธุ์สุนัข กระบวนการประกอบด้วยการรวบรวมชุดข้อมูล (มากกว่า 1,000 รูปภาพต่อคลาส), การ annotate, การฝึกผ่าน transfer learning บน MobileNetV2 หรือ EfficientNet ที่ผ่านการฝึกมาแล้ว และการแปลงเป็น TFLite / Core ML
Transfer Learning — วิธีการหลักในการฝึกตัวจำแนกบนมือถือ นำโมเดลที่ผ่านการฝึกบน ImageNet มา แช่แข็งเลเยอร์ด้านล่าง (CNN backbone) และฝึกเลเยอร์ด้านบนใหม่ (fine-tuning) ซึ่งต้องการเพียง 100–500 รูปภาพต่อคลาสและใช้เวลา 1–2 ชั่วโมงบน Google Colab (GPU) ไลบรารี: TensorFlow Keras (Android), PyTorch + coremltools (iOS) ผลลัพธ์: ความแม่นยำ 95–98% บนคลาสเป้าหมาย
// การอนุมานโมเดล TFLite ที่กำหนดเอง
val interpreter = Interpreter(loadModelFile(context))
val inputImage = TensorImage.fromBitmap(bitmap)
.apply { load(Bitmap.createScaledBitmap(bitmap, 224, 224, true)) }
val output = Array(1) { FloatArray(NUM_CLASSES) }
interpreter.run(inputImage.tensorBuffer, output)
val probabilities = TensorLabel.mapIndexToLabels(output[0])
val topClass = probabilities.maxByOrNull { it.value }
ML Kit Custom Model API — ทางเลือก: ไม่ต้องเขียนโค้ดสำหรับ TFLite Interpreter — ML Kit โหลดโมเดลและจัดการการประมวลผลล่วงหน้าโดยอัตโนมัติ Image Labeler ที่กำหนดเองยอมรับโมเดล TFLite ที่มีขนาดอินพุต 224x224x3 และเอาต์พุต score float[NUM_CLASSES] เพียงระบุไฟล์โมเดลและรับป้ายกำกับมาตรฐาน ML Kit Custom Model API แนะนำให้ใช้หากโมเดลตรงกับรูปแบบ TFLite หากต้องการควบคุมการอนุมานอย่างละเอียดมากขึ้น (เกณฑ์ต่อคลาส) ให้ใช้ TFLite Interpreter โดยตรง
TFLite (TensorFlow Lite) คือรูปแบบโมเดลของ Google สำหรับอุปกรณ์มือถือและอุปกรณ์ขอบ รองรับการควอนไทซ์ (FP16, INT8) ซึ่งลดขนาดโมเดลลง 4 เท่าและเพิ่มความเร็ว 2–3 เท่า โดยสูญเสียความแม่นยำเล็กน้อย (1–2%) TFLite ทำงานบน Android ผ่าน GPU Delegate (OpenGL/OpenCL) และบน iOS ผ่าน Core ML Delegate TFLite Task API มอบอินเทอร์เฟซแบบรวมสำหรับ Image Classifier, Object Detector และงานอื่น ๆ
Core ML คือรูปแบบของ Apple (.mlpackage — ใหม่, .mlmodel — เก่า) รองรับการควอนไทซ์ (FP16) และการทำ palettization ของน้ำหนัก (ถึง 1/2/4/6/8 บิต) ซึ่งให้การบีบอัดโมเดลสูงถึง 80% Core ML ใช้ ANE (Neural Engine), GPU และ CPU — ระบบจะเลือกเครื่องมือที่เหมาะสมที่สุดโดยอัตโนมัติ การแปลงจาก PyTorch ผ่าน torch.onnx.export + coremltools จาก TensorFlow ผ่าน tf-keras + coremltools iOS 18+ รองรับการฝึกบนอุปกรณ์ผ่าน Core ML Training API
| คุณลักษณะ | TFLite | Core ML |
|---|---|---|
| ขนาด (MobileNetV2) | 14 MB (FP32) / 3.5 MB (INT8) | 14 MB (FP16) / 2.8 MB (4 บิต) |
| เครื่องมืออนุมาน | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (อัตโนมัติ) |
| การควอนไทซ์ | FP16, INT8, DynamicRange | FP16, Palettization (1-8 บิต) |
| ประสิทธิภาพ iOS | Core ML Delegate (2–5 มิลลิวินาที) | ANE ดั้งเดิม (1–3 มิลลิวินาที) |
| เครื่องมือ | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX เป็นรูปแบบกลาง: แปลงโมเดลเป็น ONNX (PyTorch → ONNX, TensorFlow → ONNX) จากนั้นเป็น TFLite / Core ML ผ่าน onnx2tf หรือ onnx2coreml ONNX เป็นรูปแบบรวมที่รองรับโดยเฟรมเวิร์กมากกว่า 70 รายการ ซึ่งช่วยลดความซับซ้อนของไปป์ไลน์: โมเดลที่ฝึกแล้วหนึ่งโมเดล → ONNX → รูปแบบดั้งเดิมสำหรับทั้งสองแพลตฟอร์ม การฝึกใน PyTorch + การแปลงเป็น ONNX → TFLite (Android) / Core ML (iOS) เป็นไปป์ไลน์ที่แนะนำสำหรับโครงการข้ามแพลตฟอร์ม
การติดป้ายกำกับรูปภาพอัตโนมัติ — แอปแกลเลอรี (Google Photos, Apple Photos) กำหนดป้ายกำกับให้รูปภาพโดยอัตโนมัติ: “ชายหาด”, “พระอาทิตย์ตก”, “สุนัข”, “อาหาร” ML Kit Image Labeling ประมวลผลแต่ละรูปภาพจากแกลเลอรีในพื้นหลัง — 1–2 วินาทีสำหรับ 100 รูปภาพ (แบตช์) ผู้ใช้สามารถค้นหาตามป้ายกำกับได้โดยไม่ต้องเรียงลำดับด้วยตนเอง Google Photos ใช้การจำแนกบนอุปกรณ์พร้อมการตรวจสอบบนเซิร์ฟเวอร์ในภายหลังสำหรับฉากที่ซับซ้อน
การกลั่นกรองเนื้อหา — การตรวจจับรูปภาพที่ไม่พึงประสงค์ในเนื้อหาผู้ใช้โดยอัตโนมัติ (โซเชียลเน็ตเวิร์ก, ตลาดซื้อขาย, แพลตฟอร์ม UGC) ML Kit Custom Model ตรวจจับเนื้อหา NSFW, ความรุนแรง และการโฆษณาชวนเชื่อด้วยความแม่นยำ 92–96% เกณฑ์การกระตุ้น — ความเชื่อมั่น 0.8 เพื่อลดผลบวกลวง (รูปภาพทางการแพทย์ที่ถูกกฎหมาย) ให้ใช้คณะกรรมการตัวจำแนก: Image Labeling + Object Detection + Blur Detection การกลั่นกรองบนอุปกรณ์เร็วกว่าและปกป้องความเป็นส่วนตัวของผู้ใช้
การค้นหาสินค้าด้วยภาพ — ผู้ใช้ถ่ายรูปสินค้า (รองเท้าผ้าใบ, กระเป๋า, เฟอร์นิเจอร์) แอปจะระบุป้ายกำกับและค้นหาสินค้าที่คล้ายกันในแคตตาล็อก Image Labeling จะจำกัดการค้นหาให้แคบลงเหลือหมวดหมู่ จากนั้นตัวอธิบายคุณลักษณะ (เวกเตอร์คุณลักษณะ) จะค้นหารายการที่คล้ายกันทางภาพ Pinterest Lens, Google Lens และ Amazon StyleSnap ใช้วิธีนี้ การจำแนกบนอุปกรณ์ให้ผลลัพธ์ใน 10–30 มิลลิวินาที การค้นหาบนคลาวด์ใน 200–500 มิลลิวินาที
// Image Labeling กับ Core ML สำหรับการค้นหาด้วยภาพ
let request = VNCoreMLRequest(model: productClassifier) { req, _ in
guard let result = req.results?.first as? VNClassificationObservation,
result.confidence > 0.6 else { return }
SearchService.findSimilarProducts(
category: result.identifier,
image: capturedPhoto,
limit: 10
) { products in
DispatchQueue.main.async {
self.showResults(products)
}
}
}
แอป AR และการศึกษา — Image Labeling จำแนกวัตถุแบบเรียลไทม์ผ่านกล้อง ผู้ใช้ชี้โทรศัพท์ไปที่ต้นไม้ — แอปแสดงชื่อ คำแนะนำการดูแล และตารางการรดน้ำ ชี้ไปที่ชิ้นส่วนกลไก — อธิบายวัตถุประสงค์ ข้อกำหนด: ความหน่วง < 30 มิลลิวินาที EfficientNet-Lite บนอุปกรณ์เรือธงให้ 15–25 มิลลิวินาที ในที่แสงน้อยความแม่นยำลดลง — ให้ใช้เกณฑ์ความเชื่อมั่นแบบปรับได้ (ลดเกณฑ์ในที่แสงน้อยเพื่อชดเชยคุณภาพอินพุตที่ลดลง)
คำถามที่พบบ่อย
Image Labeling กำหนดว่ามีวัตถุใดบ้างในรูปภาพ แต่ไม่ได้ระบุตำแหน่งของวัตถุ Object Detection ค้นหาวัตถุและส่งคืนกรอบขอบเขตของแต่ละวัตถุ Image Labeling เร็วกว่า (1–20 มิลลิวินาที เทียบกับ 20–100 มิลลิวินาที) ต้องการข้อมูลการฝึกน้อยกว่า แต่ไม่ให้ข้อมูลตำแหน่ง สำหรับการจำแนกแบบง่าย (แมว/สุนัข) ให้ใช้ Image Labeling สำหรับการรู้จำแบบเจาะจง (จำนวนวัตถุ, อยู่ที่ไหน) ให้ใช้ Object Detection
ไม่ ML Kit Image Labeling ทำงานบนอุปกรณ์อย่างสมบูรณ์ โมเดลจะถูกดาวน์โหลดเมื่อเปิดใช้งานครั้งแรก (โหมดดาวน์โหลด — 4 MB) และจัดเก็บไว้ในเครื่อง โมเดล Core ML จะมาพร้อมกับแอป โมเดล TFLite ที่กำหนดเองเป็นส่วนหนึ่งของ APK การคำนวณทั้งหมดทำงานบนอุปกรณ์และไม่มีข้อมูลใดถูกส่งไปยังเซิร์ฟเวอร์ ซึ่งรับประกันความเป็นส่วนตัวของผู้ใช้และการทำงานแบบออฟไลน์ การจำแนกบนคลาวด์ (Google Cloud Vision) เป็นทางเลือกที่ต้องใช้อินเทอร์เน็ตและให้ความแม่นยำสูงกว่า
สำหรับ transfer learning บน MobileNetV2: ขั้นต่ำ 50–100 รูปภาพต่อคลาส, เหมาะสมที่สุด 300–500 ยิ่งมีความหลากหลายมาก (มุม, แสง, พื้นหลัง) ความแม่นยำยิ่งสูง สำหรับการฝึกจากศูนย์ (ไม่มีโมเดลที่ผ่านการฝึกมาก่อน) ต้องใช้รูปภาพอย่างน้อย 1,000 รูปต่อคลาส คำแนะนำ: เริ่มต้นด้วย 200 รูปภาพต่อคลาส ประเมินความแม่นยำ และเพิ่มข้อมูลสำหรับคลาสที่มีความแม่นยำต่ำ Data augmentation (การหมุน, การปรับขนาด, การเลื่อน) จะเพิ่มชุดข้อมูลที่มีประสิทธิภาพ 3–5 เท่าโดยไม่ต้องรวบรวมข้อมูลใหม่
วิธีการหลัก: การควอนไทซ์ INT8 หลังการฝึก — ลดขนาดลง 4 เท่าโดยสูญเสียความแม่นยำ 1–2%; การตัด (pruning) — การบีบอัดสูงถึง 50%; การกลั่น (distillation) — การบีบอัดสูงถึง 80% MobileNetV2 INT8 ใช้พื้นที่ 3.5 MB, SqueezeNet — 5 MB ขนาดเป้าหมาย — ไม่เกิน 10 MB สำหรับการโหลดทันทีโดยไม่มีตัวบ่งชี้ความคืบหน้า
ML Kit Image Labeling v2 แสดงความแม่นยำ top-1 91% บนชุดทดสอบของ Google (มากกว่า 400 คลาส) ความแม่นยำ top-5 — 98% ในมุมและสภาพแสงที่ไม่ได้มาตรฐาน ความแม่นยำอาจลดลงเหลือ 75–85% สำหรับการผลิต แนะนำให้ใช้เกณฑ์ความเชื่อมั่น 0.7 สำหรับการกรองการทำนายคุณภาพต่ำอย่างมีเสถียรภาพ หากความแม่นยำไม่เพียงพอ ให้ใช้โมเดลที่กำหนดเองที่ฝึกบนชุดข้อมูลเฉพาะ: ความแม่นยำ 95–98% บนคลาสเป้าหมาย
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ