YOLOv10: сквозное обнаружение объектов в реальном времени#
YOLOv10, выпущенная в мае 2024 года, основанная на Ultralytics (пакете Python) и разработанная исследователями из Университета Цинхуа, предлагает новый подход к обнаружению объектов в реальном времени, устраняющий недостатки как постобработки, так и архитектуры моделей, характерные для предыдущих версий YOLO. Отказ от подавления немаксимумов (NMS) и оптимизация различных компонентов модели позволили YOLOv10 на момент выпуска добиться отличных результатов при значительно меньших вычислительных затратах. Сквозная архитектура YOLOv10 без NMS положила начало подходу, который получил дальнейшее развитие в YOLO26.

Смотри: Как обучить YOLOv10 на датасете SKU-110k с помощью Ultralytics | Датасет розничной торговли
Обзор#
Обнаружение объектов в реальном времени должно точно определять классы объектов и их расположение на изображениях с малой задержкой. Серия YOLO занимает лидирующие позиции в этой области благодаря балансу производительности и эффективности. Однако зависимость от NMS и неэффективность архитектуры мешали достичь оптимальной производительности. YOLOv10 решает эти проблемы благодаря согласованному двойному назначению для обучения без NMS и комплексной стратегии проектирования модели с учётом эффективности и точности.
Архитектура#
Архитектура YOLOv10 опирается на сильные стороны предыдущих моделей YOLO и включает несколько важных нововведений. Она состоит из следующих компонентов:
- Основная сеть: отвечает за извлечение признаков. В YOLOv10 основная сеть использует усовершенствованную версию CSPNet (Cross Stage Partial Network), которая улучшает распространение градиентов и снижает избыточные вычисления.
- Шея: предназначена для агрегации признаков разных масштабов и их передачи в голову модели. Она включает слои PAN (Path Aggregation Network) для эффективного слияния признаков разных масштабов.
- Голова One-to-Many: во время обучения генерирует несколько предсказаний для каждого объекта, обеспечивая богатый сигнал для обучения и повышая точность обучения.
- Голова One-to-One: во время инференса формирует одно наиболее точное предсказание для каждого объекта, устраняя необходимость в NMS, что снижает задержку и повышает эффективность.
Основные особенности#
- Обучение без NMS: использует согласованные двойные назначения, чтобы устранить необходимость в NMS и снизить задержку инференса.
- Комплексное проектирование модели: всесторонняя оптимизация различных компонентов с точки зрения эффективности и точности, включая облегчённые классификационные головы, пространственно-канальное раздельное уменьшение размерности и проектирование блоков с учётом рангов.
- Расширенные возможности модели: использует свёртки с большими ядрами и модули частичного самовнимания для повышения производительности без существенных вычислительных затрат.
Варианты моделей#
YOLOv10 доступна в нескольких масштабах моделей для разных задач:
- YOLOv10n: версия Nano для сред с крайне ограниченными ресурсами.
- YOLOv10s: версия Small, обеспечивающая баланс скорости и точности.
- YOLOv10m: версия Medium для задач общего назначения.
- YOLOv10b: сбалансированная версия с увеличенной шириной для повышения точности.
- YOLOv10l: версия Large для повышения точности ценой увеличения вычислительных затрат.
- YOLOv10x: версия Extra-large для максимальной точности и производительности.
Производительность#
YOLOv10 превосходит предыдущие версии YOLO и другие современные модели по точности и эффективности. Например, YOLOv10s работает в 1,8 раза быстрее, чем RT-DETR-R18, при сопоставимом AP на датасете COCO, а задержка YOLOv10b на 46% ниже, а число параметров на 25% меньше, чем у YOLOv9-C при той же производительности.
Задержка измерена с TensorRT FP16 на GPU T4.
| Модель | Размер входных данных | APпроверка | FLOPs (G) | Задержка (мс) |
|---|---|---|---|---|
| [YOLOv10n][1] | 640 | 38.5 | 6.7 | 1.84 |
| [YOLOv10s][2] | 640 | 46.3 | 21.6 | 2.49 |
| [YOLOv10m][3] | 640 | 51.1 | 59.1 | 4.74 |
| [YOLOv10b][4] | 640 | 52.5 | 92.0 | 5.74 |
| [YOLOv10l][5] | 640 | 53.2 | 120.3 | 7.28 |
| [YOLOv10x][6] | 640 | 54.4 | 160.4 | 10.70 |
Методология#
Согласованные двойные назначения для обучения без NMS#
YOLOv10 использует двойное назначение меток: во время обучения сочетает стратегии one-to-many и one-to-one, обеспечивая полноценный контроль и эффективное сквозное развертывание. По умолчанию Ultralytics использует для предсказания и валидации голову one-to-many с NMS; задай nms=False, чтобы выбрать голову без NMS. Метрика согласованного сопоставления выравнивает контроль для обеих стратегий, повышая качество предсказаний во время инференса.
Комплексное проектирование модели с учётом эффективности и точности#
Повышение эффективности#
- Облегчённая классификационная голова: снижает вычислительные затраты классификационной головы за счёт использования глубинных разделимых свёрток.
- Пространственно-канальное раздельное уменьшение размерности: разделяет пространственное уменьшение и модуляцию каналов, минимизируя потерю информации и вычислительные затраты.
- Проектирование блоков с учётом рангов: адаптирует структуру блоков с учётом внутренней избыточности этапов, обеспечивая оптимальное использование параметров.
Повышение точности#
- Свёртка с большим ядром: увеличивает рецептивное поле, улучшая возможности извлечения признаков.
- Частичный self-attention (PSA): добавляет модули self-attention, чтобы улучшить обучение глобальным представлениям с минимальными дополнительными затратами.
Эксперименты и результаты#
YOLOv10 прошла обширное тестирование на стандартных бенчмарках, таких как COCO, продемонстрировав высокую производительность и эффективность. Модель показывает результаты уровня state of the art в разных вариантах, значительно улучшая задержку и точность по сравнению с предыдущими версиями и другими современными детекторами.
Сравнения#

