Object Detection: шта је то, алгоритми и принцип рада

Аутор: IT Sectr Објављено: 2026-07-19 Време читања: 9 мин

Object Detection — је задатак компјутерског вида који истовремено одређује класу објекта (мачка, ауто, човек) и његов положај на слици у облику правоугаоног оквира (bounding box). За разлику од Image Labeling, Object Detection проналази више објеката различитих класа у једном кадру и указује њихове координате. У мобилном развоју Object Detection се примењује у системима видео надзора, AR апликацијама, аутономним дроновима, медицинској визуализацији и retail аналитици. Према подацима Google ML Kit, 2025, on-device Object Detection достиже 30 FPS на флагманским уређајима са тачношћу од 87% mAP.

Главне тачке

  • Object Detection — класификација + локализација објеката (bounding box)
  • ML Kit Object Detection — до 30 FPS, 87% mAP, категорије: fashion, food, home, places
  • YOLOv8-Nano — 2.6M параметара, 42% mAP COCO, 10–30 ms latency
  • SSD MobileNetV2 — 22% mAP COCO, 15–40 ms, максимална брзина
  • On-device real-time — сва израчунавања локално, без слања видеа на сервер

Шта је Object Detection: принцип рада

Object Detection решава два задатка истовремено: шта је на слици (класификација) и где (регресија координата). Модел дели слику на мрежу, за сваку ћелију предвиђа bounding box (x, y, width, height) и вероватноће класа. Non-Maximum Suppression (NMS) уклања дуплиране оквире за један објекат, остављајући најсигурније предвиђање. Савремене архитектуре се деле на two-stage (Faster R-CNN — прво region proposals, па класификација) и one-stage (YOLO, SSD — све одједном).

Метрике евалуације: mAP (mean Average Precision) — главна метрика квалитета Object Detection. mAP@0.5 — тачност при IoU прагу 0.5, mAP@0.5:0.95 — просек по праговима од 0.5 до 0.95. FPS — број кадрова у секунди (брзина инференце). За мобилне апликације баланс mAP/FPS је критичан: YOLOv8-Nano даје 42% mAP@0.5:0.95 при 50+ FPS, SSD MobileNet — 22% mAP при 60+ FPS. За real-time > 20 FPS, за интерактивно коришћење 5–15 FPS.

IoU (Intersection over Union) — метрика преклапања предвиђеног и ground truth bounding box-а. IoU = површина пресека / површина уније. Праг IoU за NMS је обично 0.5–0.7. За праћење објеката између кадрова (re-identification) користите Deep SORT или ByteTrack са IoU-подударањем. За бројање објеката на видеу — BoT-SORT обезбеђује 85% MOTA (Multiple Object Tracking Accuracy).

АрхитектураmAP@0.5:0.95LatencyПараметриВеличина
YOLOv8-Nano42%10–30 ms2.6M5.9 MB
YOLOv8-Small50%25–60 ms11.2M22 MB
SSD MobileNetV222%15–40 ms5.2M21 MB
EfficientDet-Lite035%20–50 ms3.9M15 MB

Anchor Boxes — унапред дефинисани облици bounding box-а које модел коригује. YOLOv8 користи детекцију без сидара (anchor-free), што поједностављује учење и убрзава инференцу. SSD и стари YOLO захтевају одабир anchor-а за скуп података. За мобилни развој архитектуре anchor-free (YOLOv8, FCOS) су пожељније — не зависе од величине објеката и једноставније су за прилагођавање.

ML Kit Object Detection и Tracking

ML Kit Object Detection and Tracking — Google библиотека за откривање и праћење објеката на уређају. Подржава две модификације: single-image detector (за фотографије) и streaming detector (за видео). Streaming режим аутоматски прати објекте између кадрова помоћу оптичког тока, смањујући latency између кадрова на 5–10 ms након почетне детекције. Категорије: fashion, food, home, places — по 10–20 класа свака.

