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, ширина, висота) та ймовірності класів. 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 вимагають підбору anchors під датасет. Для мобільної розробки anchor-free архітектури (YOLOv8, FCOS) є кращими — вони не залежать від розміру об'єктів і простіші в кастомізації.

ML Kit Object Detection та Tracking

ML Kit Object Detection and Tracking — бібліотека Google для виявлення та трекінгу об'єктів на пристрої. Підтримує дві модифікації: single-image detector (для фото) та streaming detector (для відео). Streaming mode автоматично трекіть об'єкти між кадрами за допомогою оптичного потоку, що знижує latency до 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 mode рекомендовано для 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 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)

YOLO vs ML Kit на мобільних пристроях: ML Kit Object Detection простіше в інтеграції (10 рядків коду), не вимагає ML-експертизи, але обмежений стандартними класами (fashion, food, home, places). YOLOv8-Nano вимагає кастомного експорту, але дає повний контроль: будь-які класи, розмір входу, архітектура. Для швидкого прототипування — ML Kit. Для production з нестандартними об'єктами — 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 mode та 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 (training) + експорт в TFLite/Core ML.

TensorFlow Lite Task Vision API

TFLite Task Vision ObjectDetector — уніфікований API від Google для запуску моделей Object Detection на Android та iOS. Task API автоматично обробляє передобробку зображення (масштабування, нормалізація, color space conversion) та постобробку (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 ops включеними (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 автоматично вибирає доступний апаратний прискорювач, але можна примусово вказати delegate через 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 requirement: > 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 (пропуск патології небезпечніший за хибне спрацювання), використання порогу confidence < 0.4. On-device обробка гарантує приватність медичних даних.

Часті запитання

У чому різниця між Object Detection та Image Segmentation?

Object Detection повертає bounding box для кожного об'єкта — прямокутну рамку, що охоплює об'єкт. Image Segmentation (семантична або instance) повертає точний контур об'єкта — попіксельну маску. Segmentation точніша, але повільніша (50–300 ms vs 10–30 ms для detection). Для завдань, де важлива форма об'єкта (медицина, AR), використовуйте segmentation. Для завдань, де важливе положення та наявність (підрахунок, модерація), використовуйте detection. MobileViT — архітектура, що вирішує обидві задачі.

Скільки класів може визначати Object Detection на мобільному пристрої?

YOLOv8-Nano навчена на COCO (80 класів). ML Kit Object Detection — 40+ класів (fashion, food, home, places). Кастомна модель може визначати до 100 класів на мобільному пристрої без втрати продуктивності. Понад 100 класів — зростає latency та падає mAP. Для додатків з 1000+ класів використовуйте ієрархічну класифікацію: спочатку груба категорія (10 класів), потім точна (100 підкласів). EfficientNet + YOLO — ієрархічний підхід для 1000+ класів з latency < 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 augmentation — 2–5% приросту mAP). Збільште розмір входу до 640x640 (замість 320x320) — +4–8% mAP, але latency ×2. Використовуйте FP16 або INT8 квантування після навчання (post-training) — +0–1% mAP loss, 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 — приватність даних, zero latency, без інтернету
  • Застосування — retail-аналітика, AR, медицина, дефектоскопія, підрахунок об'єктів

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також