Двухстадийные vs одностадийные детекторы: в чём отличия?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Двухстадийные 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+ FPS | 5-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.