ML Kit API: ObjectDetector (опције: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId омогућава праћење истог објекта између кадрова. MultipleObjects = true — детектује до 5 објеката по кадру. Classification — укључује препознавање категорије објекта (подразумевано false за брзину). Streaming режим се препоручује за real-time: 20–30 FPS на Pixel 6.

kotlin
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: након детекције објекта на првом кадру, ML Kit га прати кроз видео ток без поновне детекције (на основу optical flow + feature tracking). Ово смањује оптерећење CPU/GPU: прва детекција 30–60 ms, наредни кадрови праћења 2–5 ms. Ако објекат изађе из кадра или се окрене > 30°, трацкер се ресетује и захтева се поновна детекција. TrackingId остаје док је објекат у кадру. За бројање јединствених објеката користите trackingId као идентификатор.

YOLO: You Only Look Once на мобилним уређајима

YOLOv8-Nano — најмања верзија YOLOv8 (Ultralytics) за edge уређаје. 2.6M параметара, 5.9 MB (FP16), 42% mAP@0.5:0.95 на COCO. YOLOv8 користи anchor-free детекцију + C2f backbone + TaskAlignedAssigner за подударање предвиђања. За мобилни развој доступан је извоз у TFLite (INT8 — 2.0 MB, latency 8–20 ms) и Core ML (4.5 MB, latency 5–15 ms на iPhone 15 Pro). YOLOv8-Nano — најбољи избор за on-device real-time Object Detection.

Извоз YOLOv8 у TFLite: Ultralytics пружа CLI: yolo export model=yolov8n.pt format=tflite int8. Резултат — TFLite INT8 модел оптимизован за GPU Delegate путем NNAPI. За прилагођени скуп података (сопствене класе, не COCO) — обука кроз Ultralytics HUB на 50–500 слика по класи. RT-DETR (Real-Time Detection Transformer) — алтернатива на Transformer архитектури, 48% mAP при 60 FPS на NVIDIA Jetson, али за мобилне уређаје заостаје за YOLOv8-Nano по брзини.

python
# Извоз YOLOv8 у TFLite
from ultralytics import YOLO

model = YOLO("yolov8n.pt")
model.export(format="tflite", int8=True, imgsz=320)

# Инференца са TFLite на Android-у
val interpreter = Interpreter(loadFile("yolov8n_int8.tflite"))
val output = Array(1) { Array(8400) { FloatArray(6) } }
interpreter.run(inputBuffer, output)

YOLO vs ML Kit на мобилним уређајима: ML Kit Object Detection је једноставнији за интеграцију (10 линија кода), не захтева ML експертизу, али је ограничен на стандардне класе (fashion, food, home, places). YOLOv8-Nano захтева прилагођени извоз, али даје потпуну контролу: било које класе, величина улаза, архитектура. За брзо прототипирање — ML Kit. За продукцију са нестандардним објектима — YOLOv8-Nano. За iOS: YOLOv8-Core ML кроз извоз модела из Ultralytics + VNCoreMLRequest.

SSD и друге on-device архитектуре

SSD (Single Shot Multibox Detector) — класична one-stage архитектура за мобилне уређаје. SSD MobileNetV2 — стандард де-факто у 2020–2023: 22% mAP@0.5:0.95 на COCO, 15–40 ms на Pixel 6. SSD користи feature pyramid (различити слојеви MobileNet за детекцију објеката различитих величина) и default boxes (anchor boxes) за сваку ћелију feature map-е. Плус: максимална брзина за своје време. Минус: ниска тачност на малим објектима (10–30 px).

EfficientDet-Lite — породица од Google-а (2020+), оптимизована за TFLite. EfficientDet-Lite0: 3.9M параметара, 35% mAP, 20–50 ms. EfficientDet-Lite2: 8.1M, 42% mAP, 40–80 ms. EfficientDet користи BiFPN (Bidirectional Feature Pyramid Network) за multi-scale feature fusion — ово даје прираст од 2–4% mAP без повећања latency. За мобилни развој Google препоручује EfficientDet-Lite као главни детектор за TFLite Task Vision.

MediaPipe Object Detector — готова имплементација базирана на EfficientDet-Lite у оквиру MediaPipe Tasks Vision. Пружа унификовани API за Android, iOS, Python, Web. MediaPipe Object Detector подржава COCO класе (80 класа), прилагођене моделе, streaming режим и CPU/GPU делегате. За брзу интеграцију Object Detection у међуплатформски пројекат MediaPipe — оптималан избор: један код за све платформе.

kotlin
// 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()
}

