Image Labeling, bir sinir ağının önceden tanımlanmış bir sınıf kümesinden bir görüntüye etiket atadığı bir bilgisayarlı görü görevidir: basit (kedi, köpek, araba)ten özele (bitki türü, akıllı telefon modeli, tıbbi tarama) kadar. Mobil geliştirmede, Image Labeling galerideki fotoğrafların otomatik etiketlenmesi, kullanıcı içeriğinin moderasyonu, fotoğrafla görsel ürün arama ve AR uygulamaları için kullanılır. Google ML Kit, 2025'e göre, yerleşik sınıflandırıcı, %91 doğrulukla (top-1) saniyede 10–20 ms'de 400'den fazla kategoriyi tanır.
Önemli Noktalar
Image Labeling, modelin girdi olarak bir görüntü aldığı ve eğitim kümesindeki her sınıf için olasılıklar döndürdüğü bir görüntü sınıflandırma alt türüdür. Nesne algılamanın aksine, Image Labeling görüntüdeki nesnelerin konumunu belirlemez — yalnızca varlıklarını veya yokluklarını belirler. Görüntü bölütlemenin aksine, nesnenin sınırlarını çizmez. Image Labeling “fotoğrafta ne var?” sorusuna yanıt verir, “fotoğrafta nerede ve ne var?” değil.
Sınıflandırıcı Mimarisi: Bir CNN omurgası (MobileNet, ResNet, EfficientNet) görüntüden özellik haritası çıkarır, Global Average Pooling uzamsal boyutları daraltır ve Softmax aktivasyonlu tam bağlantılı bir katman (Dense) sınıf olasılıklarını üretir. MobileNetV2, mobil cihazlar için en popüler omurgadır: 3,5M parametre, Pixel 6'da GPU üzerinden 0,5–2 ms çıkarım. EfficientNet-Lite, daha iyi doğruluk/parametre oranına sahip bir alternatiftir.
Top-1 ve Top-5 Doğruluğu: top-1 — model ana sınıfı doğru tahmin eder (ML Kit'te %91); top-5 — doğru sınıf en olası beş sınıf arasındadır (ML Kit'te %98). Üretim uygulamaları için top-5 kullanın ve kullanıcıya birden çok etiket seçeneği gösterin. İçerik moderasyonu için, güven eşiği >= 0,8 ile top-1 kullanın (yanlış pozitif oranını %40 azaltır).
| Mimari | Parametreler | Gecikme | Top-1 | Boyut |
|---|---|---|---|---|
| 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 |
Cihaz İçi ve Bulut: cihaz içi sınıflandırma (ML Kit, Core ML), tam veri gizliliği ile 1–20 ms gecikme sağlar. Bulut API (Google Cloud Vision, AWS Rekognition) 500–2000 ms gecikme ve istek başına maliyete sahiptir, ancak daha büyük modeller (ViT, CLIP) sayesinde daha doğrudur (%97–99). Gerçek zamanlı uygulamalar (kamera, AR) için cihaz içi seçeneğini seçin. Karmaşık senaryolar (tıp, uzman analizi) için cihaz içi yedeklemeli bulutu kullanın.
ML Kit Image Labeling, Google'ın cihaz üzerinde görüntü sınıflandırması için kullanıma hazır kitaplığıdır. İki modda kullanılabilir: cihaz içi (ücretsiz, 400'den fazla etiket, 10–20 ms) ve bulut (ücretli, 10000'den fazla etiket, 500+ ms). Cihaz içi sürüm, INT8 niceleme ile MobileNetV3 kullanır ve diskte 4 MB yer kaplar. ML Kit, görüntü yönünü otomatik olarak algılar ve sınıflandırmadan önce boyutu optimize eder.
ML Kit API: InputImage (Bitmap, media.Image, filePath'ten) → ImageLabeler → ImageLabel (etiket, güven, indeks) listesiyle OnSuccessListener. Güven eşiği (varsayılan 0,5), bir etiketi döndürmek için minimum güvendir. Eşiği 0,7'ye yükseltmek, kare başına etiket sayısını azaltır ancak her birinin doğruluğunu artırır. İçerik moderasyonu için eşiği 0,8 olarak ayarlayın.
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) }
iOS'ta ML Kit: API Android'e benzer, UIImage veya CMSampleBuffer kullanır. ML Kit, A12+ cihazlarda otomatik olarak Core ML + ANE kullanır. iOS 16+ için ML Kit Image Labeling, iPhone 15 Pro'da 8–15 ms gecikme sağlar. Gecikmeyi en aza indirmek için mümkün olan en küçük görüntü çözünürlüğünü (MobileNet için 224x224) iletin — ML Kit otomatik olarak ölçekler, ancak büyük görüntüleri dönüştürmek 2–5 ms ek yük ekler.
Core ML, Apple'ın cihaz üzerinde ML modelleri çalıştırma framework'üdür. Vision Framework (VNCoreMLRequest) ile birleştirildiğinde, Core ML minimum kodla görüntü sınıflandırması sağlar. Apple yerleşik modeller sunar: SqueezeNet (5 MB, %80,5 top-1), ResNet50 (98 MB, %95,2), MobileNetV2 (14 MB, %90,2). .mlmodel veya .mlpackage formatındaki modeller, TensorFlow veya PyTorch'tan coremltools aracılığıyla dönüştürülür.
VNCoreMLRequest, görüntü ön işlemesini (ölçekleme, kırpma, renk uzayı dönüşümü) yöneten ve sonucu modele ileten bir Vision API'sidir. Vision, identifier (sınıf adı) ve confidence (0..1) ile VNClassificationObservation döndürür. MaxCandidates, döndürülen maksimum etiket sayısıdır (varsayılan 1). Otomatik seçim sınıflandırması için imageCropAndScaleOption = .centerCrop ile VNCoreMLRequest kullanın.
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("Etiket: \(obs.identifier), Güven: \(obs.confidence)")
}
}
request.imageCropAndScaleOption = .centerCrop
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])
iOS'ta Core ML vs ML Kit: Core ML yereldir, ek SDK gerektirmez ve ANE (Apple Neural Engine) için daha iyi optimize edilmiştir. ML Kit, Google'ın modelleri sayesinde karmaşık sahnelerde daha doğrudur. Core ML herhangi bir modeli (coremltools ile dönüştürülmüş) desteklerken, ML Kit yalnızca kendi modellerini destekler. Hızlı uygulama için ML Kit kullanın. Maksimum model kontrolü için Core ML kullanın. Pratik bir yaklaşım: tek bir uygulamada her iki framework'ü de kullanın — standart etiketler için ML Kit, özel etiketler için Core ML.
Özel Image Labeling Modelleri — belirli bir görev için kendi sınıflandırıcınızı eğitmek: meyve kalitesi tanıma, üretim hattındaki kusurları tespit etme, köpek ırklarını sınıflandırma. Süreç, veri kümesi toplama (sınıf başına 1000'den fazla görüntü), açıklama ekleme, önceden eğitilmiş MobileNetV2 veya EfficientNet üzerinde transfer öğrenme yoluyla eğitim ve TFLite / Core ML'ye dönüştürmeyi içerir.
Transfer Öğrenme — mobil sınıflandırıcıları eğitmenin ana yöntemidir. ImageNet'te önceden eğitilmiş bir model alınır, alt katmanlar (CNN omurgası) dondurulur ve üst katmanlar yeniden eğitilir (ince ayar). Bu, sınıf başına yalnızca 100–500 görüntü gerektirir ve Google Colab'da (GPU) 1–2 saat sürer. Kitaplıklar: TensorFlow Keras (Android), PyTorch + coremltools (iOS). Sonuç: hedef sınıflarda %95–98 doğruluk.
// TFLite özel model çıkarımı
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 — bir alternatif: TFLite Interpreter kodu yazmaya gerek yok — ML Kit modeli yükler ve ön işlemeyi otomatik olarak halleder. Özel Image Labeler, giriş boyutu 224x224x3 ve çıkış score float[NUM_CLASSES] olan bir TFLite modelini kabul eder. Sadece model dosyasını sağlayın ve standart etiketleri alın. Model TFLite formatına uyuyorsa ML Kit Custom Model API önerilir. Çıkarım üzerinde daha ince kontrole ihtiyaç duyulursa (sınıf başına eşik), doğrudan TFLite Interpreter kullanın.
TFLite (TensorFlow Lite), Google'ın mobil ve uç cihazlar için model formatıdır. Nicelemeyi (FP16, INT8) destekler, bu da model boyutunu 4 kat azaltır ve hızı 2–3 kat artırır, hafif bir doğruluk kaybıyla (%1–2). TFLite, Android'de GPU Delegate (OpenGL/OpenCL) ve iOS'ta Core ML Delegate aracılığıyla çalışır. TFLite Task API, Image Classifier, Object Detector ve diğer görevler için birleşik bir arayüz sağlar.
Core ML, Apple'ın formatıdır (.mlpackage — yeni, .mlmodel — eski). Nicelemeyi (FP16) ve ağırlık paletlemesini (1/2/4/6/8 bit'e kadar) destekler ve %80'e kadar model sıkıştırması sağlar. Core ML, ANE (Neural Engine), GPU ve CPU kullanır — sistem otomatik olarak en uygun motoru seçer. PyTorch'tan torch.onnx.export + coremltools aracılığıyla, TensorFlow'dan tf-keras + coremltools aracılığıyla dönüştürme. iOS 18+, Core ML Training API aracılığıyla cihaz üzerinde eğitimi destekler.
| Özellik | TFLite | Core ML |
|---|---|---|
| Boyut (MobileNetV2) | 14 MB (FP32) / 3,5 MB (INT8) | 14 MB (FP16) / 2,8 MB (4-bit) |
| Çıkarım Motoru | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (otomatik) |
| Niceleme | FP16, INT8, DynamicRange | FP16, Paletleme (1-8 bit) |
| iOS Performansı | Core ML Delegate (2–5 ms) | Yerel ANE (1–3 ms) |
| Araçlar | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX Ara Format Olarak: modelleri ONNX'e (PyTorch → ONNX, TensorFlow → ONNX) ve ardından onnx2tf veya onnx2coreml aracılığıyla TFLite / Core ML'ye dönüştürün. ONNX, 70'ten fazla framework tarafından desteklenen birleşik bir formattır. Bu, boru hattını basitleştirir: eğitilmiş bir model → ONNX → her iki platform için yerel formatlar. Çapraz platform projeleri için PyTorch'ta eğitim + ONNX'a dönüştürme → TFLite (Android) / Core ML (iOS) önerilen boru hattıdır.
Fotoğrafların Otomatik Etiketlenmesi — galeri uygulamaları (Google Fotoğraflar, Apple Fotoğraflar) görüntülere otomatik olarak etiket atar: “plaj”, “gün batımı”, “köpek”, “yiyecek”. ML Kit Image Labeling, galerideki her fotoğrafı arka planda işler — 100 fotoğraf için 1–2 saniye (toplu). Kullanıcı, manuel sıralama olmadan etiketlere göre arama yapabilir. Google Fotoğraflar, karmaşık sahneler için cihaz içi sınıflandırmayı ve ardından sunucu doğrulamasını kullanır.
İçerik Moderasyonu — kullanıcı içeriğinde (sosyal ağlar, pazaryerleri, UGC platformları) istenmeyen görüntülerin otomatik tespiti. ML Kit Custom Model, NSFW içeriğini, şiddeti ve propagandayı %92–96 doğrulukla tespit eder. Tetikleme eşiği — güven 0,8. Yanlış pozitifleri (meşru tıbbi görüntüler) azaltmak için bir sınıflandırıcı komitesi kullanın: Image Labeling + Object Detection + Blur Detection. Cihaz içi moderasyon daha hızlıdır ve kullanıcı gizliliğini korur.
Görsel Ürün Arama — kullanıcı bir ürünün (spor ayakkabı, çanta, mobilya) fotoğrafını çeker, uygulama etiketi belirler ve katalogda benzer ürünler bulur. Image Labeling aramayı bir kategoriye daraltır, ardından özellik tanımlayıcıları (özellik vektörleri) görsel olarak benzer öğeleri bulur. Pinterest Lens, Google Lens ve Amazon StyleSnap bu yaklaşımı kullanır. Cihaz içi sınıflandırma 10–30 ms'de sonuç verir, bulut arama — 200–500 ms'de.
// Görsel arama için Core ML ile Image Labeling
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 ve Eğitim Uygulamaları — Image Labeling, kamera aracılığıyla gerçek zamanlı olarak nesneleri sınıflandırır. Kullanıcı telefonunu bir bitkiye doğrultur — uygulama adı, bakım talimatları ve sulama programını gösterir. Mekanik bir parçaya doğrultur — amacını açıklar. Gereksinim: gecikme < 30 ms. Amiral gemisi cihazlarda EfficientNet-Lite 15–25 ms sağlar. Düşük ışıkta doğruluk düşer — uyarlanabilir bir güven eşiği kullanın (giriş kalitesindeki düşüşü telafi etmek için düşük ışıkta eşiği düşürün).
Sıkça Sorulan Sorular
Image Labeling, görüntüde hangi nesnelerin bulunduğunu belirler ancak konumlarını göstermez. Object Detection, nesneleri bulur ve her biri için sınırlayıcı kutular döndürür. Image Labeling daha hızlıdır (1–20 ms vs 20–100 ms), daha az eğitim verisi gerektirir, ancak konumsal bilgi sağlamaz. Basit sınıflandırma (kedi/köpek) için Image Labeling kullanın. Hedefli tanıma (kaç nesne, nerede oldukları) için Object Detection kullanın.
Hayır, ML Kit Image Labeling tamamen cihaz üzerinde çalışır. Model ilk başlatmada indirilir (indirilen mod — 4 MB) ve yerel olarak depolanır. Core ML modelleri uygulamayla birlikte gelir. TFLite özel modeli APK'nın bir parçasıdır. Tüm hesaplamalar cihazda yapılır ve sunucuya hiçbir veri gönderilmez. Bu, kullanıcı gizliliğini ve çevrimdışı çalışmayı garanti eder. Bulut sınıflandırması (Google Cloud Vision), internet gerektiren ve daha yüksek doğruluk sunan bir alternatiftir.
MobileNetV2'de transfer öğrenme için: sınıf başına minimum 50–100 görüntü, optimum 300–500. Çeşitlilik (açılar, aydınlatma, arka plan) arttıkça doğruluk artar. Sıfırdan eğitim (önceden eğitilmiş model olmadan) için sınıf başına minimum 1000 görüntü gerekir. Öneri: sınıf başına 200 görüntüyle başlayın, doğruluğu değerlendirin ve düşük doğruluklu sınıflar için veri ekleyin. Veri artırma (döndürme, ölçekleme, kaydırma), yeni veri toplamadan etkili veri kümesini 3–5 kat artırır.
Ana yöntemler: eğitim sonrası INT8 niceleme — %1–2 doğruluk kaybıyla boyutu 4 kat azaltır; budama (önemsiz ağırlıkları kaldırma) — %50'ye kadar sıkıştırma; damıtma (daha büyük bir öğretmen modelinin çıktıları üzerinde eğitilmiş daha küçük bir öğrenci modeli) — %80'e kadar sıkıştırma. MobileNetV2 INT8, 3,5 MB yer kaplar, SqueezeNet — 5 MB. Hedef boyut — ilerleme göstergesi olmadan anında yükleme için 10 MB'ı geçmemelidir.
ML Kit Image Labeling v2, Google'ın test setinde (400'den fazla sınıf) %91 top-1 doğruluk gösterir. Top-5 doğruluk — %98'dir. Standart olmayan açılarda ve aydınlatma koşullarında doğruluk %75–85'e düşebilir. Üretim için, düşük kaliteli tahminlerin kararlı filtrelenmesi için 0,7 güven eşiği kullanılması önerilir. Doğruluk yetersizse, belirli bir veri kümesinde eğitilmiş özel bir model kullanın: hedef sınıflarda %95–98 doğruluk.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun