Какие детекторы и архитектуры в компьютерном зрении вы знаете?

«Какие детекторы и архитектуры в компьютерном зрении вы знаете?» — вопрос из категории Компьютерное зрение, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В области детекции объектов можно выделить классические методы и современные нейросетевые архитектуры.

Классические детекторы (до глубокого обучения):

  • Viola-Jones: Каскадный классификатор на основе признаков Хаара, исторически важен для детекции лиц.
  • HOG (Histogram of Oriented Gradients) + SVM: Извлечение гистограмм градиентов с последующей классификацией. Был стандартом для пешеходов.
  • SIFT/SURF/ORB: Детекторы и дескрипторы ключевых точек для задач сопоставления и панорамирования.

Современные архитектуры на основе CNN:

  1. Двухэтапные (Two-Stage): Сначала генерируют регионы интереса (Region Proposals), затем классифицируют их.

    • R-CNN, Fast R-CNN, Faster R-CNN: Эволюция семейства, где Faster R-CNN интегрирует генерацию регионов в сеть (Region Proposal Network).
    • Mask R-CNN: Расширение для instance segmentation (добавляет маску для каждого объекта).
  2. Одноэтапные (One-Stage): Прямое предсказание bounding boxes и классов за один проход, обычно быстрее.

    • YOLO (You Only Look Once): Разделяет изображение на сетку. Современные версии (v5, v8) — промышленный стандарт.
    • SSD (Single Shot MultiBox Detector): Использует feature maps на разных уровнях для детекции объектов разного масштаба.
    • RetinaNet: Решает проблему дисбаланса классов при одноэтапной детекции с помощью Focal Loss.

Архитектуры backbone-сетей (для извлечения признаков):

  • CNN-based: ResNet, ResNeXt, EfficientNet, MobileNet (для мобильных устройств).
  • Transformer-based: Vision Transformer (ViT), Swin Transformer. Набирают популярность, показывая SOTA на многих датасетах.

Практический пример с YOLOv8:

from ultralytics import YOLO

# Загрузка предобученной модели
model = YOLO('yolov8n.pt')  # nano версия

# Детекция на изображении
results = model('street.jpg')

# Визуализация результатов
results[0].show()

# Получение bounding boxes, confidence scores и классов
boxes = results[0].boxes.xyxy  # координаты
conf = results[0].boxes.conf   # уверенность
cls = results[0].boxes.cls     # классы

Тренды: смещение в сторону Vision Transformers, эффективные модели для edge-вычислений (YOLO, MobileDet), multi-task learning (детекция + сегментация + оценка позы).