Почему скорость стала главным требованием

Представьте: автономный автомобиль мчится по шоссе, и его системе компьютерного зрения нужно распознать пешехода раньше, чем тот окажется на расстоянии удара. У неё есть доли секунды — не сотни миллисекунд, которые требуются двухэтапным детекторам.

Модели семейства R-CNN — все регион-ориентированные алгоритмы детекции объектов. Они могут достигать высокой точности, но слишком медленны для ряда приложений, таких как автономное вождение.

В четвёртой части серии мы сосредоточимся исключительно на быстрых моделях детекции объектов: SSD, RetinaNet и семействе YOLO.

Ключевая идея, разделяющая быстрые и медленные детекторы, очень проста:

В двухэтапных моделях детекция происходит в два шага: сначала модель предлагает набор регионов интереса через selective search или сеть региональных предложений, затем классификатор обрабатывает только эти регионы-кандидаты. Альтернативный подход полностью пропускает этап формирования предложений и выполняет детекцию напрямую по плотной выборке возможных позиций.

Именно это «напрямую» и делает однопроходные детекторы такими быстрыми.


YOLO: «Вы смотрите только один раз»

Центральная идея

YOLO (You Only Look Once) — семейство моделей детекции объектов, спроектированных для детекции в реальном времени путём постановки задачи как единой регрессионной задачи.

Метод очень быстр потому, что единственная нейронная сеть предсказывает ограничивающие рамки и вероятности классов напрямую с целого изображения за один проход.

Как работает сетка предсказаний

YOLO принимает изображение большого размера (например, 448×448) и пропускает его через кастомную свёрточную сеть с полносвязными слоями. Сеть делит изображение на сетку (обычно 7×7), и каждая ячейка сетки отвечает за предсказание ограничивающих рамок и вероятностей классов.

В отличие от SSD, которая детектирует объекты с нескольких слоёв, YOLO делает все предсказания из одного выходного слоя, что приводит к меньшему общему числу предсказаний (например, 98 на класс). Такой дизайн обеспечивает экстремально высокую скорость инференса, делая YOLO пригодным для задач реального времени, хотя он может уступать SSD при работе с маленькими или перекрывающимися объектами.

ℹ Что такое NMS
Non-Maximum Suppression (NMS) — процедура постобработки, удаляющая дублирующиеся ограничивающие рамки. Среди всех рамок, предсказанных для одного объекта, оставляют ту, у которой наивысший confidence score, а остальные подавляются. Это стандартный финальный шаг для 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.

💡 Практический совет
Для старта с YOLO на собственных данных используйте библиотеку Ultralytics: 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-баланса скорости и точности.

📝 Пример применения
RetinaNet отлично подходит для медицинской диагностики (поиск микрообъектов на сканах), систем безопасности и автономных роботов — всюду, где критична точность обнаружения редких объектов на «шумном» фоне.

Архитектурное сравнение: 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)SSDRetinaNet
Этапы детекцииОдинОдинОдин
Уровни предсказания3 (FPN в v3+)6–75 (P3–P7)
Функция потерьBCE + IoUSmooth L1 + SoftMaxFocal Loss
Скорость (FPS, GPU)★★★★★★★★★★★★
Точность (mAP COCO)★★★★★★★★★★★★
Маленькие объекты★★★★★★★★★★
Edge/мобильный деплой★★★★★★★★★★★★
Дисбаланс классов★★★★★★★★★★
⚠ Важно
mAP (mean Average Precision) — основная метрика качества детекторов. Для корректного сравнения всегда уточняйте: на каком датасете (COCO или PASCAL VOC), при каком пороге IoU (@50, @75 или @50:95) и с каким backbone-ом получен результат.

Практический выбор: какой детектор использовать

Критерии выбора

# Псевдокод для выбора детектора
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.