Image Labeling — یک وظیفه در بینایی کامپیوتر است که در آن شبکه عصبی به تصویر برچسبهایی از یک مجموعه کلاس از پیش تعریفشده اختصاص میدهد: از ساده (گربه، سگ، ماشین) تا خاص (نوع گیاه، مدل گوشی هوشمند، تصویر پزشکی). در توسعه موبایل، Image Labeling برای برچسبزنی خودکار عکسها در گالری، moderation محتوای کاربر، جستجوی بصری محصولات با عکس و برنامههای AR استفاده میشود. طبق Google ML Kit, 2025، طبقهبند داخلی 400+ دسته را در 10–20 میلیثانیه در هر فریم با دقت 91% (top-1) تشخیص میدهد.
نکات اصلی
Image Labeling — زیرمجموعهای از طبقهبندی تصاویر است که در آن مدل یک تصویر را دریافت کرده و احتمالات را برای هر کلاس از مجموعه آموزشی بازمیگرداند. برخلاف object detection، Image Labeling موقعیت شیء را در تصویر تعیین نمیکند — فقط حضور یا عدم حضور آن را مشخص میکند. برخلاف image segmentation، مرز شیء را جدا نمیکند. Image Labeling وظیفه “چه چیزی در عکس است؟” را حل میکند، نه “کجا و چه چیزی در عکس است؟”.
معماری طبقهبند: CNN backbone (MobileNet, ResNet, EfficientNet) نقشه ویژگی را از تصویر استخراج میکند، Global Average Pooling ابعاد فضایی را فشرده میکند، لایه کاملاً متصل (Dense) با فعالسازی Softmax احتمالات کلاسها را خروجی میدهد. MobileNetV2 — محبوبترین backbone برای دستگاههای موبایل: 3.5 میلیون پارامتر، 0.5–2 میلیثانیه استنتاج در Pixel 6 از طریق GPU. EfficientNet-Lite — جایگزینی با نسبت accuracy/پارامتر بهتر.
Top-1 vs Top-5 accuracy: top-1 — مدل کلاس اصلی را به درستی حدس زد (91% برای ML Kit)؛ top-5 — کلاس صحیح در بین پنج کلاس محتملترین قرار دارد (98% برای ML Kit). برای برنامههای تولیدی از top-5 استفاده کنید و چند گزینه برچسب به کاربر نشان دهید. برای moderation محتوا — top-1 با آستانه confidence >= 0.8 (نرخ false positive را 40% کاهش میدهد).
| معماری | پارامترها | تأخیر | Top-1 | اندازه |
|---|---|---|---|---|
| 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 |
On-device vs Cloud: طبقهبندی روی دستگاه (ML Kit, Core ML) تأخیر 1–20 میلیثانیه با حریم خصوصی کامل دادهها را ارائه میدهد. Cloud API (Google Cloud Vision, AWS Rekognition) — تأخیر 500–2000 میلیثانیه + هزینه به ازای هر درخواست، اما دقیقتر (97–99%) به دلیل مدلهای بزرگتر (ViT, CLIP). برای برنامههای بلادرنگ (دوربین، AR) on-device را انتخاب کنید. برای سناریوهای پیچیده (پزشکی، تخصصی) — cloud با fallback به on-device.
ML Kit Image Labeling — کتابخانه آماده از Google برای طبقهبندی تصاویر روی دستگاه. در دو حالت موجود است: on-device (رایگان، 400+ برچسب، 10–20 میلیثانیه) و cloud (پولی، 10000+ برچسب، 500+ میلیثانیه). نسخه on-device از MobileNetV3 + کوانتیزاسیون INT8 استفاده میکند، 4 MB روی دیسک占用 دارد. ML Kit به طور خودکار جهت تصویر را تعیین کرده و اندازه را قبل از طبقهبندی بهینه میکند.
API ML Kit: InputImage (از Bitmap, media.Image, filePath) → ImageLabeler → OnSuccessListener با لیست ImageLabel (label, confidence, index). MillisThreshold (پیشفرض 0.5) — حداقل اطمینان برای بازگرداندن برچسب. افزایش آستانه به 0.7 تعداد برچسبها در هر فریم را کاهش میدهد، اما دقت هر یک را افزایش میدهد. برای moderation محتوا آستانه را 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 که پیشپردازش تصویر (مقیاسبندی، crop-to-fill، تبدیل فضای رنگی) را بر عهده گرفته و نتیجه را به مدل منتقل میکند. 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("استنتاج مدل سفارشی TFLite")
}
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])
Core ML vs ML Kit در iOS: Core ML — بومی است، به SDK اضافی نیاز ندارد، برای ANE (موتور عصبی Apple) بهتر بهینه شده است. ML Kit — به دلیل مدلهای Google در صحنههای پیچیده دقیقتر است. Core ML از هر مدلی پشتیبانی میکند (تبدیل شده از طریق coremltools)، ML Kit — فقط مدلهای خود. برای سرعت پیادهسازی — ML Kit. برای حداکثر کنترل روی مدل — Core ML. انتخاب عملی: هر دو چارچوب در یک برنامه — ML Kit برای برچسبهای استاندارد، Core ML برای سفارشی.
مدلهای سفارشی Image Labeling — آموزش طبقهبند اختصاصی برای وظیفه خاص: تشخیص درجه میوهها، شناسایی نقصها روی خط تولید، طبقهبندی نژاد سگها. فرآیند شامل جمعآوری مجموعه داده (1000+ تصویر در هر کلاس)، برچسبزنی، آموزش با یادگیری انتقالی (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% accuracy روی کلاسهای هدف.
// Image Labeling با Core ML برای جستجوی بصری
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 خود مدل را بارگیری کرده و پیشپردازش را مدیریت میکند. Custom Image Labeler مدل TFLite با اندازه ورودی 224x224x3 و خروجی score float[NUM_CLASSES] را میپذیرد. فقط کافی است فایل مدل را ارسال کرده و برچسبهای استاندارد را دریافت کنید. ML Kit Custom Model API در صورتی که مدل با فرمت TFLite مطابقت داشته باشد توصیه میشود. اگر کنترل دقیقتری روی استنتاج مورد نیاز است (آستانهها، threshold به ازای هر کلاس) — مستقیماً از TFLite Interpreter استفاده کنید.
TFLite (TensorFlow Lite) — فرمت مدلهای Google برای دستگاههای موبایل و edge. از کوانتیزاسیون (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)، پالتسازی وزن (weight 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-bit) |
| موتور استنتاج | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (auto) |
| کوانتیزاسیون | FP16, INT8, DynamicRange | FP16, Palettization (1-8 bit) |
| عملکرد iOS | Core ML Delegate (2–5 ms) | ANE بومی (1–3 ms) |
| ابزارها | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX به عنوان فرمت میانی: مدلها را به ONNX تبدیل کنید (PyTorch → ONNX, TensorFlow → ONNX) و سپس از طریق onnx2tf یا onnx2coreml به TFLite / Core ML تبدیل کنید. ONNX — فرمت یکپارچهای است که توسط 70+ چارچوب پشتیبانی میشود. این کار pipeline را ساده میکند: یک مدل آموزشدیده → ONNX → فرمتهای بومی برای هر دو پلتفرم. آموزش در PyTorch + تبدیل به ONNX → TFLite (Android) / Core ML (iOS) — pipeline توصیهشده برای پروژههای چندپلتفرمی.
برچسبزنی خودکار عکسها — برنامههای گالری (Google Photos, Apple Photos) به طور خودکار به تصاویر برچسب اختصاص میدهند: “ساحل”، “غروب”، “سگ”، “غذا”. ML Kit Image Labeling هر عکس را در پسزمینه پردازش میکند — 1–2 ثانیه برای 100 عکس (batch). کاربر جستجو بر اساس برچسبها را بدون مرتبسازی دستی دریافت میکند. Google Photos از طبقهبندی روی دستگاه با تأیید سروری بعدی برای صحنههای پیچیده استفاده میکند.
Moderation محتوا — تشخیص خودکار تصاویر نامطلوب در محتوای کاربر (شبکههای اجتماعی، بازارهای آنلاین، پلتفرمهای UGC). ML Kit Custom Model محتوای NSFW، خشونت، تبلیغات را با دقت 92–96% تشخیص میدهد. آستانه فعالسازی — confidence 0.8. برای کاهش false positives (تصاویر پزشکی قانونی) از کمیته طبقهبندها استفاده کنید: Image Labeling + Object Detection + Blur Detection. Moderation روی دستگاه سریعتر است و حریم خصوصی کاربران را حفظ میکند.
جستجوی بصری محصولات — کاربر از محصول عکس میگیرد (کفش، کیف، مبلمان)، برنامه برچسب را تعیین کرده و محصولات مشابه را در کاتالوگ پیدا میکند. Image Labeling جستجو را به دسته محدود میکند، سپس توصیفگرهای ویژگی (feature vectors) نمونههای بصری مشابه را پیدا میکنند. Pinterest Lens، Google Lens، Amazon StyleSnap از این رویکرد استفاده میکنند. طبقهبندی روی دستگاه نتیجه را در 10–30 میلیثانیه میدهد، cloud — جستجو در پایگاه محصولات در 200–500 میلیثانیه.
// Image Labeling with Core ML for visual search
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 در دستگاههای Flagship 15–25 میلیثانیه تأخیر دارد. در نور کم دقت کاهش مییابد — از آستانه confidence خودکار استفاده کنید (آستانه را در نور کم کاهش دهید تا افت کیفیت ورودی جبران شود).
سوالات متداول
Image Labeling تعیین میکند چه اشیایی در تصویر وجود دارند، اما مکان آنها را مشخص نمیکند. Object Detection — اشیاء را پیدا کرده و bounding box هر یک را بازمیگرداند. Image Labeling سریعتر است (1–20 ms vs 20–100 ms)، دادههای کمتری برای آموزش نیاز دارد، اما اطلاعات موقعیتی نمیدهد. برای طبقهبندی ساده (گربه/سگ) — Image Labeling. برای تشخیص دقیق (تعداد اشیاء، مکان آنها) — Object Detection.
خیر، ML Kit Image Labeling کاملاً روی دستگاه کار میکند. مدل در اولین راهاندازی بارگیری میشود (حالت بارگیریشده — 4 MB) و به صورت محلی ذخیره میشود. مدلهای Core ML همراه با برنامه بارگیری میشوند. TFLite Custom Model — بخشی از APK. تمام محاسبات روی دستگاه انجام میشود، دادهها به سرور ارسال نمیشوند. این امر حریم خصوصی کاربر و کار بدون اینترنت را تضمین میکند. طبقهبندی ابری (Google Cloud Vision) — جایگزینی با اینترنت و دقت بالاتر.
برای transfer learning روی MobileNetV2: حداقل 50–100 تصویر در هر کلاس، بهینه 300–500. هرچه تنوع بیشتر باشد (زاویهها، نور، پسزمینه)، دقت بالاتر است. برای آموزش از صفر (بدون مدل از پیش آموزشدیده) حداقل 1000 تصویر در هر کلاس نیاز است. توصیه: با 200 تصویر در هر کلاس شروع کنید، accuracy را ارزیابی کنید، برای کلاسهای کمدقت داده اضافه کنید. Data augmentation (چرخش، مقیاس، جابجایی) مجموعه داده مؤثر را 3–5 برابر بدون جمعآوری داده جدید افزایش میدهد.
روشهای اصلی: کوانتیزاسیون INT8 پس از آموزش (post-training quantization) — اندازه را 4 برابر با افت 1–2% accuracy کاهش میدهد؛ pruning (حذف وزنهای کماهمیت) — تا 50% فشردهسازی؛ distillation (مدل دانشآموز کوچکتر آموزشدیده بر خروجیهای مدل معلم بزرگ) — تا 80% فشردهسازی. MobileNetV2 INT8 3.5 MB، SqueezeNet — 5 MB اشغال میکند. اندازه هدف — حداکثر 10 MB برای بارگیری فوری بدون نشانگر پیشرفت.
ML Kit Image Labeling v2 روی مجموعه تست Google (400+ کلاس) top-1 accuracy 91% را نشان میدهد. Top-5 accuracy — 98%. در زاویهها و شرایط نوری غیراستاندارد، دقت ممکن است به 75–85% کاهش یابد. برای تولید، استفاده از آستانه confidence 0.7 برای فیلتر کردن پایدار پیشبینیهای کمکیفیت توصیه میشود. اگر دقت کافی نیست — از مدل سفارشی آموزشدیده روی مجموعه داده خاص استفاده کنید: accuracy 95–98% روی کلاسهای هدف.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید