Как работает YOLO и в чём её отличия от других object detectors?

YOLO (You Only Look Once) — это семейство моделей для задачи обнаружения объектов (object detection) в изображениях, разработанное Джозефом Редмоном и коллегами. Главная идея YOLO — трактовать обнаружение объектов как единую задачу регрессии, решаемую за один проход через нейросеть. В отличие от традиционных методов, которые обрабатывают изображение многоэтапно (как в R-CNN), YOLO выполняет одновременное предсказание классов и координат объектов за один проход — отсюда название.

1. Общие принципы работы YOLO

YOLO делит входное изображение на фиксированную сетку (например, 13×13 или 19×19) и в каждой ячейке предсказывает:

  • координаты ограничивающих рамок (bounding boxes): x,y,w,hx, y, w, h

  • объектность (objectness score) — вероятность того, что в ячейке есть объект

  • вероятности классов (если используется многоклассовая классификация)

Каждая ячейка отвечает только за объекты, центры которых находятся внутри неё.

2. Архитектура YOLO (на примере YOLOv1)

YOLOv1 использовала простую CNN:

  • На вход подаётся изображение (обычно 448×448)

  • Сеть обрабатывает изображение свёртками

  • Последний слой — полносвязный, предсказывающий тензор размером S×S×(B⋅5+C)S \times S \times (B \cdot 5 + C), где:

    • SS — размер сетки (например, 7)

    • BB — число рамок на ячейку (обычно 2)

    • CC — число классов

    • Каждая рамка описывается: x,y,w,h,confidencex, y, w, h, \text{confidence}

Пример:
Если S=7S = 7, B=2B = 2, C=20C = 20, выходной тензор будет размером 7×7×307 \times 7 \times 30

3. Как интерпретируются выходы сети

Каждая ячейка предсказывает B ограничивающих рамок с:

  • x,yx, y: смещение центра рамки относительно левой верхней границы ячейки

  • w,hw, h: ширина и высота рамки относительно всего изображения

  • confidence: вероятность, что объект существует в рамке × точность совпадения (IoU) с ground truth

Если в изображении несколько объектов, находящихся в одной ячейке, YOLO может предсказать только один из них, что является ограничением ранних версий.

4. Anchor boxes (начиная с YOLOv2)

YOLOv1 предсказывала координаты рамки напрямую, что плохо масштабировалось. В YOLOv2 была введена концепция anchor boxes (якорей) — заранее заданных шаблонов рамок разных размеров и пропорций.

Теперь:

  • Сеть предсказывает **смещения относительно anchor box
    **
  • Каждый anchor "обслуживает" объекты схожих размеров

  • Это позволяет эффективно обнаруживать объекты разного масштаба

Обработка:

  1. Выбирается набор anchor boxes (обычно 5-9), рассчитанных кластеризацией ground truth рамок.

  2. На выходе каждая ячейка предсказывает по числу anchor'ов рамки с координатами и классами.

5. Развитие версий YOLO

YOLOv1 (2015)

  • Простая модель, 7×7 сетка, 2 рамки на ячейку

  • Ограничения: плохо работает с маленькими объектами, не использует anchor boxes

YOLOv2 (YOLO9000)

  • Anchor boxes

  • Batch Normalization

  • Предобученные backbone (Darknet-19)

  • Расширение на 9000+ классов (joint training на ImageNet + COCO)

YOLOv3

  • Новый backbone: Darknet-53 (глубже и с residual-блоками)

  • Многомасштабное обнаружение (предсказания на 3-х уровнях)

  • Использование логистической регрессии для objectness

YOLOv4 / YOLOv5

  • Улучшения в backbone, attention, аугментации

  • Упрощённый и более быстрый пайплайн

  • YOLOv5 — первая версия, реализованная полностью на PyTorch

  • Поддерживает различные размерности, режимы работы (tiny, large)

YOLOv6, YOLOv7, YOLOv8 (Ultralytics)

  • Улучшенные блоки (CSP, PAN, SPP, EfficientNMS)

  • Большое внимание к оптимизации скорости и размера модели

  • Модули автоподбора anchor'ов, мультиголовость и гибридные encoder'ы

  • YOLOv8 — полная переархитектуризация без anchor boxes (anchor-free), опционально классификация и сегментация

6. Сравнение с другими object detectors

Характеристика YOLO R-CNN / Faster R-CNN SSD
Тип Однопроходный (single-shot) Двухпроходный (region proposal) Однопроходный
--- --- --- ---
Скорость Очень высокая (в real-time) Низкая / средняя Высокая
--- --- --- ---
Точность (AP) Ниже, чем у Faster R-CNN (в ранних версиях) Высокая Средняя/высокая
--- --- --- ---
Архитектура Сеточная регрессия + anchor RPN + ROI Pooling Anchor + Feature Pyramid
--- --- --- ---
Поддержка мелких объектов Слабая в YOLOv1/2, лучше в YOLOv3+ Хорошая Хорошая
--- --- --- ---
End-to-End обучение Да Нет (в ранних R-CNN) Да
--- --- --- ---
Применение Real-time, edge устройства Офлайн-анализ, точные системы Баланс между точностью и скоростью
--- --- --- ---

7. Механизмы повышения точности в YOLO

Multi-scale prediction

YOLOv3 и выше предсказывают объекты на 3 уровнях масштабов — низкий, средний и высокий — чтобы эффективно находить как большие, так и мелкие объекты.

Non-Max Suppression (NMS)

После предсказания многих рамок, YOLO применяет NMS — отбрасываются перекрывающиеся рамки с низким confidence, оставляя только лучшие.

Data Augmentation (Mosaic, HSV jittering)

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

8. YOLO как регрессия

YOLO не классифицирует регионы, как это делает R-CNN. Вместо этого оно регрессирует:

  • координаты рамок

  • вероятность наличия объекта

  • вероятности классов

Это позволяет YOLO быть быстрым — оно "смотрит на изображение только один раз".

9. Выходные данные YOLO

На выходе модель даёт:

  • Координаты рамки: x,y,w,hx, y, w, h

  • Objectness score: вероятность, что в этой рамке есть объект

  • Классы: вероятности каждого класса (softmax или sigmoid)

После NMS остаются только лучшие рамки, которые и используются как результат.

10. Использование YOLO в практике

YOLO чаще всего используется в:

  • Системах видеонаблюдения и безопасности (распознавание лиц, людей)

  • Дронах (обнаружение объектов с воздуха)

  • Автономных автомобилях

  • Ритейле (отслеживание товаров на полках)

  • Медицине (поиск опухолей, аномалий)

  • Агросекторе (распознавание растений, сорняков)

11. Пример использования (PyTorch, YOLOv5 от Ultralytics)

pip install ultralytics
from ultralytics import YOLO
\# Загрузка предобученной модели
model = YOLO("yolov5s.pt")
\# Предсказание
results = model("image.jpg")
\# Визуализация
results.show()

12. Anchor-free модели

YOLOv8 и некоторые современные подходы (например, CenterNet, DETR) не используют anchor boxes. Вместо этого:

  • Предсказываются центры объектов напрямую

  • Модель определяет размер и класс без предварительных рамок

Это упрощает обучение и повышает точность в некоторых случаях.

YOLO остаётся одной из самых быстрых и широко используемых архитектур в области object detection, особенно в реальном времени. Она эволюционировала от простой grid-based модели до мощной и гибкой архитектуры, которая работает на любом устройстве — от смартфона до облачных кластеров.