Image Labeling là một tác vụ thị giác máy tính trong đó mạng nơ-ron gán nhãn cho hình ảnh từ một tập hợp các lớp được xác định trước: từ đơn giản (mèo, chó, xe hơi) đến cụ thể (loài thực vật, mẫu điện thoại thông minh, ảnh chụp y tế). Trong phát triển di động, Image Labeling được sử dụng để gắn thẻ tự động ảnh trong thư viện, kiểm duyệt nội dung người dùng, tìm kiếm sản phẩm trực quan bằng ảnh và các ứng dụng AR. Theo Google ML Kit, 2025, bộ phân loại tích hợp nhận dạng hơn 400 danh mục trong 10–20 ms mỗi khung hình với độ chính xác 91% (top-1).
Những điểm chính
Image Labeling là một dạng con của phân loại hình ảnh trong đó mô hình nhận đầu vào là hình ảnh và trả về xác suất cho mỗi lớp từ tập huấn luyện. Không giống như phát hiện đối tượng, Image Labeling không xác định vị trí của các đối tượng trong hình ảnh — chỉ xác định sự hiện diện hay vắng mặt của chúng. Không giống như phân đoạn hình ảnh, nó không vẽ đường viền của đối tượng. Image Labeling trả lời câu hỏi “có gì trong ảnh?”, không phải “ở đâu và có gì trong ảnh?”
Kiến trúc bộ phân loại: một backbone CNN (MobileNet, ResNet, EfficientNet) trích xuất bản đồ đặc trưng từ hình ảnh, Global Average Pooling thu gọn các kích thước không gian và một lớp kết nối đầy đủ (Dense) với kích hoạt Softmax tạo ra xác suất các lớp. MobileNetV2 là backbone phổ biến nhất cho thiết bị di động: 3,5M tham số, suy luận 0,5–2 ms trên Pixel 6 qua GPU. EfficientNet-Lite là một giải pháp thay thế với tỷ lệ độ chính xác/tham số tốt hơn.
Độ chính xác Top-1 so với Top-5: top-1 — mô hình dự đoán đúng lớp chính (91% với ML Kit); top-5 — lớp chính xác nằm trong năm lớp có khả năng cao nhất (98% với ML Kit). Đối với ứng dụng sản xuất, hãy sử dụng top-5 và hiển thị cho người dùng nhiều tùy chọn nhãn. Đối với kiểm duyệt nội dung, hãy sử dụng top-1 với ngưỡng tin cậy >= 0,8 (giảm tỷ lệ dương tính giả 40%).
| Kiến trúc | Tham số | Độ trễ | Top-1 | Kích thước |
|---|---|---|---|---|
| MobileNetV2 | 3,5M | 0,5–2 ms | 90,2% | 14 MB |
| MobileNetV3 | 2,5M | 0,3–1,5 ms | 91,5% | 10 MB |
| EfficientNet-Lite0 | 4,7M | 1–3 ms | 92,3% | 18 MB |
| ResNet-50 | 25,6M | 10–30 ms | 95,2% | 98 MB |
Trên thiết bị so với Đám mây: phân loại trên thiết bị (ML Kit, Core ML) cung cấp độ trễ 1–20 ms với quyền riêng tư dữ liệu hoàn toàn. API đám mây (Google Cloud Vision, AWS Rekognition) có độ trễ 500–2000 ms cộng với chi phí mỗi yêu cầu, nhưng chính xác hơn (97–99%) nhờ các mô hình lớn hơn (ViT, CLIP). Đối với ứng dụng thời gian thực (camera, AR), hãy chọn phương án trên thiết bị. Đối với các kịch bản phức tạp (y tế, phân tích chuyên gia), hãy sử dụng đám mây với dự phòng trên thiết bị.
ML Kit Image Labeling là một thư viện có sẵn từ Google để phân loại hình ảnh trên thiết bị. Có sẵn ở hai chế độ: trên thiết bị (miễn phí, hơn 400 nhãn, 10–20 ms) và đám mây (trả phí, hơn 10000 nhãn, hơn 500 ms). Phiên bản trên thiết bị sử dụng MobileNetV3 với lượng tử hóa INT8, chiếm 4 MB dung lượng đĩa. ML Kit tự động phát hiện hướng của hình ảnh và tối ưu hóa kích thước trước khi phân loại.
API ML Kit: InputImage (từ Bitmap, media.Image, filePath) → ImageLabeler → OnSuccessListener với danh sách ImageLabel (nhãn, độ tin cậy, chỉ số). Ngưỡng tin cậy (mặc định 0,5) là độ tin cậy tối thiểu để trả về nhãn. Tăng ngưỡng lên 0,7 làm giảm số lượng nhãn mỗi khung hình nhưng tăng độ chính xác của từng nhãn. Đối với kiểm duyệt nội dung, hãy đặt ngưỡng là 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 trên iOS: API tương tự Android, sử dụng UIImage hoặc CMSampleBuffer. ML Kit tự động sử dụng Core ML + ANE trên các thiết bị A12+. Đối với iOS 16+, ML Kit Image Labeling cung cấp độ trễ 8–15 ms trên iPhone 15 Pro. Để giảm thiểu độ trễ, hãy truyền độ phân giải hình ảnh nhỏ nhất có thể (224x224 cho MobileNet) — ML Kit tự động thay đổi kích thước, nhưng việc chuyển đổi hình ảnh lớn thêm 2–5 ms chi phí.
Core ML là framework của Apple để chạy các mô hình ML trên thiết bị. Kết hợp với Vision Framework (VNCoreMLRequest), Core ML cho phép phân loại hình ảnh với code tối thiểu. Apple cung cấp các mô hình tích hợp: SqueezeNet (5 MB, 80,5% top-1), ResNet50 (98 MB, 95,2%), MobileNetV2 (14 MB, 90,2%). Các mô hình ở định dạng .mlmodel hoặc .mlpackage được chuyển đổi qua coremltools từ TensorFlow hoặc PyTorch.
VNCoreMLRequest là một API Vision xử lý tiền xử lý hình ảnh (thay đổi kích thước, cắt để lấp đầy, chuyển đổi không gian màu) và chuyển kết quả cho mô hình. Vision trả về VNClassificationObservation với identifier (tên lớp) và confidence (0..1). MaxCandidates là số lượng nhãn tối đa được trả về (mặc định 1). Để phân loại với lựa chọn tự động, hãy sử dụng VNCoreMLRequest với 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("Nhãn: \(obs.identifier), Độ tin cậy: \(obs.confidence)")
}
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])
Core ML so với ML Kit trên iOS: Core ML là gốc, không yêu cầu SDK bổ sung và được tối ưu hóa tốt hơn cho ANE (Apple Neural Engine). ML Kit chính xác hơn trên các cảnh phức tạp nhờ các mô hình của Google. Core ML hỗ trợ mọi mô hình (được chuyển đổi qua coremltools), trong khi ML Kit chỉ hỗ trợ các mô hình của riêng mình. Để triển khai nhanh, hãy sử dụng ML Kit. Để kiểm soát mô hình tối đa, hãy sử dụng Core ML. Một cách tiếp cận thực tế: sử dụng cả hai framework trong một ứng dụng — ML Kit cho các nhãn tiêu chuẩn, Core ML cho các nhãn tùy chỉnh.
Mô hình Image Labeling tùy chỉnh — huấn luyện bộ phân loại riêng cho một tác vụ cụ thể: nhận dạng chất lượng trái cây, phát hiện lỗi trên dây chuyền sản xuất, phân loại giống chó. Quy trình bao gồm thu thập tập dữ liệu (hơn 1000 hình ảnh mỗi lớp), chú thích, huấn luyện thông qua học chuyển giao (transfer learning) trên MobileNetV2 hoặc EfficientNet đã được huấn luyện trước và chuyển đổi sang TFLite / Core ML.
Học chuyển giao (Transfer Learning) — phương pháp chính để huấn luyện các bộ phân loại di động. Lấy một mô hình đã được huấn luyện trước trên ImageNet, đóng băng các lớp dưới (CNN backbone) và huấn luyện lại các lớp trên (fine-tuning). Điều này chỉ yêu cầu 100–500 hình ảnh mỗi lớp và mất 1–2 giờ trên Google Colab (GPU). Thư viện: TensorFlow Keras (Android), PyTorch + coremltools (iOS). Kết quả: độ chính xác 95–98% trên các lớp mục tiêu.
// Suy luận mô hình TFLite tùy chỉnh
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 — một giải pháp thay thế: không cần viết code cho TFLite Interpreter — ML Kit tải mô hình và xử lý tiền xử lý tự động. Image Labeler tùy chỉnh chấp nhận mô hình TFLite với kích thước đầu vào 224x224x3 và đầu ra score float[NUM_CLASSES]. Chỉ cần cung cấp tệp mô hình và nhận các nhãn tiêu chuẩn. ML Kit Custom Model API được khuyến nghị nếu mô hình phù hợp với định dạng TFLite. Nếu cần kiểm soát suy luận chi tiết hơn (ngưỡng cho từng lớp), hãy sử dụng trực tiếp TFLite Interpreter.
TFLite (TensorFlow Lite) là định dạng mô hình của Google cho thiết bị di động và biên. Hỗ trợ lượng tử hóa (FP16, INT8), giúp giảm kích thước mô hình 4 lần và tăng tốc độ 2–3 lần với mất mát độ chính xác nhỏ (1–2%). TFLite chạy trên Android qua GPU Delegate (OpenGL/OpenCL) và trên iOS qua Core ML Delegate. TFLite Task API cung cấp giao diện thống nhất cho Image Classifier, Object Detector và các tác vụ khác.
Core ML là định dạng của Apple (.mlpackage — mới, .mlmodel — cũ). Hỗ trợ lượng tử hóa (FP16) và tô màu trọng số (weight palettization đến 1/2/4/6/8 bit), đạt được nén mô hình lên đến 80%. Core ML sử dụng ANE (Neural Engine), GPU và CPU — hệ thống tự động chọn engine tối ưu. Chuyển đổi từ PyTorch qua torch.onnx.export + coremltools, từ TensorFlow qua tf-keras + coremltools. iOS 18+ hỗ trợ huấn luyện trên thiết bị qua Core ML Training API.
| Đặc tính | TFLite | Core ML |
|---|---|---|
| Kích thước (MobileNetV2) | 14 MB (FP32) / 3,5 MB (INT8) | 14 MB (FP16) / 2,8 MB (4-bit) |
| Engine suy luận | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (tự động) |
| Lượng tử hóa | FP16, INT8, DynamicRange | FP16, Tô màu (1-8 bit) |
| Hiệu suất iOS | Core ML Delegate (2–5 ms) | ANE gốc (1–3 ms) |
| Công cụ | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX như một định dạng trung gian: chuyển đổi mô hình sang ONNX (PyTorch → ONNX, TensorFlow → ONNX) và sau đó sang TFLite / Core ML qua onnx2tf hoặc onnx2coreml. ONNX là định dạng thống nhất được hỗ trợ bởi hơn 70 framework. Điều này đơn giản hóa quy trình: một mô hình đã huấn luyện → ONNX → định dạng gốc cho cả hai nền tảng. Huấn luyện trong PyTorch + chuyển đổi sang ONNX → TFLite (Android) / Core ML (iOS) là quy trình được khuyến nghị cho các dự án đa nền tảng.
Gắn thẻ tự động ảnh — ứng dụng thư viện (Google Photos, Apple Photos) tự động gán nhãn cho hình ảnh: “bãi biển”, “hoàng hôn”, “chó”, “thức ăn”. ML Kit Image Labeling xử lý từng ảnh từ thư viện trong nền — 1–2 giây cho 100 ảnh (hàng loạt). Người dùng có thể tìm kiếm theo nhãn mà không cần sắp xếp thủ công. Google Photos sử dụng phân loại trên thiết bị với xác minh máy chủ sau đó cho các cảnh phức tạp.
Kiểm duyệt nội dung — phát hiện tự động hình ảnh không mong muốn trong nội dung người dùng (mạng xã hội, chợ trực tuyến, nền tảng UGC). ML Kit Custom Model phát hiện nội dung NSFW, bạo lực và tuyên truyền với độ chính xác 92–96%. Ngưỡng kích hoạt — độ tin cậy 0,8. Để giảm dương tính giả (hình ảnh y tế hợp pháp), hãy sử dụng một ủy ban phân loại: Image Labeling + Object Detection + Blur Detection. Kiểm duyệt trên thiết bị nhanh hơn và bảo vệ quyền riêng tư của người dùng.
Tìm kiếm sản phẩm trực quan — người dùng chụp ảnh sản phẩm (giày thể thao, túi xách, đồ nội thất), ứng dụng xác định nhãn và tìm sản phẩm tương tự trong danh mục. Image Labeling thu hẹp tìm kiếm xuống một danh mục, sau đó các bộ mô tả đặc trưng (vector đặc trưng) tìm các mặt hàng tương tự về mặt trực quan. Pinterest Lens, Google Lens và Amazon StyleSnap sử dụng cách tiếp cận này. Phân loại trên thiết bị cho kết quả trong 10–30 ms, tìm kiếm đám mây — 200–500 ms.
// Image Labeling với Core ML để tìm kiếm trực quan
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)
}
}
}
Ứng dụng AR và giáo dục — Image Labeling phân loại đối tượng trong thời gian thực qua camera. Người dùng hướng điện thoại vào cây — ứng dụng hiển thị tên, hướng dẫn chăm sóc và lịch tưới nước. Hướng vào bộ phận cơ khí — giải thích chức năng của nó. Yêu cầu: độ trễ < 30 ms. EfficientNet-Lite trên thiết bị cao cấp cho 15–25 ms. Trong điều kiện ánh sáng yếu, độ chính xác giảm — hãy sử dụng ngưỡng tin cậy thích ứng (giảm ngưỡng trong điều kiện thiếu sáng để bù đắp cho chất lượng đầu vào bị suy giảm).
Các câu hỏi thường gặp
Image Labeling xác định đối tượng nào có trong hình ảnh nhưng không chỉ ra vị trí của chúng. Object Detection tìm đối tượng và trả về khung bao quanh mỗi đối tượng. Image Labeling nhanh hơn (1–20 ms so với 20–100 ms), yêu cầu ít dữ liệu huấn luyện hơn nhưng không cung cấp thông tin vị trí. Để phân loại đơn giản (mèo/chó), hãy sử dụng Image Labeling. Để nhận dạng có mục tiêu (bao nhiêu đối tượng, chúng ở đâu), hãy sử dụng Object Detection.
Không, ML Kit Image Labeling hoạt động hoàn toàn trên thiết bị. Mô hình được tải xuống khi khởi chạy lần đầu (chế độ tải xuống — 4 MB) và được lưu trữ cục bộ. Các mô hình Core ML được đóng gói cùng với ứng dụng. Mô hình TFLite tùy chỉnh là một phần của APK. Tất cả tính toán được thực hiện trên thiết bị và không có dữ liệu nào được gửi đến máy chủ. Điều này đảm bảo quyền riêng tư của người dùng và hoạt động ngoại tuyến. Phân loại đám mây (Google Cloud Vision) là một giải pháp thay thế yêu cầu Internet và cung cấp độ chính xác cao hơn.
Đối với học chuyển giao trên MobileNetV2: tối thiểu 50–100 hình ảnh mỗi lớp, tối ưu 300–500. Càng nhiều đa dạng (góc, ánh sáng, nền), độ chính xác càng cao. Để huấn luyện từ đầu (không có mô hình được huấn luyện trước), cần tối thiểu 1000 hình ảnh mỗi lớp. Khuyến nghị: bắt đầu với 200 hình ảnh mỗi lớp, đánh giá độ chính xác và thêm dữ liệu cho các lớp có độ chính xác thấp. Tăng cường dữ liệu (xoay, thay đổi kích thước, dịch chuyển) làm tăng tập dữ liệu hiệu quả lên 3–5 lần mà không cần thu thập dữ liệu mới.
Các phương pháp chính: lượng tử hóa INT8 sau huấn luyện — giảm kích thước 4 lần với mất mát độ chính xác 1–2%; cắt tỉa (loại bỏ trọng số không quan trọng) — nén lên đến 50%; chưng cất (mô hình học sinh nhỏ hơn được huấn luyện trên đầu ra của mô hình giáo viên lớn hơn) — nén lên đến 80%. MobileNetV2 INT8 chiếm 3,5 MB, SqueezeNet — 5 MB. Kích thước mục tiêu — không quá 10 MB để tải ngay lập tức mà không cần chỉ báo tiến trình.
ML Kit Image Labeling v2 đạt độ chính xác top-1 91% trên tập kiểm tra của Google (hơn 400 lớp). Độ chính xác top-5 là 98%. Ở các góc không chuẩn và điều kiện ánh sáng, độ chính xác có thể giảm xuống 75–85%. Đối với sản xuất, khuyến nghị sử dụng ngưỡng tin cậy 0,7 để lọc ổn định các dự đoán chất lượng thấp. Nếu độ chính xác không đủ, hãy sử dụng mô hình tùy chỉnh được huấn luyện trên tập dữ liệu cụ thể: độ chính xác 95–98% trên các lớp mục tiêu.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm