Что такое YOLO и чем она отличается от других нейросетей
YOLO (You Only Look Once) — это семейство нейронных сетей для обнаружения объектов на изображениях и видео. Главная особенность YOLO — обработка всего кадра за один проход, без поэтапного сканирования. В отличие от классификаторов, которые просто присваивают изображению метку (например, «кот»), YOLO одновременно определяет, какие объекты присутствуют, и рисует вокруг них ограничивающие рамки с координатами. Это позволяет решать задачу object detection — обнаружения объектов — в реальном времени.
YOLO решает несколько типов задач: детекцию (обнаружение и локализация объектов), сегментацию (разделение изображения на области, принадлежащие разным объектам), классификацию (определение, что изображено на картинке), поиск ключевых точек тела (оценка позы человека) и трекинг объектов (отслеживание перемещения объектов в видеопотоке с сохранением истории местоположения).
Ключевое отличие YOLO от более старых подходов (например, R-CNN или Faster R-CNN) — скорость. Те модели сначала генерируют множество регионов-кандидатов, где может находиться объект, а затем классифицируют каждый регион отдельно. YOLO же смотрит на всю картинку целиком и выдаёт предсказания сразу, что делает её идеальной для систем, где важна низкая задержка: беспилотные автомобили, камеры наблюдения, дроны, AR-приложения.
Принцип работы YOLO: сетка, рамки и один взгляд
Основная идея YOLO — разбить входное изображение на сетку, например, 7×7 или 13×13 ячеек. Каждая ячейка отвечает за свою область и пытается предсказать, находится ли в ней центр какого-либо объекта. Если центр объекта попадает в ячейку, именно эта ячейка берёт на себя ответственность за его обнаружение.
Для каждой ячейки YOLO предсказывает несколько ограничивающих рамок (bounding boxes) разного размера и формы, а также вероятность того, что внутри рамки есть объект (objectness score). Кроме того, для каждой рамки вычисляются координаты центра (x, y), ширина и высота (w, h) относительно размеров ячейки или всего изображения. Параллельно нейросеть определяет, к какому классу относится объект (например, «человек», «машина», «велосипед»), и выдаёт вектор вероятностей классов.
Таким образом, на выходе одного прохода мы получаем сразу все предсказания: координаты рамок, уверенность в наличии объекта и класс. Это и есть суть подхода «один взгляд» — без повторных проходов и без вырезания фрагментов.
Архитектура YOLO: свёрточные слои и извлечение признаков
В основе YOLO лежит свёрточная нейронная сеть (CNN). Свёрточные слои последовательно извлекают из изображения признаки: на ранних этапах — простые (линии, углы, цветовые переходы), на более глубоких — сложные формы (силуэты, колёса, очертания предметов). Последние слои сети преобразуют полученные карты признаков в итоговый тензор предсказаний.
Архитектура разных версий YOLO (v3, v4, v5, v8 и т.д.) отличается деталями: используются остаточные блоки, механизмы внимания, Feature Pyramid Networks (FPN) для обнаружения объектов разного масштаба. Однако общий принцип остаётся неизменным: изображение проходит через серию свёрточных слоёв, после чего на выходе формируется трёхмерный тензор, содержащий информацию о рамках, уверенности и классах для каждой ячейки сетки.
Например, в YOLOv8 доступны несколько предобученных моделей разного размера: yolov8n (nano), yolov8s (small), yolov8m (medium), yolov8l (large), yolov8x (extra large). Чем больше модель, тем выше точность, но ниже скорость работы. Выбор модели зависит от доступных вычислительных ресурсов и требований к задержке.
Non-Maximum Suppression: как YOLO убирает лишние рамки
Поскольку каждая ячейка предсказывает несколько рамок, один и тот же объект может быть обведён несколькими рамками с разной степенью уверенности. Чтобы оставить только одну, самую точную рамку на объект, применяется алгоритм Non-Maximum Suppression (NMS).
NMS работает следующим образом:
- Все предсказанные рамки сортируются по убыванию уверенности (objectness score).
- Выбирается рамка с максимальной уверенностью.
- Все остальные рамки, которые сильно перекрываются с выбранной (IoU выше заданного порога, обычно 0.5), удаляются.
- Процесс повторяется для оставшихся рамок, пока не останутся только уникальные рамки для каждого объекта.
Без NMS на выходе был бы хаос из десятков перекрывающихся рамок. Этот этап критически важен для получения аккуратного результата.
Метрики оценки качества YOLO: IoU, Precision, Recall, mAP
Чтобы понять, насколько хорошо работает модель YOLO, используют несколько метрик.
IoU (Intersection over Union) — отношение площади пересечения предсказанной рамки с истинной (ground truth) к площади их объединения. Значение от 0 до 1, где 1 — идеальное совпадение. Обычно порог IoU > 0.5 считается успешным обнаружением.
Precision (точность) — доля правильных обнаружений среди всех предсказанных объектов. Высокая точность означает, что модель редко ошибается, но может пропускать объекты.
Recall (полнота) — доля найденных объектов среди всех реально присутствующих. Высокая полнота означает, что модель находит почти всё, но может давать ложные срабатывания.
AP (Average Precision) — усреднённая точность по разным порогам уверенности для одного класса. mAP (mean Average Precision) — среднее AP по всем классам. Это основная метрика для сравнения моделей обнаружения объектов. Например, mAP@0.5 означает среднюю точность при пороге IoU 0.5, а mAP@0.5:0.95 — среднюю точность при порогах от 0.5 до 0.95 с шагом 0.05.
Практическое применение YOLO: детекция на фото и видео
YOLO широко используется в прикладных задачах. Рассмотрим два типичных сценария: обработка одного изображения и обработка видеопотока.
Детекция на фото. Загружается изображение, модель YOLO (например, yolov8n.pt) применяется к нему, и на выходе получаются координаты рамок, классы и уверенность. Результат можно визуализировать, нарисовав рамки на изображении, и сохранить данные в текстовый файл для дальнейшего анализа. Для этого достаточно нескольких строк кода на Python с использованием библиотеки Ultralytics.
Детекция в видеопотоке. Видео — это последовательность кадров. YOLO обрабатывает каждый кадр независимо, рисует рамки и записывает результат в новый видеофайл. Для работы с веб-камерой достаточно указать индекс камеры (0) вместо пути к файлу. Такой подход позволяет отслеживать объекты в реальном времени, например, для систем видеонаблюдения или управления дроном.
Также YOLO поддерживает сегментацию — выделение контуров объектов на уровне пикселей. Это полезно для задач, где нужна не просто рамка, а точная маска объекта, например, для удаления фона или наложения эффектов.
Сегментация и трекинг: расширенные возможности YOLO
Помимо детекции, современные версии YOLO (начиная с v8) поддерживают сегментацию экземпляров (instance segmentation). В этом случае модель предсказывает не только рамку, но и маску — бинарное изображение, где пиксели объекта отмечены единицами. Это позволяет, например, заменить фон вокруг человека на зелёный экран или точно вырезать объект для дальнейшей обработки.
Трекинг объектов — ещё одна важная функция. При обработке видеопотока YOLO может не только обнаруживать объекты на каждом кадре, но и связывать их между кадрами, присваивая каждому объекту уникальный идентификатор (ID). Это позволяет отслеживать перемещение объекта во времени, считать количество уникальных объектов, предсказывать траекторию движения. Трекинг особенно востребован в системах безопасности, спортивной аналитике и управлении беспилотными транспортными средствами.
Для трекинга часто используются дополнительные алгоритмы, такие как Deep SORT или ByteTrack, которые работают поверх детектора YOLO.
Как обучить YOLO на собственном датасете
Для решения специфических задач (например, обнаружение редких деталей на производственной линии) требуется дообучение (fine-tuning) предобученной модели YOLO на собственном наборе данных. Процесс включает несколько этапов:
- Сбор и разметка данных. Необходимо собрать изображения, содержащие интересующие объекты, и разметить их — нарисовать ограничивающие рамки и указать классы. Для разметки используются инструменты вроде LabelImg, CVAT или Roboflow.
- Подготовка датасета в формате YOLO. Каждому изображению соответствует текстовый файл с тем же именем, где каждая строка содержит:
class_id x_center y_center width height. Координаты нормализованы (от 0 до 1). Датасет делится на обучающую, валидационную и тестовую выборки.
- Выбор модели и конфигурации. Определяется размер модели (nano, small, medium и т.д.) и параметры обучения: количество эпох, размер батча, скорость обучения, аугментации данных.
- Запуск обучения. С помощью библиотеки Ultralytics обучение запускается одной командой. Модель автоматически сохраняет лучшие веса на основе метрик на валидационной выборке.
- Оценка и экспорт. После обучения модель оценивается на тестовой выборке (mAP, Precision, Recall). Готовую модель можно экспортировать в форматы ONNX, TensorRT, CoreML для инференса на различных платформах.
Обучение YOLO доступно даже при минимальных навыках программирования на Python, что делает её популярным выбором для исследователей и инженеров.
Ограничения и компромиссы YOLO
Несмотря на высокую скорость, YOLO имеет ряд ограничений, которые важно учитывать при выборе модели для конкретной задачи.
- Точность vs скорость. YOLO жертвует частью точности ради быстродействия. Для задач, где требуется максимальная точность (например, медицинская диагностика), могут быть предпочтительнее двухэтапные детекторы (Faster R-CNN).
- Мелкие объекты. Из-за разбиения на сетку YOLO может хуже обнаруживать очень маленькие объекты, особенно если они находятся в одной ячейке с крупным объектом. Современные версии (v5, v8) частично решают эту проблему с помощью FPN.
- Перекрывающиеся объекты. Если объекты сильно перекрываются, NMS может удалить одну из рамок, что приведёт к потере обнаружения.
- Зависимость от размера сетки. Размер сетки фиксирован для данной архитектуры, что может быть неоптимально для изображений с нестандартным соотношением сторон.
Тем не менее, для большинства практических задач, особенно в реальном времени, YOLO остаётся одним из лучших решений.
Вопросы и ответы
В чём главное отличие YOLO от других нейросетей для обнаружения объектов?
YOLO обрабатывает изображение целиком за один проход, в то время как более старые методы (R-CNN, Faster R-CNN) сначала генерируют регионы-кандидаты, а затем классифицируют каждый отдельно. Это делает YOLO значительно быстрее и пригодной для работы в реальном времени.
Что такое Non-Maximum Suppression и зачем он нужен в YOLO?
Non-Maximum Suppression (NMS) — это алгоритм, который удаляет лишние перекрывающиеся рамки, оставляя только одну, самую уверенную, для каждого объекта. Без NMO на выходе было бы множество дублирующих рамок, что затрудняет интерпретацию результатов.
Какие метрики используются для оценки качества YOLO?
Основные метрики: IoU (Intersection over Union) — точность совпадения рамок; Precision (точность) — доля правильных обнаружений; Recall (полнота) — доля найденных объектов; mAP (mean Average Precision) — усреднённая точность по всем классам и порогам.
Можно ли обучить YOLO распознавать собственные объекты?
Да, для этого нужно собрать и разметить датасет в формате YOLO (изображения + текстовые файлы с координатами рамок и классами), затем выполнить дообучение предобученной модели с помощью библиотеки Ultralytics. Процесс доступен даже при начальных навыках Python.
Какие задачи, кроме детекции, решает YOLO?
YOLO поддерживает сегментацию (выделение контуров объектов), классификацию (определение содержимого изображения), поиск ключевых точек тела (оценка позы человека) и трекинг объектов (отслеживание перемещения в видеопотоке с присвоением уникальных ID).
Почему YOLO может плохо обнаруживать мелкие объекты?
Из-за разбиения изображения на сетку мелкие объекты могут попадать в одну ячейку с крупными или быть слишком маленькими для точного предсказания. Современные версии YOLO (v5, v8) используют Feature Pyramid Networks для улучшения обнаружения объектов разного масштаба.
Какую версию YOLO выбрать для проекта?
Выбор зависит от требований к скорости и точности. Для слабых устройств (дроны, камеры) подойдёт yolov8n (nano). Для максимальной точности — yolov8x (extra large). Промежуточные варианты (s, m, l) дают баланс. Рекомендуется протестировать несколько моделей на своих данных.