← Назад к вопросам

Двухстадийные vs одностадийные детекторы: в чём отличия?

2.0 Middle🔥 231 комментариев
#Глубокое обучение#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Двухстадийные vs одностадийные детекторы объектов

Основное разделение

Одностадийные детекторы (One-stage detectors) — предсказывают боксы и классы напрямую с одного прохода по сети.

Двухстадийные детекторы (Two-stage detectors) — сначала предлагают потенциальные регионы (region proposals), затем классифицируют и уточняют каждый регион.

Примеры архитектур

Одностадийные:

  • YOLO (You Only Look Once)
  • SSD (Single Shot MultiBox Detector)
  • RetinaNet

Двухстадийные:

  • R-CNN (Region-based CNN)
  • Fast R-CNN
  • Faster R-CNN
  • Mask R-CNN

Архитектура одностадийного детектора (YOLO)

# Концептуальная схема YOLO
# Вход: изображение 416x416
# Выход: прямо боксы и классы

from torchvision.models.detection import yolov3
import torchvision

model = torchvision.models.detection.yolov3(pretrained=True)

# Один forward pass — получаем предсказания
images = [torch.rand(3, 416, 416)]
predictions = model(images)

# Результат: boxes, scores, labels — всё за один раз
for pred in predictions:
    print(pred['boxes'])     # Координаты боксов
    print(pred['scores'])    # Уверенность
    print(pred['labels'])    # Классы

Архитектура двухстадийного детектора (Faster R-CNN)

# Стадия 1: Region Proposal Network (RPN)
# Стадия 2: Классификация и регрессия

from torchvision.models.detection import fasterrcnn_resnet50_fpn

model = fasterrcnn_resnet50_fpn(pretrained=True)

# Два forward pass:
# 1. RPN предлагает регионы
# 2. Classification head обрабатывает каждый регион

images = [torch.rand(3, 800, 800)]
predictions = model(images)

Ключевые различия

1. Скорость

Одностадийные (YOLO, SSD):

  • Очень быстрые (30-60+ FPS на GPU)
  • Подходят для real-time приложений
# YOLO обрабатывает всё за один проход
# Время: 33ms на изображение (30 FPS на GPU)

Двухстадийные (Faster R-CNN):

  • Медленнее (5-15 FPS)
  • Слишком долго для real-time

2. Точность

Одностадийные:

  • Худшая точность, особенно на маленьких объектах
  • Сложнее учитывать контекст
YOLOv3: mAP 57% (COCO)
SSD: mAP 50%

Двухстадийные:

  • Высокая точность благодаря фокусировке на перспективных регионах
  • Лучше работают с маленькими объектами
Faster R-CNN: mAP 41% (базовая версия)
Mask R-CNN: mAP 38% + маски (лучше для сегментации)

3. Обработка маленьких объектов

Одностадийные:

  • Теряют маленькие объекты (делят изображение на сетку)
  • Одна ячейка сетки может содержать несколько маленьких объектов
YOLO: делит на 7x7 (449 ячеек)
Если объект маленький и маленьких объектов много — проблема

Двухстадийные:

  • Лучше работают благодаря RPN, который предлагает множество боксов
  • Используют многоуровневые признаки (pyramid)

4. Использование памяти

Одностадийные:

  • Меньше памяти (один forward pass)

Двухстадийные:

  • Больше памяти (два forward pass + хранение регионов)

Процесс работы: YOLO (одностадийный)

1. Вход: 416x416 изображение
2. CNN кодировщик (ResNet, Darknet, etc.)
3. Один выход слой: (7x7x(5*B+C))
   где B=2 боксов на ячейку, C=количество классов
4. NMS для удаления дубликатов
5. Выход: боксы + классы + уверенность

Процесс работы: Faster R-CNN (двухстадийный)

1. Вход: 800x600 изображение
2. CNN кодировщик (ResNet) → Feature Map (50x38)
3. Стадия 1 - RPN:
   - Anchor boxes (9 вариантов на каждую позицию)
   - Предсказания для каждого anchor: 
     * Вероятность объекта
     * Регрессия боксов (4 параметра)
   - Non-Maximum Suppression
   - Выход: ~2000 регионов (region proposals)
4. Стадия 2 - Classification head:
   - Для каждого региона извлечь признаки (RoI Pooling)
   - Полносвязный слой для классификации
   - Тонкая регрессия боксов
5. Выход: отфильтрованные боксы + классы

Сравнительная таблица

ПараметрОдностадийныеДвухстадийные
Скорость30-60+ FPS5-15 FPS
ТочностьmAP 50-57%mAP 38-45%
Маленькие объектыПлохоХорошо
ПамятьНизкаяВысокая
СложностьПростаяСложная
Real-timeДаНет
ИспользованиеВидео, камерыМедицина, спутники

Когда что использовать?

Выбирайте одностадийные (YOLO, SSD):

  • Нужна высокая скорость (видеонаблюдение, дроны)
  • Большие объекты
  • Ограниченные ресурсы GPU
  • Real-time приложения

Выбирайте двухстадийные (Faster R-CNN, Mask R-CNN):

  • Критична точность (медицина, спутниковые снимки)
  • Много маленьких объектов
  • Нужна сегментация (Mask R-CNN)
  • Есть вычислительные ресурсы

Гибридные подходы

RetinaNet — одностадийный, но с Focal Loss:

# Focal Loss помогает справиться с дисбалансом
# между сложными и простыми примерами
focal_loss = -α * (1 - p_t)^γ * log(p_t)

Результат: точность как у двухстадийных, скорость как у одностадийных (mAP 39%, но 5 FPS).

Cascade R-CNN — улучшенная версия Faster R-CNN:

  • Несколько каскадов классификации
  • Прогрессивная фильтрация
  • Лучшая точность (mAP 45%+)

Заключение

Одностадийные детекторы быстрее, но менее точны. Двухстадийные детекторы точнее, но медленнее. Выбор зависит от задачи: для видеонаблюдения берите YOLO, для анализа спутниковых снимков — Faster R-CNN.