Избор архитектуре за мобилну апликацију: за > 30 FPS на средњим уређајима — YOLOv8-Nano (INT8) или SSD MobileNetV2. За тачност > 40% mAP — YOLOv8-Small (11.2M) или EfficientDet-Lite2 (8.1M). За међуплатформскост — MediaPipe Object Detector. За једноставност — ML Kit. За iOS-first — Core ML + YOLOv8 .mlpackage. За Android-first — TFLite Task Vision (ObjectDetector API). Обука: Roboflow (скуп података) + Ultralytics YOLOv8 (тренинг) + извоз у TFLite/Core ML.

TensorFlow Lite Task Vision API

TFLite Task Vision ObjectDetector — унификовани API од Google-а за покретање Object Detection модела на Android и iOS. Task API аутоматски обрађује претпроцесирање слике (скалирање, нормализација, конверзија простор боја) и постпроцесирање (NMS, thresholding). Програмер треба да преда .tflite модел и добије листу Detections са bounding box + category + score. Task API подржава COCO-компатибилне моделе (80 класа).

Конверзија прилагођеног модела у Task API: TFLite модел мора имати улаз [1, height, width, 3] (float32/uint8) и излаз: detection_boxes[1,N,4], detection_classes[1,N], detection_scores[1,N], num_detections[1]. Извоз из TensorFlow Object Detection API са укљученим post-processing операцијама (SSD Postprocess). За YOLOv8 — извоз TFLite са NMS кроз ops-compat. Task API на iOS користи Core ML Delegate за убрзање на ANE.

kotlin
// 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: GPU Delegate на Android-у даје убрзање 3–5x у поређењу са CPU (XNNPACK). NNAPI Delegate — додатних 1.5–2x на уређајима са NPU (Pixel 8, Snapdragon 8 Gen 3, Dimensity 9300). Hexagon, DSP — до 10x на DSP акцелераторима. За iOS Core ML Delegate — 4–6x према CPU. Task API аутоматски бира доступни хардверски акцелератор, али се делегат може принудно поставити кроз DetectorOptions.

Примена Object Detection у мобилним апликацијама

Бројање људи и објеката — retail аналитика: детекција посетилаца у продавници, бројање редова, одређивање попуњености полица робом. Object Detection бројач у кадру омогућава процену проходности и конверзије. ML Kit Object Detector даје до 30 FPS — довољно за real-time бројање. За прелазак линија (zone crossing) — комбинација Object Detection + ByteTrack праћење. Тачност бројања: 92–95% при добром осветљењу.

Детекција дефеката у производњи — Object Detection одређује грешке на траци: огреботине, крхотине, пукотине, неправилну монтажу. Прилагођени модел YOLOv8-Nano (INT8) ради на Android таблету повезаном са USB камером. Latency: 20–40 ms по кадру (25–50 FPS). За сложене дефекте (микропукотине) — повећајте резолуцију улаза на 640x640 (latency 40–80 ms). Обука: Roboflow — скуп података од 200–1000 слика дефеката + Ultralytics YOLOv8.

AR обележавање објеката у реалном времену — ARCore (Android) и ARKit (iOS) користе Object Detection за препознавање равних површина, вертикалних равни и 3D објеката. ML Kit Object Detection + ARCore Scene Semantics даје сегментацију објеката: зид, под, плафон, намештај. За прилагођено AR обележавање (нпр. препознавање одређеног модела софе и постављање AR информација) — YOLOv8-Nano + SceneKit/SceneForm. Real-time захтев: > 20 FPS.

swift
// 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))
    }
}

