Ви зібрали датасет дефектів на виробництві, запустили 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.
Як проходить навчання: покроковий план
- Аналіз даних. Перевіряємо кількість об'єктів на клас, розміри bbox, розподіл по зображеннях. Якщо даних менше 500 об'єктів на клас — використовуємо передтреновані ваги YOLOv8m і фіксуємо backbone.
- Конфігурація. Підбираємо imgsz, batch size, optimiser, LR schedule. Для дрібних об'єктів — imgsz=960 або 1280, зменшуємо mosaic.
- Запуск тренування. Використовуємо Ultralytics HUB або локальний скрипт з моніторингом через TensorBoard/WandB. Зупиняємо по patience=50.
- Валідація. Дивимося confusion matrix, Precision-Recall криві, [email protected]:0.95. Якщо [email protected] < 0.8 — повертаємося до кроку 1.
- Експорт. Конвертуємо в 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-бібліотек.
Зв'яжіться з нами для обговорення вашого проекту.
Як distribution shift вбиває метрики CV-моделі в промисловості
На виробництві ставлять камеру, контролюють якість продукції. Модель навчена на 10 000 розмічених зображень — точність на тесті mAP 0.84. Запускають у продакшен — і в перший же тиждень пропускають 30% дефектів. Освітлення на лінії змінюється по змінах, distribution shift обнуляє метрики. Це класична історія з Computer Vision у промисловості, де розпізнавання образів дає збій без правильної обробки дрейфу.
Наші інженери з досвідом 60+ проектів з комп'ютерного зору знають, як виключити такі сценарії. Гарантуємо стабільну роботу моделі в реальних умовах.
Які архітектури детекції об'єктів обрати: YOLO, RT‑DETR чи інші?
YOLO — стандарт для real‑time детекції. YOLOv8 та YOLOv11 від Ultralytics — найбільш використовувані версії у виробництві: простий API, активна спільнота, вбудована валідація та експорт в ONNX/TensorRT. Для задач з високими вимогами до точності та коли latency менш критична — RT‑DETR, transformer‑based архітектура без NMS, дає кращий mAP на COCO при порівнянній швидкості з YOLOv8l.
| Архітектура |
mAP на COCO (val2017) |
FPS (A10G, FP16) |
Складність деплою |
| YOLOv8n |
37.3 |
700+ |
Низька (ONNX/TensorRT) |
| YOLOv8m |
50.2 |
250 |
Низька |
| RT‑DETR-L |
53.0 |
140 |
Середня (вимагає PyTorch) |
| Mask R‑CNN |
38.2 (bbox) |
30 |
Висока |
Типова помилка при навчанні детектора: датасет 8000 зображень, 3 класи, fine‑tune YOLOv8m — F1 0.73 на валідації. Дивимося confusion matrix — один клас майже ніколи не детектується. Причина: дисбаланс 1:23. Рішення: oversampling рідкісного класу, focal loss для objectness, аугментації (Mosaic, MixUp вимкнути для рідкісного класу — вони його «розмивають»). Transfer learning обов'язковий: передтреновані на COCO ваги скорочують потребу в даних у 10 разів. Fine‑tune на 500–2000 доменних зображеннях дає робочу модель за 1–2 дні на одній GPU.
Для edge deployment: експорт в ONNX → TensorRT engine. YOLOv8n в TensorRT FP16 на Jetson AGX Orin дає 150+ FPS при P99 latency < 8 ms — це в 3 рази швидше, ніж ONNX Runtime без TensorRT. На сервері A10G: 700+ FPS для YOLOv8n в TensorRT INT8.
Як fine‑tuning YOLO допомагає в розпізнаванні образів?
Припустимо, потрібно знаходити мікродефекти на поверхні металу — задача з високою роздільною здатністю та перекосом класів. Використовуємо YOLOv8m, передтренований на COCO (документація Ultralytics), і донавчаємо на 2000 власних зображень. Застосовуємо аугментації Mosaic, MixUp, random perspective. Після 200 епох mAP 0.5 досягає 0.93. Ключові прийоми:
-
focal loss для objectness голови — зменшує внесок легко класифікованих прикладів.
-
class‑balanced sampling — вирівнює представництво рідкісних класів.
-
Test Time Augmentation (TTA) — підвищує recall на 5–7% за рахунок усереднення по фліпах та масштабах.
Отримайте консультацію з підбору архітектури для вашого завдання — зв'яжіться з нами.
Які архітектури сегментації обрати: SAM, Mask R‑CNN чи інші?
SAM (Segment Anything Model) від Meta змінив підхід до сегментації. SAM 2 працює з відео, підтримує трекінг об'єктів через кадри — для інтерактивного виділення об'єкта по точці або bbox це найкращий вибір з коробки. Для production instance segmentation без інтерактивного промпту — Mask R‑CNN або YOLOv8‑seg. YOLOv8‑seg навчається як звичайний детектор з додатковими масками, зручний у тих же пайплайнах. Семантична сегментація (кожен піксель — клас) — SegFormer, DeepLabV3+. SegFormer‑B5 дає хороший баланс точності та швидкості для аналізу супутникових знімків або медичної сегментації.
Кейс: сегментація клітин на мікроскопічних зображеннях. Датасет 400 зображень з ручною розміткою. Навчання Mask R‑CNN на ResNet‑50 backbone дало IoU 0.61 — погано. Проблема: об'єкти (клітини) перекриваються, стандартний NMS вбиває перекриваючі передбачення. Рішення: перехід на cellpose (спеціалізована архітектура для біомедичних задач) + soft‑NMS. IoU зріс до 0.79.
Коли Tesseract не справляється з OCR?
Tesseract — відправна точка для простих задач: друкований текст, хороше освітлення, рівне розташування. Як тільки з'являються рукописні елементи, нестандартні шрифти, перспективні спотворення або багатоколоночний макет — Tesseract деградує швидко.
PaddleOCR — production‑grade рішення: виявлення текстових блоків + розпізнавання + структурний аналіз. Працює з коробки для 80+ мов, включаючи українську. Підтримує таблиці та документи зі складною структурою. Wikipedia: Оптичне розпізнавання символів. TrOCR (Microsoft) — трансформерний OCR з сильними результатами на рукописному тексті. Для українського рукописного тексту потрібен fine‑tuning: базова модель навчена переважно на латиниці.
Що робити, якщо Tesseract не справляється з розпізнаванням образів на документах?
Для задач «витягни дані з рахунку / договору / паспорта» використовуємо LayoutLMv3 або Donut — ці моделі розуміють layout документа, а не тільки текст. Інтеграція через Hugging Face Transformers, fine‑tuning на 200–500 розмічених документах. Типовий pipeline:
- Preprocessing: deskew, denoising, binarization через OpenCV.
- Виявлення текстових блоків: PaddleOCR detection або CRAFT.
- Розпізнавання: PaddleOCR recognition або TrOCR.
- Post‑processing: нормалізація, валідація через regex або LLM для структурованих полів.
Для документів з фіксованою структурою template matching + OCR точково по координатах часто надійніше за end‑to‑end рішення.
Face Recognition: ідентифікація та верифікація
Face recognition = detection + alignment + embedding + matching. Кожен етап важливий.
Detection: RetinaFace або InsightFace для точної локалізації обличчя та ключових точок. MTCNN — старіше, але надійне рішення. Embedding: ArcFace (InsightFace) — state‑of‑the‑art для face recognition embeddings. Моделі iresnet50/iresnet100 передтреновані на MS1MV3 (5M ідентичностей). Ембеддинг‑вектор 512 float32, порівняння за cosine similarity. Threshold tuning: поріг рішення — критичний параметр. При threshold 0.6 типовий FPR на LFW benchmark — 0.001, TPR — 0.985. У production threshold потрібно калібрувати під реальний distribution: люди в масках, зі зміненою зовнішністю, в різних умовах освітлення. Liveness detection обов'язковий: MiniFASNet — lightweight модель на CPU, FaceX‑Zoo містить кілька передтренованих liveness‑детекторів.
Відеоаналітика
Відео — послідовність кадрів плюс часовий вимір. Наївний підхід — детектувати на кожному кадрі — дорого.
Трекінг: ByteTrack та BoT‑SORT — стандарт для multi‑object tracking. Працюють поверх будь-якого детектора, додають persistent ID об'єктам між кадрами — це дає підрахунок об'єктів, трекі руху, velocity.
Оптимізація: не потрібно обробляти кожен кадр. Для статичних сцен детекція на кожному 5–10 кадрі, між ними — трекер. Для детекції подій (людина увійшла в зону) background subtraction (OpenCV MOG2) як lightweight pre‑filter перед нейромережевою детекцією. Action Recognition: SlowFast, VideoMAE для класифікації дій. Важкі моделі — для production використовуємо ONNX export + TensorRT або офлайн обробку.
Як виміряти якість моделі розпізнавання образів у продакшені?
Моніторинг якості — ключовий елемент MLOps. Відстежуємо:
- розподіл prediction confidence;
- частку low‑confidence передбачень (індикатор OOD‑даних);
- дрейф вхідних зображень через feature distribution (embeddings з backbone).
Падіння середньої confidence з 0.87 до 0.71 за тиждень — ранній сигнал про distribution shift. NVIDIA Triton Inference Server рекомендує відстежувати ці метрики через Prometheus. Наші сертифіковані інженери налаштовують моніторинг і гарантують SLA по якості інференсу.
Деплой CV‑моделей
Для онлайн інференсу використовуємо Triton Inference Server (NVIDIA) — production‑стандарт для serving CV‑моделей. Підтримує TensorRT, ONNX, PyTorch, dynamic batching, multiple instances. REST та gRPC API. Гарантуємо стабільну роботу під навантаженням.
Edge deployment: ONNX Runtime на ARM/x86 CPU. TensorFlow Lite для мобільних пристроїв. OpenVINO для Intel CPU/GPU/VPU — дає 2–3× приріст швидкості на Intel залізі порівняно з ONNX Runtime. Після деплою передаємо модель з документацією та навчаємо персонал.
Що входить в роботу
| Етап |
Зміст |
Орієнтовний термін |
| Аналіз |
Технічне завдання, підбір архітектури, оцінка даних |
3–5 днів |
| Розмітка |
Збір зображень, анотування (до 5000 об'єктів) |
1–3 тижні |
| Навчання |
Fine‑tuning моделі, валідація на тестовій вибірці |
1–2 тижні |
| Оптимізація |
Експорт в ONNX/TensorRT/OpenVINO, тестування на цільовому залізі |
1–2 тижні |
| Інтеграція |
REST/gRPC API, інтеграція з існуючою інфраструктурою |
1–2 тижні |
| Деплой |
Розгортання на сервері або edge‑пристрої, навантажувальне тестування |
1 тиждень |
| Документація та навчання |
Інструкції, навчання персоналу, передача коду та моделі |
3–5 днів |
| Підтримка |
Технічна підтримка на 3 місяці після запуску |
— |
Терміни та вартість
Прототип детектора на існуючих даних — 1–2 тижні. Production‑система з оптимізацією під цільове залізо — 4–8 тижнів. Повний цикл включаючи розмітку даних (1000–5000 зображень) — 2–4 місяці. Вартість розраховується індивідуально під кожну задачу. Ми на ринку більше 5 років, реалізували 60+ проектів з комп'ютерного зору. Оцінимо ваш проект під ключ — замовте консультацію, щоб отримати розрахунок та технічну пропозицію.