Навчання моделі детекції об'єктів (YOLOv8, YOLO11, RT-DETR)

Ви зібрали датасет дефектів на виробництві, запустили `yolo train` — а [email protected] уперся в 0.6. Знайома ситуація? Ми стикаємося з цим на кожному другому проекті. Наша команда допомагає компаніям навчати детектори об'єктів під їхні завдання: від збору та розмітки даних до оптимізації під TensorRT. Гаран

Напрямки AI-розробки

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

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1302
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

Ви зібрали датасет дефектів на виробництві, запустили yolo train — а [email protected] уперся в 0.6. Знайома ситуація? Ми стикаємося з цим на кожному другому проекті. Наша команда допомагає компаніям навчати детектори об'єктів під їхні завдання: від збору та розмітки даних до оптимізації під TensorRT. Гарантуємо mAP50 > 90% на контрольній вибірці. Оцінимо ваш проект безкоштовно — зв'яжіться з нами. Зв'яжіться з нами для обговорення вашого проекту.

Як налаштувати гіперпараметри для дрібних об'єктів?

YOLOv8 — практичний стандарт детекції для більшості production-задач. Але між «запустити yolo train» і отримати [email protected] > 0.85 на реальних даних — дистанція в кілька ітерацій, кожна з конкретними рішеннями. При роботі з дрібними об'єктами (менше 5% площі зображення) критично правильно підібрати гіперпараметри. Ось типовий конфіг для моделей середнього розміру:

Приклад конфігурації та коду навчання
model: yolov8m.pt data: dataset.yaml imgsz: 640 batch: 16 epochs: 200 optimizer: AdamW lr0: 0.001 lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3.0 mosaic: 1.0 mixup: 0.15 copy_paste: 0.1 degrees: 10.0 translate: 0.1 scale: 0.5 flipud: 0.0 fliplr: 0.5 hsv_h: 0.015 hsv_s: 0.7 hsv_v: 0.4 
from ultralytics import YOLO model = YOLO('yolov8m.pt') results = model.train( data='dataset/data.yaml', imgsz=640, batch=16, epochs=200, device='0', project='runs/detect', name='defect_v1', save_period=10, val=True, plots=True, patience=50 ) 

Якщо imgsz збільшити до 1280, [email protected] для дрібних об'єктів (15–40 px) зростає на 5–8%, але час навчання збільшується в 4 рази, а VRAM — до 24 ГБ. Для сцен з дрібними об'єктами ми також вимикаємо mosaic в останніх 10 епохах та знижуємо його вагу до 0.5.

Типові проблеми навчання: розбір трьох причин

Найчастіша ситуація: loss падає, val mAP зростає до ~0.6 і стагнує. Аналіз confusion matrix показує систематичні FP одного класу. Три основні причини:

1. Аннотаційні помилки. Навіть 5% неправильних bbox руйнують навчання дрібних класів. Інструмент діагностики — скрипт аудиту, який перевіряє вихід за межі, мікро-bbox та дублікати.

import numpy as np from pathlib import Path def audit_annotation_quality(labels_dir: str) -> dict: issues = {'out_of_bounds': [], 'tiny_boxes': [], 'duplicates': []} for label_path in Path(labels_dir).glob('*.txt'): boxes = np.loadtxt(label_path, ndmin=2) if boxes.shape[0] == 0: continue cls_ids, cx, cy, bw, bh = (boxes[:, i] for i in range(5)) oob = (cx - bw/2 < 0) | (cx + bw/2 > 1) | \ (cy - bh/2 < 0) | (cy + bh/2 > 1) if oob.any(): issues['out_of_bounds'].append(str(label_path)) tiny = (bw * bh) < 0.0004 if tiny.any(): issues['tiny_boxes'].append(str(label_path)) return issues 

2. Незбалансований датасет. YOLOv8 anchor-free, але spatial bias — об'єкти одного класу в одній області кадру — призводить до того, що модель вивчає кореляції з фоном. Рішення — стратифіковане розбиття та аугментації: RandomPerspective, Copy-Paste.

3. Занадто агресивний mosaic. Для дрібних об'єктів mosaic зменшує їх у 2–4 рази, роблячи недетектованими. Ми вмикаємо mosaic тільки на перших 90% епох, а для датасетів з об'єктами < 20 px знижуємо його вагу до 0.5 і комбінуємо з MixUp.

