Детекция и сегментация
~22 мин
YOLO
Семейство YOLO: архитектура backbone/neck/head, YOLOv5/v8/v9, real-time inference, Ultralytics.
YOLO — real-time detection стандарт индустрии
YOLO (You Only Look Once) — семейство one-stage детекторов, ставших стандартом для real-time object detection. Идея оригинальной YOLO (2015): разбить изображение на сетку S×S, каждая ячейка предсказывает B bounding boxes + confidence + классы. Один forward pass — все детекции. 45 FPS на GPU (vs 7 FPS у Faster R-CNN).
Эволюция YOLO
- YOLOv1 (2015) — оригинальная идея. Быстро, но low accuracy (особенно мелкие объекты). Жёсткая сетка ограничивает число детекций.
- YOLOv2/YOLO9000 (2016) — anchors (вместо прямого предсказания), batch normalization, multi-scale training.
- YOLOv3 (2018) — Darknet-53 backbone, FPN-like multi-scale detection (3 масштаба), binary cross-entropy для multi-label.
- YOLOv4 (2020) — Bag of Freebies (аугментации, label smoothing) + Bag of Specials (CSP, SAM, PAN). Самая «инженерная» версия.
- YOLOv5 (2020, Ultralytics) — PyTorch reimplementation. Не статья, а open-source проект. Стал стандартом для индустрии благодаря удобству.
- YOLOv8 (2023, Ultralytics) — anchor-free head, decoupled head, DFL loss. Unified API для detection, segmentation, pose, classification.
- YOLOv9 (2024) — Programmable Gradient Information (PGI) + GELAN architecture.
- YOLO11 (2024, Ultralytics) — lightweight, улучшенная segmentation head.
Архитектура YOLO: Backbone → Neck → Head
Все современные YOLO имеют трёхчастную архитектуру:
- Backbone — feature extractor. CSPDarknet (v4/v5), EfficientRep (v6), C2f blocks (v8). Извлекает фичи на разных масштабах.
- Neck — multi-scale feature fusion. PANet (Path Aggregation Network): top-down + bottom-up пути. Объединяет фичи разных масштабов для detection мелких и крупных объектов.
- Head — prediction. Для каждого масштаба: bbox координаты + objectness + class probabilities. В YOLOv8: decoupled head (отдельные ветки для cls и reg) + anchor-free + Distribution Focal Loss.
YOLOv8 — текущий стандарт
from ultralytics import YOLO
# Загрузка pretrained модели
model = YOLO("yolov8n.pt") # nano (3.2M params, 8.7 GFLOPs)
# Варианты: yolov8n/s/m/l/x — от быстрого к точному
# Inference
results = model("image.jpg")
for r in results:
boxes = r.boxes.xyxy # [N, 4] — координаты bbox
scores = r.boxes.conf # [N] — confidence
classes = r.boxes.cls # [N] — class indices
# Training на своих данных
model = YOLO("yolov8m.pt")
model.train(
data="dataset.yaml", # путь к конфигу датасета
epochs=100,
imgsz=640,
batch=16,
device="cuda",
)
# Export для production
model.export(format="onnx") # ONNX Runtime
model.export(format="engine") # TensorRTКонфигурация датасета
# dataset.yaml
path: /data/my_dataset
train: images/train
val: images/val
names:
0: person
1: car
2: bicycle
# Аннотации: YOLO format (txt рядом с изображениями)
# class_id x_center y_center width height (normalized 0-1)
# 0 0.5 0.4 0.3 0.6YOLO размеры и speed/accuracy trade-off
Ultralytics предлагает 5 размеров каждой модели:
- Nano (n) — 3.2M params, 8.7 GFLOPs. Для edge/mobile. ~640 FPS на A100.
- Small (s) — 11.2M params. Баланс для embedded GPU (Jetson).
- Medium (m) — 25.9M params. Хороший баланс speed/accuracy для production.
- Large (l) — 43.7M params. Высокая точность, серверный inference.
- Extra-large (x) — 68.2M params, 257.8 GFLOPs. Максимальная точность.
Практические советы
- Разрешение: imgsz=640 — стандарт. Для мелких объектов — 1280. Больше разрешение = лучше мелкие объекты, но медленнее.
- Аугментации: mosaic (4 images → 1), mixup, random perspective включены по умолчанию. Отключение mosaic в последних 10 эпохах стабилизирует обучение.
- Transfer learning: всегда начинай с pretrained весов (COCO). Fine-tune на своих данных. Freeze backbone первые 5-10 эпох если мало данных.
- Постобработка: confidence threshold (0.25-0.5), NMS IoU threshold (0.45-0.7). Подбирай под задачу.
- Формат экспорта: ONNX → универсальный, TensorRT → максимальная скорость на NVIDIA, CoreML → Apple, TFLite → мобильные.
🎯 На собеседовании
Ключевые вопросы
• Backbone/Neck/Head — что каждый делает? Backbone — фичи, Neck — multi-scale fusion (PANet), Head — bbox + class prediction.
• Anchor-based vs anchor-free YOLO? YOLOv5 — anchors. YOLOv8 — anchor-free (предсказывает расстояния до краёв bbox). Anchor-free проще, меньше гиперпараметров.
• Как YOLO обучается? Matching: каждый GT bbox привязывается к ячейкам/anchors. Loss: bbox loss (CIoU/DFL) + objectness (BCE) + classification (BCE).
• Mosaic augmentation — зачем? 4 изображения в 1 → больше контекста, больше мелких объектов на одном forward pass, лучше batch statistics.
• Как ускорить inference? Меньший размер модели (n/s), TensorRT export, FP16/INT8 quantization, уменьшить imgsz.
Материалы
Ultralytics YOLOv8 — Official Documentation
Полная документация: training, inference, export, datasets, architectures.
You Only Look Once: Unified, Real-Time Object Detection
Оригинальная YOLO paper — для понимания базовой идеи.
YOLOv9: Learning What You Want to Learn
Последнее поколение YOLO с PGI и GELAN architecture.