Object Detection, bir nesnenin sınıfını (kedi, araba, insan) ve görüntüdeki konumunu dikdörtgen bir sınırlayıcı kutu (bounding box) olarak aynı anda belirleyen bir bilgisayarlı görü görevidir. Image Labeling'den farklı olarak Object Detection, tek bir karede farklı sınıflardan birden çok nesne bulur ve koordinatlarını belirtir. Mobil geliştirmede, Object Detection video gözetim sistemlerinde, AR uygulamalarında, otonom drone'larda, tıbbi görüntülemede ve perakende analitiğinde kullanılır. Google ML Kit, 2025'e göre, cihaz üzerinde Object Detection amiral gemisi cihazlarda %87 mAP doğruluğu ile 30 FPS'ye ulaşır.
Önemli Noktalar
Object Detection aynı anda iki görevi çözer: görüntüde ne var (sınıflandırma) ve nerede (koordinat regresyonu). Model görüntüyü bir ızgaraya böler, her hücre için bir bounding box (x, y, genişlik, yükseklik) ve sınıf olasılıkları tahmin eder. Non-Maximum Suppression (NMS), tek bir nesne için yinelenen kutuları kaldırır ve en güvenilir tahmini korur. Modern mimariler iki aşamalı (Faster R-CNN — önce bölge önerileri, sonra sınıflandırma) ve tek aşamalı (YOLO, SSD — her şey aynı anda) olarak ayrılır.
Değerlendirme Metrikleri: mAP (mean Average Precision) — Object Detection için ana kalite metriği. mAP@0.5 — IoU eşiği 0.5'te doğruluk, mAP@0.5:0.95 — 0.5'ten 0.95'e eşiklerin ortalaması. FPS — saniyedeki kare sayısı (çıkarım hızı). Mobil uygulamalar için mAP/FPS dengesi kritiktir: YOLOv8-Nano, 50+ FPS'de %42 mAP@0.5:0.95 sağlar, SSD MobileNet — 60+ FPS'de %22 mAP sağlar. Gerçek zamanlı için > 20 FPS, etkileşimli kullanım için 5–15 FPS.
IoU (Intersection over Union) — tahmin edilen ve gerçek bounding box arasındaki örtüşme metriği. IoU = kesişim alanı / birleşim alanı. NMS için IoU eşiği tipik olarak 0.5–0.7'dir. Kareler arasında nesne izleme (yeniden tanımlama) için IoU eşleştirme ile Deep SORT veya ByteTrack kullanın. Videodaki nesneleri saymak için BoT-SORT, %85 MOTA (Multiple Object Tracking Accuracy) sağlar.
| Mimari | mAP@0.5:0.95 | Gecikme | Parametre | Boyut |
|---|---|---|---|---|
| YOLOv8-Nano | %42 | 10–30 ms | 2.6M | 5.9 MB |
| YOLOv8-Small | %50 | 25–60 ms | 11.2M | 22 MB |
| SSD MobileNetV2 | %22 | 15–40 ms | 5.2M | 21 MB |
| EfficientDet-Lite0 | %35 | 20–50 ms | 3.9M | 15 MB |
Anchor Boxes — modelin ayarladığı önceden tanımlanmış bounding box şekilleri. YOLOv8, çapa içermeyen algılama (anchor-free) kullanır, bu da eğitimi basitleştirir ve çıkarımı hızlandırır. SSD ve eski YOLO, her veri kümesi için çapa ayarı gerektirir. Mobil geliştirme için, çapa içermeyen mimariler (YOLOv8, FCOS) tercih edilir — nesne boyutuna bağlı değildir ve özelleştirmesi daha kolaydır.
ML Kit Object Detection and Tracking — cihaz üzerinde nesne algılama ve izleme için Google kütüphanesi. İki modu destekler: tek görüntülü algılayıcı (fotoğraflar için) ve akış algılayıcı (video için). Akış modu, optik akış kullanarak kareler arasında otomatik olarak nesneleri izler ve ilk algılamadan sonra kareler arası gecikmeyi 5–10 ms'ye düşürür. Kategoriler: fashion, food, home, places — her biri 10–20 sınıf.
ML Kit API: ObjectDetector (seçenekler: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId, aynı nesneni kareler arasında izlemeye olanak tanır. MultipleObjects = true — kare başına 5'e kadar nesne algılar. Classification — nesne kategorisi tanımayı etkinleştirir (hız için varsayılan false). Akış modu gerçek zamanlı için önerilir: Pixel 6'da 20–30 FPS.
val options = ObjectDetectorOptions.Builder()
.setDetectorMode(ObjectDetectorOptions.STREAM_MODE)
.enableClassification()
.enableMultipleObjects()
.build()
val detector = ObjectDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { objects ->
objects.forEach { obj ->
val box = obj.boundingBox
val trackingId = obj.trackingId
val category = obj.classificationCategory()
drawBoundingBox(box, trackingId, category)
}
}
Object Tracking: ilk karede bir nesneyi algıladıktan sonra ML Kit, yeniden algılama olmadan video akışı boyunca onu izler (optik akış + özellik izlemeye dayalı). Bu, CPU/GPU yükünü azaltır: ilk algılama 30–60 ms, sonraki izleme kareleri 2–5 ms'dir. Nesne kareden çıkarsa veya > 30° dönerse, izleyici sıfırlanır ve yeniden algılama gerekir. TrackingId, nesne karede olduğu sürece devam eder. Benzersiz nesneleri saymak için trackingId'yi tanımlayıcı olarak kullanın.
YOLOv8-Nano — uç cihazlar için YOLOv8'nin (Ultralytics) en küçük sürümü. 2.6M parametre, 5.9 MB (FP16), COCO'da %42 mAP@0.5:0.95. YOLOv8, çapa içermeyen algılama + C2f omurgası + TaskAlignedAssigner kullanır. Mobil geliştirme için, TFLite'a (INT8 — 2.0 MB, gecikme 8–20 ms) ve Core ML'ye (4.5 MB, iPhone 15 Pro'da gecikme 5–15 ms) dışa aktarma mevcuttur. YOLOv8-Nano, cihaz üzerinde gerçek zamanlı Object Detection için en iyi seçimdir.
YOLOv8'in TFLite'a Dışa Aktarılması: Ultralytics CLI sağlar: yolo export model=yolov8n.pt format=tflite int8. Çıktı, NNAPI aracılığıyla GPU Delegate için optimize edilmiş bir TFLite INT8 modelidir. Özel veri kümeleri (kendi sınıflarınız, COCO değil) için — Ultralytics HUB aracılığıyla sınıf başına 50–500 görüntüde eğitim. RT-DETR (Real-Time Detection Transformer) — Transformer mimarisine dayalı bir alternatif, NVIDIA Jetson'da 60 FPS'de %48 mAP, ancak mobil cihazlar için hız açısından YOLOv8-Nano'nun gerisindedir.
# YOLOv8 export to TFLite
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)
# Inference with TFLite on Android
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)
Mobil Cihazlarda YOLO vs ML Kit: ML Kit Object Detection entegrasyonu daha kolaydır (10 satır kod), ML uzmanlığı gerektirmez, ancak standart sınıflarla (fashion, food, home, places) sınırlıdır. YOLOv8-Nano özel dışa aktarma gerektirir ancak tam kontrol sağlar: herhangi bir sınıf, girdi boyutu, mimari. Hızlı prototipleme için — ML Kit. Standart olmayan nesnelerle üretim için — YOLOv8-Nano. iOS için: Ultralytics'ten model dışa aktarma + VNCoreMLRequest ile YOLOv8-Core ML.
SSD (Single Shot Multibox Detector) — mobil cihazlar için klasik tek aşamalı bir mimari. SSD MobileNetV2 — 2020–2023'te fiili standart: COCO'da %22 mAP@0.5:0.95, Pixel 6'da 15–40 ms. SSD, farklı boyutlardaki nesneleri algılamak için özellik piramidi (farklı MobileNet katmanları) ve her özellik haritası hücresi için varsayılan kutular (anchor boxes) kullanır. Artıları: kendi dönemi için maksimum hız. Eksileri: küçük nesnelerde (10–30 px) düşük doğruluk.
EfficientDet-Lite — Google'dan (2020+) bir aile, TFLite için optimize edilmiştir. EfficientDet-Lite0: 3.9M parametre, %35 mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, %42 mAP, 40–80 ms. EfficientDet, çok ölçekli özellik füzyonu için BiFPN (Bidirectional Feature Pyramid Network) kullanır — bu, gecikmeyi artırmadan %2–4 mAP kazancı sağlar. Mobil geliştirme için Google, TFLite Task Vision için birincil algılayıcı olarak EfficientDet-Lite'ı önerir.
MediaPipe Object Detector — MediaPipe Tasks Vision'ın bir parçası olarak EfficientDet-Lite tabanlı hazır bir uygulama. Android, iOS, Python, Web için birleşik API sağlar. MediaPipe Object Detector, COCO sınıflarını (80 sınıf), özel modelleri, akış modunu ve CPU/GPU temsilcilerini destekler. Çapraz platform projesinde hızlı Object Detection entegrasyonu için MediaPipe en uygun seçimdir: tüm platformlar için tek kod.
// MediaPipe Object Detection
val options = ObjectDetectorOptions.Builder()
.setBaseOptions(BaseOptions.builder()
.setDelegate(BaseOptions.Delegate.GPU)
.build())
.setMaxResults(5)
.setScoreThreshold(0.5f)
.build()
val detector = ObjectDetector.createFromOptions(context, options)
val image = MPImage.fromBitmap(bitmap)
val result = detector.detect(image)
result.detections.forEach { detection ->
val box = detection.boundingBox
val category = detection.categories.first()
}
Mobil Uygulama için Mimari Seçimi: orta seviye cihazlarda > 30 FPS için — YOLOv8-Nano (INT8) veya SSD MobileNetV2. > %40 mAP doğruluk için — YOLOv8-Small (11.2M) veya EfficientDet-Lite2 (8.1M). Çapraz platform için — MediaPipe Object Detector. Basitlik için — ML Kit. iOS öncelikli için — Core ML + YOLOv8 .mlpackage. Android öncelikli için — TFLite Task Vision (ObjectDetector API). Eğitim: Roboflow (veri kümesi) + Ultralytics YOLOv8 (eğitim) + TFLite/Core ML'ye dışa aktarma.
TFLite Task Vision ObjectDetector — Android ve iOS'ta Object Detection modellerini çalıştırmak için Google'ın birleşik API'si. Task API, görüntü ön işlemeyi (ölçekleme, normalleştirme, renk alanı dönüştürme) ve son işlemeyi (NMS, eşikleme) otomatik olarak yönetir. Geliştiricinin yalnızca bir .tflite modeli geçirmesi ve bounding box + kategori + puan içeren Detections listesini alması gerekir. Task API, COCO uyumlu modelleri (80 sınıf) destekler.
Özel Modelin Task API'ye Dönüştürülmesi: TFLite modeli girdi [1, height, width, 3] (float32/uint8) ve çıktı: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1] olmalıdır. Son işleme ops'ları (SSD Postprocess) dahil olmak üzere TensorFlow Object Detection API'den dışa aktarma. YOLOv8 için — ops-compat aracılığıyla NMS ile TFLite dışa aktarma. iOS'ta Task API, ANE'de hızlandırma için Core ML Delegate kullanır.
// TFLite Task Vision Object Detector
val options = ObjectDetectorOptions.Builder()
.setScoreThreshold(0.5f)
.setMaxResults(10)
.setDelegate(Delegate.GPU)
.build()
val detector = ObjectDetector.createFromFileAndOptions(
context, "custom_model.tflite", options
)
val image = TensorImage.fromBitmap(bitmap)
val results = detector.detect(image)
results.forEach { detection ->
onObjectDetected(
detection.boundingBox,
detection.categories.first().label,
detection.categories.first().score
)
}
Task API Performansı: Android'de GPU Delegate, CPU'ya (XNNPACK) kıyasla 3–5x hızlandırma sağlar. NPU'lu cihazlarda (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300) NNAPI Delegate — ek 1.5–2x. Hexagon, DSP — DSP hızlandırıcılarda 10x'e kadar. iOS için Core ML Delegate — CPU'ya karşı 4–6x. Task API, mevcut donanım hızlandırıcıyı otomatik olarak seçer, ancak DetectorOptions aracılığıyla bir temsilci zorunlu kılınabilir.
İnsan ve Nesne Sayımı — perakende analitiği: mağazadaki ziyaretçileri algılama, kuyruk sayma, raf stok seviyelerini belirleme. Bir karedeki Object Detection kişi sayacı, yaya trafiğini ve dönüşümü tahmin etmeye yardımcı olur. ML Kit Object Detector, 30 FPS'ye kadar sunar — gerçek zamanlı sayım için yeterli. Bölge geçişi için — Object Detection + ByteTrack izleme kombinasyonu. Sayım doğruluğu: iyi aydınlatma koşullarında %92–95.
Üretimde Hata Tespiti — Object Detection, konveyör üzerindeki kusurları tanımlar: çizikler, yongalar, çatlaklar, yanlış montaj. Özel bir YOLOv8-Nano (INT8) modeli, USB kameraya bağlı bir Android tablette çalışır. Gecikme: kare başına 20–40 ms (25–50 FPS). Karmaşık kusurlar (mikro çatlaklar) için — girdi çözünürlüğünü 640x640'e yükseltin (gecikme 40–80 ms). Eğitim: Roboflow — 200–1000 kusur görüntüsünden oluşan veri kümesi + Ultralytics YOLOv8.
Gerçek Zamanlı AR Nesne İşaretleme — ARCore (Android) ve ARKit (iOS), düz yüzeyleri, dikey düzlemleri ve 3B nesneleri tanımak için Object Detection kullanır. ML Kit Object Detection + ARCore Scene Semantics, nesne segmentasyonu sağlar: duvar, zemin, tavan, mobilya. Özel AR işaretleme için (örneğin, belirli bir kanepe modelini tanıma ve AR bilgisi yerleştirme) — YOLOv8-Nano + SceneKit/SceneForm. Gerçek zamanlı gereksinimi: > 20 FPS.
// ARKit + Object Detection
let request = VNCoreMLRequest(model: objectDetector) { req, _ in
guard let results = req.results as? [VNDetectedObjectObservation] else { return }
for result in results where result.confidence > 0.6 {
let rect = result.boundingBox
let worldPos = arView.hitTest(rect.center)
arView.addAnchor(ARAnchor(name: label, transform: worldPos))
}
}
Tıbbi Görüntüleme — X-ışınları, MRG, BT taramalarını analiz etmek için Object Detection. Bir doktorun mobil cihazında tümör, kırık, patoloji tespiti. Bir Android tablette YOLOv8-Nano, 15–30 ms içinde akciğer nodüllerini %89 duyarlılık ve %93 özgüllük ile tespit eder (NIH ChestX-ray14 verileri). Gereksinimler: INT8 niceleme (veri gizliliği), yüksek geri çağırma (patolojiyi kaçırmak yanlış alarmdan daha tehlikelidir), güven eşiği < 0.4. Cihaz üzerinde işleme, tıbbi veri gizliliğini garanti eder.
Sıkça Sorulan Sorular
Object Detection her nesne için bir bounding box döndürür — nesneyi çevreleyen dikdörtgen bir çerçeve. Image Segmentation (semantik veya örnek) bir nesnenin tam konturunu döndürür — piksel düzeyinde bir maske. Segmentasyon daha doğru ancak daha yavaştır (algılama için 50–300 ms vs 10–30 ms). Nesne şeklinin önemli olduğu görevlerde (tıp, AR) segmentasyon kullanın. Konum ve varlığın önemli olduğu görevlerde (sayma, denetleme) algılama kullanın. MobileViT, her iki görevi de çözen bir mimaridir.
YOLOv8-Nano, COCO (80 sınıf) üzerinde eğitilmiştir. ML Kit Object Detection — 40+ sınıf (fashion, food, home, places). Özel bir model, performans kaybı olmadan mobil cihazda 100 sınıfa kadar algılama yapabilir. 100 sınıfın ötesinde, gecikme artar ve mAP düşer. 1000+ sınıflı uygulamalar için hiyerarşik sınıflandırma kullanın: önce geniş bir kategori (10 sınıf), sonra kesin bir kategori (100 alt sınıf). EfficientNet + YOLO — 50 ms'den az gecikme ile 1000+ sınıf için hiyerarşik bir yaklaşım.
Evet, ML Kit Object Detection yerleşik izleme içerir: ilk karede algılamadan sonra nesne, yeniden algılama olmadan video akışı boyunca izlenir. Daha karmaşık izleme (nesne kesişimi, kareden çıkma) için ByteTrack veya BoT-SORT kullanın. ByteTrack, bitişik karelerin bounding box'ları arasındaki IoU'ya (intersection over union) dayalı olarak çalışır — MOT17'de %85 MOTA. BoT-SORT, kaybolan nesneleri kurtarmak için ek olarak yeniden tanımlama (ReID) kullanır — %90 MOTA.
YOLOv8'i Core ML'ye dışa aktarın: yolo export model=yolov8n.pt format=coreml int8. Elde edilen .mlpackage, VNCoreMLRequest (Vision Framework) aracılığıyla entegre edilir. Alternatif: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Ultralytics YOLOv8 Core ML dışa aktarma, iOS 16+, ANE hızlandırma, FP16 ve INT8 nicelemeyi destekler. Akış için, tekrarlanan VNImageRequestHandler performans istekleriyle AVFoundation + Vision kullanın. Gerçek zamanlı: iPhone 14 Pro'da 20–30 FPS.
Veri kümesi çeşitliliğini artırın (açılar, aydınlatma, arka plan) — sınıf başına 500+ görüntü. Veri artırma kullanın: mosaic, mixup, random perspective (Ultralytics YOLOv8 artırma — %2–5 mAP kazancı). Girdi boyutunu 640x640'e yükseltin (320x320 yerine) — +%4–8 mAP, ancak gecikme ×2. Eğitim sonrası FP16 veya INT8 niceleme kullanın — +%0–1 mAP kaybı, 4x sıkıştırma. iOS için, Core ML Delegate aracılığıyla ANE (Neural Engine) kullanın — CPU'ya karşı 3–5x hızlandırma.
Ö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