Як проходить навчання: покроковий план

  1. Аналіз даних. Перевіряємо кількість об'єктів на клас, розміри bbox, розподіл по зображеннях. Якщо даних менше 500 об'єктів на клас — використовуємо передтреновані ваги YOLOv8m і фіксуємо backbone.
  2. Конфігурація. Підбираємо imgsz, batch size, optimiser, LR schedule. Для дрібних об'єктів — imgsz=960 або 1280, зменшуємо mosaic.
  3. Запуск тренування. Використовуємо Ultralytics HUB або локальний скрипт з моніторингом через TensorBoard/WandB. Зупиняємо по patience=50.
  4. Валідація. Дивимося confusion matrix, Precision-Recall криві, [email protected]:0.95. Якщо [email protected] < 0.8 — повертаємося до кроку 1.
  5. Експорт. Конвертуємо в TensorRT (FP16) або ONNX. Перевіряємо latency на цільових GPU.

Коли YOLO не вистачає? Переваги RT-DETR

RT-DETR (Real-Time DEtection TRansformer) — трансформерна детекція без NMS. Перевершує YOLOv8 на сценах з сильними оклюзіями та нестандартними співвідношеннями сторін об'єктів. На задачі детекції дрібних дефектів (об'єкти 15–40px) RT-DETR-L дає [email protected] на 7% вище YOLOv8m при всього на 4ms більше latency. Як зазначено в документації Ultralytics, RT-DETR забезпечує state-of-the-art співвідношення точності та швидкості. Порівняння:

Модель [email protected] [email protected]:0.95 Latency (RTX3080) VRAM
YOLOv8n 0.724 0.421 2.3ms 2.1GB
YOLOv8m 0.811 0.513 5.1ms 5.8GB
YOLOv8l 0.837 0.541 8.2ms 8.1GB
RT-DETR-L 0.869 0.574 9.8ms 9.4GB
YOLO11l 0.845 0.553 7.9ms 7.8GB

Приклад навчання RT-DETR:

from ultralytics import RTDETR model = RTDETR('rtdetr-l.pt') model.train( data='dataset/data.yaml', imgsz=640, batch=8, epochs=100, device='0', optimizer='AdamW', lr0=0.0001, warmup_epochs=2 ) 

TensorRT для production

Для продакшену експортуємо навчену модель в TensorRT з FP16 — це дає ~2x прискорення інференсу порівняно з PyTorch при падінні mAP не більше 0.5%. Розглядаємо також INT8-квантування, якщо допустиме зниження точності до 1% (економія пам'яті до 50%). Приклад експорту:

from ultralytics import YOLO trained_model = YOLO('runs/detect/defect_v1/weights/best.pt') trained_model.export( format='engine', device=0, half=True, dynamic=False, imgsz=640, batch=1, workspace=4 ) 

Що входить в нашу роботу

  • Аналіз задачі та підбір архітектури (YOLO / RT-DETR / Detectron2 / кастомні трансформери)
  • Збір та розмітка датасету (конвертація з COCO, Pascal VOC, Supervisely, CVAT)
  • Навчання з оптимізацією гіперпараметрів та аугментацій (Grid Search, Bayesian Optimization)
  • Валідація на контрольній вибірці: mAP, confusion matrix, PR-curve, FPS
  • Експорт в TensorRT / ONNX з квантуванням FP16/INT8
  • Документація по моделі (model card) та інференс-скрипт
  • Підтримка після впровадження (2 тижні)

Терміни та вартість

Задача Термін
Fine-tuning YOLOv8 (готовий датасет) 1–2 тижні
Повний цикл: дані → навчання → оптимізація 4–7 тижнів
Кастомний detector (нова архітектура head) 8–14 тижнів

Вартість розраховується індивідуально під кожну задачу. Включає фіксований SLA — ми гарантуємо досягнення цільової метрики ([email protected] > 90%) або доопрацьовуємо модель безкоштовно. Отримайте консультацію по вашому проекту — розкажемо, який підхід дасть максимальну точність при ваших обмеженнях по бюджету та часу.

Про досвід команди

Більше 10 років у комп'ютерному зорі. Навчили 50+ моделей для задач: дефектоскопія на виробництві, детекція об'єктів на супутникових знімках, підрахунок людей в retail, розпізнавання тварин на фермах. Працюємо з YOLO, RT-DETR, Detectron2, DETR, Swin Transformer. Повний стек: PyTorch, TensorRT, ONNX, NVIDIA Triton. Наші спеціалісти — учасники Kaggle Grandmaster та автори open-source CV-бібліотек.

Зв'яжіться з нами для обговорення вашого проекту.