Как работает 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 "обслуживает" объекты схожих размеров
-
Это позволяет эффективно обнаруживать объекты разного масштаба
Обработка:
-
Выбирается набор anchor boxes (обычно 5-9), рассчитанных кластеризацией ground truth рамок.
-
На выходе каждая ячейка предсказывает по числу 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 модели до мощной и гибкой архитектуры, которая работает на любом устройстве — от смартфона до облачных кластеров.