Медицинска визуализација — Object Detection за анализу рендгенских снимака, МРТ, ЦТ. Детекција тумора, прелома, патологија на мобилном уређају лекара. YOLOv8-Nano на Android таблету детектује нодуле у плућима за 15–30 ms са осетљивошћу од 89% и специфичношћу од 93% (подаци NIH ChestX-ray14). Захтеви: INT8 квантовање (приватност података), high recall (пропуштање патологије је опасније од лажног аларма), коришћење прага поузданости < 0.4. Обрада на уређају гарантује приватност медицинских података.

Често постављана питања

Која је разлика између Object Detection и Image Segmentation?

Object Detection враћа bounding box за сваки објекат — правоугаони оквир који обухвата објекат. Image Segmentation (семантичка или instance) враћа тачан контур објекта — пикселску маску. Сегментација је прецизнија, али спорија (50–300 ms vs 10–30 ms за детекцију). За задатке где је облик објекта важан (медицина, AR), користите сегментацију. За задатке где су положај и присуство важни (бројање, модерација), користите детекцију. MobileViT — архитектура која решава оба задатка.

Колико класа може да детектује Object Detection на мобилном уређају?

YOLOv8-Nano је обучен на COCO (80 класа). ML Kit Object Detection — 40+ класа (fashion, food, home, places). Прилагођени модел може да детектује до 100 класа на мобилном уређају без губитка перформанси. Преко 100 класа — латенција расте и mAP опада. За апликације са 1000+ класа користите хијерархијску класификацију: прво груба категорија (10 класа), затим тачна (100 подкласа). EfficientNet + YOLO — хијерархијски приступ за 1000+ класа са латенцијом < 50 ms.

Може ли се Object Detection користити за праћење објеката између кадрова?

Да, ML Kit Object Detection укључује уграђено праћење: након детекције на првом кадру, објекат се прати кроз видео ток без поновне детекције. За сложеније праћење (укрштање објеката, излазак из кадра) користите ByteTrack или BoT-SORT. ByteTrack ради на основу IoU (intersection over union) између bounding box суседних кадрова — 85% MOTA на MOT17. BoT-SORT додатно користи re-identification (ReID) за обнављање изгубљених објеката — 90% MOTA.

Како поставити YOLOv8 на iOS?

Извезите YOLOv8 у Core ML: yolo export model=yolov8n.pt format=coreml int8. Добијени .mlpackage се интегрише кроз VNCoreMLRequest (Vision Framework). Алтернатива: YOLOv8 → TFLite → Core ML Delegate (iOS TFLite API). Ultralytics YOLOv8 Core ML извоз подржава iOS 16+, ANE убрзање, FP16 и INT8 квантовање. За streaming користите AVFoundation + Vision са понављајућим VNImageRequestHandler захтевима. Real-time: 20–30 FPS на iPhone 14 Pro.

Како побољшати тачност Object Detection на мобилним уређајима?

Повећајте разноврсност скупа података (углови, осветљење, позадина) — 500+ слика по класи. Користите data augmentation: mosaic, mixup, random perspective (Ultralytics YOLOv8 аугментација — 2–5% пораста mAP). Повећајте величину улаза на 640x640 (уместо 320x320) — +4–8% mAP, али latency ×2. Користите FP16 или INT8 квантовање након обуке (post-training) — +0–1% губитка mAP, 4x компресија. За iOS користите ANE (Neural Engine) кроз Core ML Delegate — убрзање 3–5x у односу на CPU.

Резиме

  • Object Detection — класификација + локализација објеката са bounding box
  • ML Kit — до 30 FPS, 40+ класа, уграђено праћење објеката
  • YOLOv8-Nano — 2.6M параметара, 42% mAP, 10–30 ms, најбољи за on-device
  • SSD / EfficientDet — класичне и модерне алтернативе за TFLite
  • Task Vision API — унификовани TFLite API са GPU/ANE убрзањем
  • On-device — приватност података, нулта латенција, без интернета
  • Примена — retail аналитика, AR, медицина, дефектоскопија, бројање објеката

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође