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 латентност
  • 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. За реален 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.95ЛатентностПараметриРазмер
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-free архитектурите (YOLOv8, FCOS) са предпочитани — не зависят от размера на обектите и са по-прости за персонализиране.

ML Kit Object Detection и Tracking

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

API на ML Kit: ObjectDetector (опции: detectorMode, enableClassification, enableMultipleObjects) → InputImage → DetectedObject (trackingId, boundingBox, classificationCategory, classificationConfidence). TrackingId позволява проследяване на същия обект между кадри. MultipleObjects = true — открива до 5 обекта на кадър. Classification — включва разпознаване на категорията на обекта (по подразбиране false за скорост). Режимът streaming се препоръчва за реален 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, латентност 8–20 ms) и Core ML (4.5 MB, латентност 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 срещу 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) за всяка клетка на картата на характеристиките. Плюс: максимална скорост за времето си. Минус: ниска точност на малки обекти (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 без увеличаване на латентността. За мобилно разработване 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 — достатъчно за броене в реално време. За пресичане на линии (zone crossing) — комбинация от Object Detection + ByteTrack проследяване. Точност на броене: 92–95% при добра осветеност.

Откриване на дефекти в производството — Object Detection определя дефекти на конвейера: драскотини, отчупвания, пукнатини, неправилен монтаж. Персонализираният модел YOLOv8-Nano (INT8) работи на Android таблет, свързан с USB камера. Латентност: 20–40 ms на кадър (25–50 FPS). За сложни дефекти (микропукнатини) — увеличете разделителната способност на входа до 640x640 (латентност 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. Изискване за реален 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 срещу 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 заявки. Реален time: 20–30 FPS на iPhone 14 Pro.

Как да подобрим точността на Object Detection на мобилни устройства?

Увеличете разнообразието на набора от данни (ъгли, осветление, фон) — 500+ изображения на клас. Използвайте data augmentation: mosaic, mixup, random perspective (Ultralytics YOLOv8 augmentation — 2–5% увеличение на mAP). Увеличете размера на входа до 640x640 (вместо 320x320) — +4–8% mAP, но латентност ×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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също