Что такое YOLO и почему она стала стандартом детекции
YOLO (You Only Look Once) — это семейство нейросетей для обнаружения объектов на изображениях и видео. В отличие от классификаторов, которые просто присваивают картинке метку, YOLO одновременно определяет, какие объекты присутствуют, и рисует вокруг них ограничивающие рамки с координатами. Такой подход позволяет решать задачу за один проход нейросети, что обеспечивает высокую скорость — до десятков кадров в секунду даже на скромном оборудовании.
Название отражает ключевую идею: модель «смотрит» на изображение один раз и сразу выдаёт все предсказания. Это контрастирует с более ранними методами, которые сначала генерировали множество кандидатных областей, а затем классифицировали каждую отдельно. YOLO стала стандартом де-факто в задачах, где важна работа в реальном времени: видеонаблюдение, беспилотники, промышленный контроль качества, анализ медицинских снимков и даже автономный транспорт.
Семейство YOLO развивается почти десять лет, и каждая новая версия приносит улучшения в точности, скорости и удобстве использования. Сегодня доступны версии от YOLOv5 до YOLOv12, и выбор конкретной модели зависит от ваших задач и доступных вычислительных ресурсов.
Как работает YOLO: принцип «одного взгляда» и сетка
В основе YOLO лежит разделение изображения на сетку, например 8×9 или 6×6. Каждая клетка сетки отвечает за свой участок картинки. Нейросеть анализирует всю сцену целиком и для каждой клетки предсказывает три вещи: есть ли в ней объект (или его часть), координаты ограничивающей рамки и класс объекта (человек, машина, собака и т.д.).
Если центр объекта попадает в конкретную клетку, именно она становится ответственной за этот объект. Для повышения точности YOLO предсказывает несколько вариантов рамок разного размера и формы, а затем специальный фильтр — Non-Maximum Suppression (NMS) — убирает дубликаты, оставляя только самую уверенную рамку для каждого объекта. На выходе вы получаете список объектов с координатами и уровнем уверенности.
Такой подход делает YOLO очень быстрой, потому что она не перебирает фрагменты изображения, а обрабатывает его целиком. Это позволяет запускать модель даже на слабых устройствах — от дронов до камер видеонаблюдения. Однако за скорость приходится платить некоторой потерей точности по сравнению с более тяжёлыми архитектурами, но для большинства практических задач это некритично.
Какие задачи решает YOLO: от детекции до трекинга
YOLO — это не только детекция объектов. Современные версии, особенно YOLOv8 и новее, поддерживают несколько режимов работы:
- Детекция — нахождение объектов и их ограничивающих рамок.
- Сегментация — разделение изображения на области, принадлежащие каждому объекту, с точным контуром.
- Классификация — определение того, что изображено на картинке целиком.
- Поиск ключевых точек — определение позы человека (например, для анализа движений).
- Трекинг объектов — потоковая обработка видео, при которой для каждого объекта сохраняется история местоположения, что позволяет отслеживать его перемещение.
Трекинг особенно полезен в системах видеонаблюдения и аналитике: можно не только обнаружить человека, но и проследить его путь, предсказать направление движения. Для этого используются алгоритмы, которые связывают рамки между кадрами, присваивая объектам уникальные идентификаторы.
Также YOLO может использоваться для удаления фона: модель сегментирует объект (например, человека) и позволяет заменить фон на любой другой. Это востребовано в фоторедакторах, видеомонтаже и AR-приложениях.
Обзор версий YOLO: от v5 до v12 — что выбрать
Семейство YOLO постоянно развивается, и на текущий момент наиболее популярны следующие версии:
- YOLOv5 — одна из самых распространённых версий, особенно в коммерческих проектах. Отличается простотой использования, хорошей документацией и большим количеством готовых решений. Поддерживает детекцию, сегментацию и классификацию.
- YOLOv8 — следующее поколение, которое добавило улучшенную архитектуру и встроенную поддержку трекинга. Считается хорошим балансом между точностью и скоростью. Именно YOLOv8 часто используют в обучающих материалах и стартапах.
- YOLOv11 — новейшая версия на момент написания статьи, которая предлагает ещё более высокую точность и эффективность. Включает улучшенные механизмы внимания и оптимизации.
- YOLOv12 — экспериментальная версия, которая развивает идеи v11 и добавляет новые архитектурные решения, но пока менее распространена в продакшене.
При выборе версии важно учитывать не только новизну, но и совместимость с вашим оборудованием, наличие предобученных весов и сообщества. Для большинства задач YOLOv8 является оптимальным выбором, так как она хорошо документирована, стабильна и поддерживает все основные функции. Если вам нужна максимальная точность и вы готовы мириться с возможными недоработками, можно попробовать YOLOv11 или v12.
Как скачать YOLO: установка через pip и предобученные веса
Самый простой способ начать работу с YOLO — установить библиотеку Ultralytics, которая предоставляет единый интерфейс для всех версий. Для этого достаточно выполнить команду в терминале:
pip install ultralyticsПосле установки вы можете загрузить предобученную модель, например YOLOv8n (nano — самая маленькая и быстрая). При первом запуске веса скачаются автоматически:
from ultralytics import YOLO
model = YOLO('yolov8n.pt')Доступны несколько вариантов моделей, отличающихся размером и точностью:
yolov8n.pt— nano, самая быстрая, но менее точная.yolov8s.pt— small, хороший баланс.yolov8m.pt— medium, выше точность, но медленнее.yolov8l.pt— large, ещё точнее.yolov8x.pt— extra large, максимальная точность, требует мощного GPU.
Аналогичные варианты существуют для сегментации (например, yolov8n-seg.pt) и для других задач. Если вы используете YOLOv5, веса можно скачать с официального репозитория на GitHub, но библиотека Ultralytics также поддерживает загрузку и этих моделей.
Важно: для работы с YOLO рекомендуется иметь Python 3.8 или новее, а также библиотеки PyTorch и OpenCV. Установка через pip автоматически подтянет все зависимости.
Практический пример: детекция объектов на фото и видео
Рассмотрим простой пример использования YOLOv8 для детекции объектов на изображении. Сначала загрузим модель и обработаем картинку:
from ultralytics import YOLO
import cv2
model = YOLO('yolov8n.pt')
results = model('test.jpg')[0]
# Получаем координаты рамок и классы
boxes = results.boxes.xyxy.cpu().numpy().astype(int)
classes = results.boxes.cls.cpu().numpy().astype(int)
names = results.names
# Рисуем рамки на изображении
image = cv2.imread('test.jpg')
for box, cls in zip(boxes, classes):
x1, y1, x2, y2 = box
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(image, names[cls], (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
cv2.imwrite('result.jpg', image)Для обработки видео достаточно применить модель к каждому кадру в цикле. Можно использовать OpenCV для чтения видеофайла или захвата с веб-камеры. Пример для веб-камеры:
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame)[0]
for box, cls, conf in zip(results.boxes.xyxy, results.boxes.cls, results.boxes.conf):
if conf > 0.5:
x1, y1, x2, y2 = map(int, box)
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, results.names[int(cls)], (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
cv2.imshow('YOLO', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()Этот код позволяет в реальном времени обнаруживать объекты с камеры. Порог уверенности (conf) можно регулировать: чем выше, тем меньше ложных срабатываний, но можно пропустить мелкие объекты.
Сегментация и трекинг: расширенные возможности YOLO
Сегментация — это более точная задача, чем детекция: вместо прямоугольной рамки модель выделяет контур объекта, раскрашивая каждый пиксель. В YOLOv8 для этого используются модели с суффиксом -seg, например yolov8n-seg.pt. Пример использования:
from ultralytics import YOLO
model = YOLO('yolov8n-seg.pt')
results = model('image.jpg')[0]
masks = results.masks.data.cpu().numpy() # маски объектовСегментация полезна для задач, где важна точная форма объекта: удаление фона, медицинская визуализация, робототехника. Например, можно заменить фон на зелёный, как в хромакее, или вырезать объект для дальнейшей обработки.
Трекинг объектов позволяет отслеживать перемещение объектов в видео. В Ultralytics это реализовано через метод model.track():
results = model.track(video_path, persist=True)При этом каждому объекту присваивается уникальный ID, который сохраняется между кадрами. Это позволяет считать количество людей, прошедших через зону, или анализировать траектории движения. Трекинг особенно востребован в системах безопасности и аналитике розничной торговли.
Как обучить YOLO на собственном датасете
Предобученные модели YOLO распознают 80 классов из набора COCO (люди, машины, животные и т.д.). Если вам нужно распознавать специфические объекты, например дефекты на производстве или редкие виды растений, потребуется дообучение на собственном датасете.
Процесс обучения включает несколько этапов:
- Сбор данных — соберите изображения с нужными объектами. Чем больше разнообразия (ракурсы, освещение, фон), тем лучше.
- Разметка — для каждого изображения нужно указать координаты ограничивающих рамок и классы. Для этого используются инструменты вроде LabelImg или CVAT. Разметка сохраняется в формате YOLO (текстовые файлы с координатами).
- Создание конфигурации — подготовьте файл
data.yaml, в котором указаны пути к папкам с изображениями и разметкой, список классов и количество классов. - Запуск обучения — используйте команду:
yolo train data=data.yaml model=yolov8n.pt epochs=50Здесь epochs — количество эпох (проходов по датасету). Чем больше эпох, тем лучше модель обучается, но есть риск переобучения.
После обучения модель можно сохранить и использовать для инференса. Важно следить за метриками: precision, recall и mAP (mean Average Precision). Если mAP низкий, возможно, нужно больше данных, больше эпох или более крупная модель (например, yolov8m вместо yolov8n).
Метрики качества: как оценить работу модели
Чтобы понять, насколько хорошо работает YOLO, используются стандартные метрики:
- IoU (Intersection over Union) — отношение площади пересечения предсказанной рамки с истинной к площади их объединения. Значение от 0 до 1, где 1 — идеальное совпадение. Обычно порог 0.5 считается приемлемым.
- Precision (точность) — доля правильных предсказаний среди всех предсказаний модели. Высокая точность означает, что модель редко ошибается, но может пропускать объекты.
- Recall (полнота) — доля найденных объектов среди всех реально существующих. Высокая полнота означает, что модель находит почти всё, но может давать ложные срабатывания.
- AP (Average Precision) — усреднённое значение точности при разных порогах полноты. Рассчитывается для каждого класса отдельно.
- mAP (mean Average Precision) — среднее AP по всем классам. Это основная метрика для сравнения моделей.
Например, если модель нашла 5 объектов, из которых 4 правильные, точность = 80%. Если всего на изображении было 6 объектов, полнота = 66%. Идеальная модель имеет mAP близкий к 1, но на практике хорошим результатом считается mAP выше 0.5.
При обучении важно следить за этими метриками на валидационном наборе данных, чтобы избежать переобучения. Если модель показывает высокие метрики на тренировочных данных, но низкие на новых, значит, она запомнила обучающие примеры, а не обобщила закономерности.
Ограничения и рекомендации по использованию YOLO
Несмотря на все преимущества, YOLO имеет ограничения, которые важно учитывать:
- Точность на мелких объектах — YOLO может хуже справляться с очень маленькими объектами, особенно если они расположены плотно. В таких случаях помогает увеличение разрешения входного изображения или использование более крупной модели.
- Скорость vs точность — выбор модели всегда компромисс. Nano-версии быстрые, но менее точные; extra-large — точные, но требуют мощного GPU. Для реального времени на слабом железе лучше использовать nano или small.
- Зависимость от данных — предобученные модели хорошо работают на типичных изображениях, но могут ошибаться на специфических данных. Дообучение на своих данных почти всегда улучшает результат.
- Ресурсы — обучение даже небольшой модели требует GPU с достаточным объёмом памяти. Для больших датасетов может понадобиться несколько часов или дней.
Рекомендации:
- Начинайте с предобученной модели и дообучайте её, а не тренируйте с нуля — это быстрее и требует меньше данных.
- Используйте аугментацию данных (повороты, масштабирование, изменение яркости), чтобы повысить устойчивость модели.
- Для продакшена выбирайте стабильные версии (YOLOv8), а новые (v11, v12) тестируйте в экспериментальных проектах.
- Следите за порогом уверенности: слишком низкий порог даёт много ложных срабатываний, слишком высокий — пропуски объектов.
Вопросы и ответы
Как скачать YOLO нейросеть бесплатно?
YOLO является open-source проектом, поэтому скачать её можно бесплатно. Самый простой способ — установить библиотеку Ultralytics через pip: pip install ultralytics. После этого предобученные веса (например, yolov8n.pt) скачаются автоматически при первом использовании. Также можно скачать веса вручную с официального репозитория на GitHub или из документации Ultralytics.
Какая версия YOLO лучше для начинающих?
Для начинающих рекомендуется YOLOv8, так как она имеет хорошую документацию, множество обучающих материалов и поддерживает все основные задачи (детекцию, сегментацию, трекинг). Модель yolov8n.pt (nano) — отличный старт: она быстро работает даже на CPU, хотя для обучения лучше использовать GPU. YOLOv5 также подходит, но её экосистема менее унифицирована.
Можно ли использовать YOLO на компьютере без GPU?
Да, можно. YOLO может работать на CPU, но скорость будет ниже. Для детекции на отдельных изображениях это вполне приемлемо, а для обработки видео в реальном времени может не хватить производительности. В таких случаях рекомендуется использовать nano-версии моделей (например, yolov8n.pt) и уменьшать разрешение входных кадров. Для обучения модели GPU практически обязателен, так как обучение на CPU займёт очень много времени.
Какие форматы данных нужны для обучения YOLO?
Для обучения YOLO используется формат разметки, где для каждого изображения создаётся текстовый файл с тем же именем, содержащий строки: class x_center y_center width height. Координаты нормализованы (от 0 до 1) относительно размеров изображения. Также нужен файл data.yaml с указанием путей к папкам train/val, списком классов и их количеством. Инструменты разметки, такие как LabelImg или CVAT, автоматически сохраняют данные в этом формате.
Что такое mAP и почему это важно?
mAP (mean Average Precision) — это средняя точность модели по всем классам объектов. Она рассчитывается как среднее значение AP (Average Precision) для каждого класса. AP, в свою очередь, учитывает и точность (precision), и полноту (recall) при разных порогах уверенности. mAP позволяет сравнивать разные модели между собой: чем выше mAP, тем лучше модель обнаруживает объекты. Обычно mAP измеряется при пороге IoU 0.5 (mAP@0.5) или при нескольких порогах (mAP@0.5:0.95).
Как улучшить точность YOLO на своих данных?
Чтобы повысить точность, можно: 1) собрать больше размеченных изображений, особенно с разнообразными условиями; 2) использовать аугментацию данных (повороты, масштабирование, изменение яркости); 3) выбрать более крупную модель (например, yolov8m вместо yolov8n); 4) увеличить количество эпох обучения, но следить за переобучением; 5) настроить гиперпараметры, такие как размер батча и скорость обучения. Также важно правильно сбалансировать классы, если одних объектов больше, чем других.