
Object Detection Part 4: быстрые модели детекции
YOLO, SSD, RetinaNet — разбираем архитектуры быстрых однопроходных детекторов объектов: принципы, отличия, бенчмарки и применение.
Почему скорость стала главным требованием
Представьте: автономный автомобиль мчится по шоссе, и его системе компьютерного зрения нужно распознать пешехода раньше, чем тот окажется на расстоянии удара. У неё есть доли секунды — не сотни миллисекунд, которые требуются двухэтапным детекторам.
Модели семейства R-CNN — все регион-ориентированные алгоритмы детекции объектов. Они могут достигать высокой точности, но слишком медленны для ряда приложений, таких как автономное вождение.
В четвёртой части серии мы сосредоточимся исключительно на быстрых моделях детекции объектов: SSD, RetinaNet и семействе YOLO.
Ключевая идея, разделяющая быстрые и медленные детекторы, очень проста:
В двухэтапных моделях детекция происходит в два шага: сначала модель предлагает набор регионов интереса через selective search или сеть региональных предложений, затем классификатор обрабатывает только эти регионы-кандидаты. Альтернативный подход полностью пропускает этап формирования предложений и выполняет детекцию напрямую по плотной выборке возможных позиций.
Именно это «напрямую» и делает однопроходные детекторы такими быстрыми.
YOLO: «Вы смотрите только один раз»
Центральная идея
YOLO (You Only Look Once) — семейство моделей детекции объектов, спроектированных для детекции в реальном времени путём постановки задачи как единой регрессионной задачи.
Метод очень быстр потому, что единственная нейронная сеть предсказывает ограничивающие рамки и вероятности классов напрямую с целого изображения за один проход.
Как работает сетка предсказаний
YOLO принимает изображение большого размера (например, 448×448) и пропускает его через кастомную свёрточную сеть с полносвязными слоями. Сеть делит изображение на сетку (обычно 7×7), и каждая ячейка сетки отвечает за предсказание ограничивающих рамок и вероятностей классов.
В отличие от SSD, которая детектирует объекты с нескольких слоёв, YOLO делает все предсказания из одного выходного слоя, что приводит к меньшему общему числу предсказаний (например, 98 на класс). Такой дизайн обеспечивает экстремально высокую скорость инференса, делая YOLO пригодным для задач реального времени, хотя он может уступать SSD при работе с маленькими или перекрывающимися объектами.
Эволюция: от v1 до v10+
Каждая версия YOLO привносила архитектурные улучшения:
YOLOv2 ввёл anchor boxes и Darknet-19. YOLOv3 — Darknet-53 и многомасштабные предсказания. YOLOv4 — Spatial Pyramid Pooling (SPP), Path Aggregation Network (PANet) и Mosaic-аугментацию. YOLOv5 — SPPF. YOLOv6 — более эффективную сеть EfficientRep. YOLOv7 — ELAN. YOLOv8 — модуль C2f и Anchor-Free дизайн.
Прирост скорости при сохранении точности впечатляет:
При разрешении 320×320 YOLOv3 работал за 22 мс с mAP 28.2 — такой же точный, как SSD, но в три раза быстрее. На Titan X он достиг 57.9 mAP@50 за 51 мс, тогда как RetinaNet показал 57.5 mAP@50 за 198 мс — схожая точность, но в 3.8 раза быстрее.
Новейшие версии: YOLO без NMS
YOLOv10, выпущенный в мае 2024 года исследователями из Университета Цинхуа, представляет значительный шаг вперёд в детекции в реальном времени. Ключевая инновация — устранение Non-Maximum Suppression (NMS) во время инференса, который традиционно добавлял задержку в пайплайн детекции.
Согласно статье, YOLOv10-S работает в 1.8× быстрее, чем RT-DETR-R18, при сопоставимой точности, используя при этом в 2.8× меньше параметров.
YOLOv11, разработанный Ultralytics, поддерживает несколько задач компьютерного зрения: детекцию объектов, сегментацию экземпляров, классификацию изображений, детекцию ключевых точек и обнаружение ориентированных ограничивающих рамок (OBB). Модель YOLOv11x достигает 54.7% mAP на бенчмарке MS COCO.
pip install ultralytics. Она поддерживает YOLOv8/v11, экспорт в ONNX/TensorRT и обучение одной командой yolo train data=custom.yaml model=yolov8n.pt.SSD: Single Shot MultiBox Detector
Принцип работы
SSD (Single Shot MultiBox Detector), введённый в начале 2016 года, дискретизирует ограничивающие рамки на заранее заданные дефолтные боксы разных масштабов и соотношений сторон. Он предсказывает оценки объектов и корректирует формы боксов соответственно. За счёт использования многомасштабных карт признаков SSD эффективно работает с объектами разных размеров. В отличие от более ранних методов, он устраняет необходимость в отдельном этапе генерации предложений, упрощая обучение.
Многомасштабное обнаружение
SSD предсказывает на различных разрешениях (например, 38×38, 19×19, … 1×1) для захвата как маленьких, так и больших объектов.
Это принципиальное отличие от первых версий YOLO, где предсказания шли с единственного финального слоя.
Сильные и слабые стороны SSD
SSD обрабатывает изображение за один проход, в отличие от R-CNN, которые анализируют регионы-предложения отдельно. В паре с MobileNet SSD становится идеальным для мобильных и периферийных устройств.
Однако есть ограничения:
По сравнению с двухэтапными моделями, такими как Faster R-CNN, или новыми вариантами YOLO, SSD может пропускать больше объектов. Он также плохо справляется с очень маленькими объектами в сложных сценах из-за сниженного разрешения в более глубоких слоях.
RetinaNet: решение проблемы дисбаланса классов
Главная проблема однопроходных детекторов
До появления RetinaNet однопроходные детекторы страдали от фундаментального изъяна: при детекции сеть генерирует десятки тысяч кандидатов на рамки, подавляющее большинство из которых — фоновые. Модель «захлёбывается» от лёгких отрицательных примеров.
Представленный в 2017 году компанией Facebook AI Research, RetinaNet — мощная модель детекции объектов, разработанная для решения задачи дисбаланса классов в изображениях. Традиционные детекторы часто испытывают трудности, когда фон доминирует в сцене. RetinaNet решает эту проблему с помощью Focal Loss — новой функции потерь, которая снижает влияние легко классифицируемых примеров и уделяет приоритет труднее обнаруживаемым случаям. Этот подход повышает точность детекции без потери эффективности.
Focal Loss: математическая идея
RetinaNet вводит Focal Loss для борьбы с дисбалансом классов при обучении. Это достигается путём модификации стандартной кросс-энтропийной функции потерь — уменьшением веса потерь для хорошо классифицированных примеров. Функция уделяет меньше внимания легко классифицируемым объектам и фокусируется на сложных, ошибочно классифицируемых примерах.
«Наш простой детектор достигает лучших результатов не за счёт инноваций в архитектуре, а благодаря нашей новой функции потерь» — авторы статьи о RetinaNet (Lin et al., 2017)
Архитектура: FPN + два субнетворка
RetinaNet состоит из трёх ключевых компонентов: backbone-сети для извлечения признаков, Feature Pyramid Network (FPN) для многомасштабной детекции и двух субнетворков для классификации и регрессии ограничивающих рамок. Backbone — обычно предобученная CNN (ResNet или ResNeXt) — обрабатывает входное изображение для создания карт признаков. Они затем проходят через FPN, который объединяет выходы из разных слоёв, позволяя детектировать объекты в различных масштабах. Этот многомасштабный подход улучшает способность RetinaNet идентифицировать как маленькие, так и большие объекты.
Эксперименты на датасете COCO показывают, что RetinaNet, обученный с Focal Loss, достигает SOTA-баланса скорости и точности.
Архитектурное сравнение: YOLO vs SSD vs RetinaNet
graph TD
A[Входное изображение] --> B[Backbone CNN]
B --> C{Тип детектора}
C -->|YOLO| D[Одна выходная сетка\nодин слой предсказаний]
C -->|SSD| E[Многомасштабные карты\nпредсказания с 6-7 слоёв]
C -->|RetinaNet| F[FPN backbone\n+ два субнетворка]
D --> G[Bounding boxes + классы]
E --> G
F --> H[Focal Loss]
H --> G
G --> I[NMS постобработка]
I --> J[Финальная детекция]
Сравнительная таблица
| Характеристика | YOLO (v8/v10) | SSD | RetinaNet |
|---|---|---|---|
| Этапы детекции | Один | Один | Один |
| Уровни предсказания | 3 (FPN в v3+) | 6–7 | 5 (P3–P7) |
| Функция потерь | BCE + IoU | Smooth L1 + SoftMax | Focal Loss |
| Скорость (FPS, GPU) | ★★★★★ | ★★★★ | ★★★ |
| Точность (mAP COCO) | ★★★★★ | ★★★ | ★★★★ |
| Маленькие объекты | ★★★★ | ★★ | ★★★★ |
| Edge/мобильный деплой | ★★★★ | ★★★★★ | ★★★ |
| Дисбаланс классов | ★★★ | ★★ | ★★★★★ |
Практический выбор: какой детектор использовать
Критерии выбора
# Псевдокод для выбора детектора
def choose_detector(latency_ms, accuracy_needed, device):
if device == 'edge' and latency_ms < 10:
return 'SSD-MobileNet или YOLOv8n'
elif accuracy_needed == 'high' and latency_ms < 100:
return 'RetinaNet или YOLOv8x'
elif latency_ms < 30 and accuracy_needed == 'balanced':
return 'YOLOv8m / YOLOv10'
else:
return 'Faster R-CNN (двухэтапный)'
Где применяется каждая модель
SSD особенно популярен в системах видеонаблюдения реального времени (хорошо справляется с объектами среднего и крупного размера) и встроенных системах (IoT) — небольшой объём памяти позволяет запускать SSD на микроустройствах.
YOLO чрезвычайно быстр и поэтому применяется в таких задачах, как беспилотные автомобили и видеонаблюдение.
RetinaNet, благодаря точности и эффективности, широко используется в приложениях реального времени, включая автономные транспортные средства, системы безопасности, робототехнику и медицинскую визуализацию.
В последних версиях — YOLOv5 и YOLOv8 — модели стали более модульными, гибкими и лёгкими. Эти улучшения значительно упростили развёртывание YOLO на устройствах с ограниченными ресурсами, таких как Raspberry Pi.
Нулевой шот: YOLO-World
Современные возможности YOLO вышли за рамки детекции по фиксированным классам:
В отличие от традиционных моделей YOLO, которые требуют обучения на конкретных классах объектов, YOLO-World может детектировать объекты по текстовым подсказкам без дообучения. Эта возможность нулевого шота достигает до 74.1 FPS на GPU V100. YOLO-World особенно полезен, когда нужно детектировать кастомные объекты без сбора обучающих данных.
Заключение
Однопроходные детекторы произвели революцию в компьютерном зрении, сделав обнаружение объектов практически применимым в реальном времени.
- YOLO — выбор по умолчанию для задач реального времени: максимальная скорость, богатая экосистема, активное развитие до v11+.
- SSD — проверенное решение для edge-девайсов: минимальные ресурсы, простая интеграция с MobileNet.
- RetinaNet — лучший выбор, когда точность важнее скорости: Focal Loss решает проблему дисбаланса классов там, где другие детекторы буксуют.
Не существует «лучшего» детектора — есть детектор, оптимальный для вашей конкретной задачи, железа и требований к латентности.
К 2024 году семейство YOLO стало доминирующей силой в области детекции, непрерывно эволюционируя для улучшения скорости, точности и эффективности в задачах обнаружения объектов в реальном времени. Однако знание принципов SSD и RetinaNet остаётся фундаментальным: именно эти идеи — многомасштабные предсказания, Focal Loss, FPN — лежат в основе всех современных архитектур, включая последние версии YOLO и трансформерные детекторы типа DETR.