По сравнению с другими современными детекторами:
- YOLOv10s / x работают в 1,8× / 1,3× раза быстрее, чем RT-DETR-R18 / R101, при сопоставимой точности
- У YOLOv10b на 25% меньше параметров и на 46% ниже задержка, чем у YOLOv9-C, при той же точности
- YOLOv10l / x превосходят YOLOv8l / x на 0,3 AP / 0,5 AP при в 1,8× / 2,3× раза меньшем числе параметров
Приведённые ниже значения указаны в статье YOLOv10 исследовательской работе и измерены по собственному протоколу, поэтому их нельзя напрямую сравнивать со значениями на страницах моделей Ultralytics:
| Модель | Параметры (M) | FLOPs (G) | mAPval 50-95 | Задержка (мс) | Задержка — прямой проход (мс) |
|---|---|---|---|---|---|
| YOLOv6-3.0-N | 4.7 | 11.4 | 37.0 | 2.69 | 1.76 |
| Gold-YOLO-N | 5.6 | 12.1 | 39.6 | 2.92 | 1.82 |
| YOLOv8n | 3.2 | 8.7 | 37.3 | 6.16 | 1.77 |
| YOLOv10n | 2.3 | 6.7 | 38.5 | 1.84 | 1.79 |
| YOLOv6-3.0-S | 18.5 | 45.3 | 44.3 | 3.42 | 2.35 |
| Gold-YOLO-S | 21.5 | 46.0 | 45.4 | 3.82 | 2.73 |
| YOLOv8s | 11.2 | 28.6 | 44.9 | 7.07 | 2.33 |
| YOLOv10s | 7.2 | 21.6 | 46.3 | 2.49 | 2.39 |
| RT-DETR-R18 | 20.0 | 60.0 | 46.5 | 4.58 | 4.49 |
| YOLOv6-3.0-M | 34.9 | 85.8 | 49.1 | 5.63 | 4.56 |
| Gold-YOLO-M | 41.3 | 87.5 | 49.8 | 6.38 | 5.45 |
| YOLOv8m | 25.9 | 78.9 | 50.6 | 9.50 | 5.09 |
| YOLOv10m | 15.4 | 59.1 | 51.1 | 4.74 | 4.63 |
| YOLOv6-3.0-L | 59.6 | 150.7 | 51.8 | 9.02 | 7.90 |
| Gold-YOLO-L | 75.1 | 151.7 | 51.8 | 10.65 | 9.78 |
| YOLOv8l | 43.7 | 165.2 | 52.9 | 12.39 | 8.06 |
| RT-DETR-R50 | 42.0 | 136.0 | 53.1 | 9.20 | 9.07 |
| YOLOv10l | 24.4 | 120.3 | 53.2 | 7.28 | 7.21 |
| YOLOv8x | 68.2 | 257.8 | 53.9 | 16.86 | 12.83 |
| RT-DETR-R101 | 76.0 | 259.0 | 54.3 | 13.71 | 13.58 |
| YOLOv10x | 29.5 | 160.4 | 54.4 | 10.70 | 10.60 |
Значения параметров и FLOPs указаны для объединённой модели после model.fuse(): в ней слои Conv и BatchNorm объединены, а вспомогательная голова детекции one-to-many удалена. Предобученные контрольные точки сохраняют полную архитектуру обучения, поэтому указанные значения могут быть выше.
Примеры использования#
Модели также можно обучать на облачных GPU через платформу Ultralytics. Чтобы выполнять предсказания на новых изображениях с YOLOv10:
from ultralytics import YOLO
# Загрузи предобученную модель YOLOv10n
model = YOLO("yolov10n.pt")
# Выполнить обнаружение объектов на изображении
results = model("image.jpg")
# Отобрази результаты
results[0].show()Чтобы обучить YOLOv10 на собственном датасете:
from ultralytics import YOLO
# Загрузи модель YOLOv10n с нуля
model = YOLO("yolov10n.yaml")
# Обучить модель
model.train(data="coco8.yaml", epochs=100, imgsz=640)Поддерживаемые задачи и режимы#
Серия моделей YOLOv10 включает модели, оптимизированные для высокопроизводительного обнаружения объектов. Они подходят для разных вычислительных ресурсов и требований к точности, поэтому применимы в самых разных задачах.
| Модель | Имена файлов | Задачи | Обучение | Валидация | Инференс | Экспорт |
|---|---|---|---|---|---|---|
| YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10b.pt yolov10l.pt yolov10x.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
Экспорт YOLOv10#
Из-за новых операций, появившихся в YOLOv10, сейчас поддерживаются не все форматы экспорта Ultralytics. В таблице ниже перечислены форматы, в которые YOLOv10 успешно экспортируется с помощью Ultralytics. Если ты можешь внести изменение в код, чтобы добавить поддержку экспорта YOLOv10 в другие форматы, создай pull request.
| Формат экспорта | Поддержка экспорта | Инференс экспортированной модели | Примечания |
|---|---|---|---|
| TorchScript | ✅ | ✅ | Стандартный формат модели PyTorch. |
| ONNX | ✅ | ✅ | Широко поддерживается при развертывании. |
| OpenVINO | ✅ | ✅ | Оптимизирован для оборудования Intel. |
| TensorRT | ✅ | ✅ | Оптимизирован для GPU NVIDIA. |
| CoreML | ✅ | ✅ | Только для устройств Apple. |
| TF SavedModel | ✅ | ✅ | Стандартный формат модели TensorFlow. |
| TF GraphDef | ✅ | ✅ | Устаревший формат TensorFlow. |
| TF Edge TPU | ✅ | ✅ | Только для устройств Edge TPU от Google. |
| LiteRT | ✅ | ✅ | Оптимизирован для мобильных и встраиваемых устройств, а также браузеров (LiteRT.js). |
| PaddlePaddle | ❌ | ❌ | Популярен в Китае; за его пределами поддерживается реже. |
| NCNN | ✅ | ❌ | Оператор torch.topk не поддерживается средой выполнения NCNN. |
Заключение#
На момент выхода YOLOv10 задала новый стандарт обнаружения объектов в реальном времени, устранив недостатки предыдущих версий YOLO и внедрив инновационные подходы к проектированию. Её подход без NMS стал первым сквозным решением для обнаружения объектов в семействе YOLO. Чтобы узнать о последней модели Ultralytics с улучшенной производительностью и инференсом без NMS, смотри YOLO26.
Цитирование и благодарности#
Мы хотели бы поблагодарить авторов YOLOv10 из Университета Цинхуа за масштабные исследования и значительный вклад в развитие фреймворка Ultralytics:
@inproceedings{wang2024yolov10,
title={YOLOv10: Real-Time End-to-End Object Detection},
author={Wang, Ao and Chen, Hui and Liu, Lihao and Chen, Kai and Lin, Zijia and Han, Jungong and Ding, Guiguang},
booktitle={Advances in Neural Information Processing Systems},
doi = {10.52202/079017-3429},
url = {https://proceedings.neurips.cc/paper_files/paper/2024/file/c34ddd05eb089991f06f3c5dc36836e0-Paper-Conference.pdf},
volume={37},
pages={107984--108011},
year={2024}
}Подробное описание реализации, архитектурных нововведений и экспериментальных результатов смотри в исследовательской статье о YOLOv10 и репозитории GitHub команды Университета Цинхуа.
Часто задаваемые вопросы#
YOLOv10, разработанная исследователями из Университета Цинхуа, предлагает несколько важных нововведений для обнаружения объектов в реальном времени. Она устраняет необходимость в подавлении немаксимумов (NMS), используя согласованные двойные назначения во время обучения и оптимизированные компоненты модели, что обеспечивает высокую производительность при меньших вычислительных затратах. Подробнее об архитектуре и ключевых особенностях читай в разделе обзор YOLOv10.
Для удобного выполнения инференса можно использовать библиотеку Ultralytics YOLO для Python или интерфейс командной строки (CLI). Ниже приведены примеры предсказания объектов на новых изображениях с помощью YOLOv10:
Примерfrom ultralytics import YOLO # Загружаем предварительно обученную модель YOLOv10n model = YOLO("yolov10n.pt") results = model("image.jpg") results[0].show()Больше примеров использования смотри в разделе Примеры использования.
YOLOv10 предлагает несколько вариантов моделей для разных задач:
- YOLOv10n: подходит для сред с крайне ограниченными ресурсами
- YOLOv10s: оптимальный баланс скорости и точности
- YOLOv10m: модель общего назначения
- YOLOv10b: более высокая точность благодаря увеличенной ширине
- YOLOv10l: высокая точность за счёт больших вычислительных затрат
- YOLOv10x: максимальные точность и производительность
Каждый вариант разработан с учётом определённых требований к вычислительным ресурсам и точности, поэтому модели подходят для самых разных приложений. Подробнее смотри в разделе Варианты моделей.
YOLOv10 обучается с помощью согласованных двойных назначений, благодаря которым голова с назначением один к одному выдаёт одно наилучшее предсказание для каждого объекта, что устраняет необходимость в подавлении немаксимумов (NMS) при инференсе. По умолчанию предсказание и валидация в Ultralytics используют голову с назначением один ко многим и NMS; задай
nms=False, чтобы выбрать голову без NMS и пропустить этап NMS. Подробное объяснение смотри в разделе Согласованные двойные назначения для обучения без NMS.YOLOv10 поддерживает несколько форматов экспорта, включая TorchScript, ONNX, OpenVINO и TensorRT. Однако из-за новых операций YOLOv10 пока поддерживает не все форматы экспорта, доступные в Ultralytics. Подробную информацию о поддерживаемых форматах и инструкциях по экспорту смотри в разделе Экспорт YOLOv10.
YOLOv10 превосходит предыдущие версии YOLO и другие современные модели как по точности, так и по эффективности. Например, YOLOv10s в 1,8 раза быстрее RT-DETR-R18 при сопоставимом AP на наборе данных COCO. YOLOv10b демонстрирует на 46% меньшую задержку и на 25% меньше параметров, чем YOLOv9-C, при той же производительности. Подробные результаты тестирования смотри в разделе Сравнения.