Экспорт ONNX для моделей YOLO26#
Примерно на 43% более быстрый вывод ONNX на CPU: YOLO26n по сравнению с YOLO11n
- YOLO26n выполняет вывод ONNX на CPU до 43% быстрее, чем YOLO11n (Intel Xeon CPU @ 2.00 GHz). Полное сравнение см. на странице модели YOLO26.
При развертывании моделей компьютерного зрения часто требуется формат модели, который одновременно гибок и совместим с несколькими платформами.
Экспорт моделей Ultralytics YOLO26 в формат ONNX упрощает развертывание и обеспечивает оптимальную производительность в различных средах. В этом руководстве показано, как легко преобразовать модели YOLO26 в ONNX и повысить их масштабируемость и эффективность в реальных приложениях.
Watch: Ultralytics YOLO26 vs Ultralytics YOLO11 ONNX Inference Test | ~43% Faster Inference with YOLO26 🚀
ONNX и ONNX Runtime#
ONNX, что означает Open Neural Network Exchange, — это проект сообщества, первоначально разработанный Facebook и Microsoft. Текущая разработка ONNX ведется совместно при поддержке различных организаций, таких как IBM, Amazon (через AWS) и Google. Цель проекта — создать открытый формат файлов для представления моделей машинного обучения, чтобы их можно было использовать в различных AI-фреймворках и на разном оборудовании.
Модели ONNX можно использовать для бесшовного перехода между различными фреймворками. Например, модель глубокого обучения, обученную в PyTorch, можно экспортировать в формат ONNX, а затем легко импортировать в TensorFlow.
Кроме того, модели ONNX можно использовать с ONNX Runtime. ONNX Runtime — это универсальный кроссплатформенный ускоритель для моделей машинного обучения, совместимый с такими фреймворками, как PyTorch, TensorFlow, scikit-learn и др.
ONNX Runtime оптимизирует выполнение моделей ONNX, используя возможности конкретного оборудования. Благодаря этой оптимизации модели эффективно работают с высокой производительностью на различных аппаратных платформах, включая CPU, GPU и специализированные ускорители.
При самостоятельном использовании или в сочетании с ONNX Runtime ONNX предоставляет гибкое решение для развертывания моделей машинного обучения и обеспечения совместимости.
Ключевые особенности моделей ONNX#
Способность ONNX работать с различными форматами обусловлена следующими ключевыми особенностями:
-
Единое представление моделей: ONNX определяет общий набор операторов (например, свертки, слои и т. д.) и стандартный формат данных. При преобразовании модели в формат ONNX ее архитектура и веса переводятся в это единое представление. Такая унификация гарантирует, что модель сможет быть понята любым фреймворком, поддерживающим ONNX.
-
Версионирование и обратная совместимость: ONNX поддерживает систему версионирования операторов. Это гарантирует, что даже по мере развития стандарта модели, созданные в старых версиях, остаются пригодными для использования. Обратная совместимость — важная функция, предотвращающая быстрое устаревание моделей.
-
Представление моделей на основе графов: ONNX представляет модели в виде вычислительных графов. Такая структура является универсальным способом представления моделей машинного обучения: узлы обозначают операции или вычисления, а ребра — тензоры, проходящие между ними. Этот формат легко адаптируется к различным фреймворкам, которые также представляют модели в виде графов.
-
Инструменты и экосистема: вокруг ONNX существует богатая экосистема инструментов для преобразования, визуализации и оптимизации моделей. Эти инструменты упрощают работу разработчиков с моделями ONNX и их бесшовное преобразование между различными фреймворками.
Распространенные варианты использования ONNX#
Прежде чем перейти к экспорту моделей YOLO26 в формат ONNX, рассмотрим, где обычно используются модели ONNX.
Развертывание на CPU#
Модели ONNX часто развертывают на CPU благодаря их совместимости с ONNX Runtime. Этот runtime оптимизирован для выполнения на CPU. Он значительно повышает скорость вывода и делает возможным развертывание в реальном времени на CPU.
Поддерживаемые варианты развертывания#
Хотя модели ONNX обычно используются на CPU, их также можно развернуть на следующих платформах:
-
Ускорение на GPU: ONNX полностью поддерживает ускорение на GPU, особенно NVIDIA CUDA. Для нативного обучения и вывода на GPU AMD используй PyTorch ROCm; файл ONNX по-прежнему требует runtime, совместимый с AMD.
-
Периферийные и мобильные устройства: ONNX поддерживает периферийные и мобильные устройства, что идеально подходит для сценариев вывода на устройстве и в реальном времени. Он легковесен и совместим с периферийным оборудованием, а также служит основой для форматов NPU от производителей, таких как Huawei Ascend, Qualcomm QNN для устройств Snapdragon и RKNN для NPU Rockchip.
-
Веб-браузеры: ONNX может выполняться непосредственно в веб-браузерах, обеспечивая работу интерактивных и динамических веб-приложений AI.
Поддерживаемые задачи#
Экспорт ONNX поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе, поставляемом с такими головами.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Детекция | ✅ | ✅ | ✅ |
| Сегментация | ✅ | ✅ | ✅ |
| Семантическая сегментация | ❌ | ❌ | ✅ |
| Оценка глубины | ❌ | ❌ | ✅ |
| Классификация | ✅ | ✅ | ✅ |
| Поза | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Экспорт моделей YOLO26 в ONNX#
Преобразовав модели YOLO26 в формат ONNX, ты можешь расширить совместимость моделей и гибкость их развертывания. Ultralytics YOLO26 предоставляет простой процесс экспорта, который может значительно повысить производительность твоей модели на разных платформах.
Установка#
Чтобы установить необходимый пакет, выполни:
# Install the required package for YOLO26
pip install ultralyticsПодробные инструкции и рекомендации по процессу установки см. в нашем руководстве по установке YOLO26. Если при установке необходимых пакетов для YOLO26 возникнут трудности, обратитесь к нашему руководству по распространённым проблемам, где приведены решения и советы.
Использование#
Прежде чем перейти к инструкциям по использованию, ознакомься с ассортиментом моделей YOLO26 от Ultralytics. Это поможет выбрать наиболее подходящую модель для требований твоего проекта.
Формат ONNX поддерживает режимы экспорта, предсказания и валидации. Экспортируй модель, затем загрузи экспортированную модель для выполнения вывода или проверки ее точности.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to ONNX format
model.export(format="onnx") # creates 'yolo26n.onnx'
# Export an INT8-quantized ONNX model with calibration data
model.export(format="onnx", quantize=8, data="coco8.yaml") # creates 'yolo26n_int8.onnx'from ultralytics import YOLO
# Load the exported ONNX model
model = YOLO("yolo26n.onnx")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported ONNX model
model = YOLO("yolo26n.onnx")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")Аргументы экспорта#
При экспорте модели YOLO26 в формат ONNX можно настроить процесс с помощью различных аргументов, чтобы оптимизировать его под конкретные требования развертывания:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'onnx' | Целевой формат экспортированной модели, определяющий совместимость с различными средами развёртывания. |
imgsz | int или tuple | 640 | Требуемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров. |
quantize | int или str | None | Точность квантования: 16 (FP16) или 8 (статическое квантование INT8 с использованием ONNX Runtime и калибровочных изображений из data, что дает модель _int8.onnx); 32/не задано соответствует FP32. Чекпоинт, обученный с quantize=8, всегда экспортирует INT8 как узлы Q/DQ из содержащихся в нем диапазонов, без калибровки и под простым именем .onnx. Заменяет устаревшие флаги half/int8. |
data | str | None | Dataset YAML, используемый для калибровки INT8; для классификации вместо этого передается каталог датасета или встроенное имя датасета. Если параметр опущен при quantize=8, Ultralytics выбирает датасет калибровки по умолчанию для задачи модели; чекпоинту, обученному с quantize=8, он не требуется. |
fraction | float, int или list | 1.0 | Подмножество для калибровки в виде доли, количества изображений или значений [train, val, test] — долей/количеств. В списках из двух элементов test оставляет полный набор, а 0 пропускает его. |
dynamic | bool | False | Разрешает динамические размеры входных данных, повышая гибкость при работе с изображениями разных размеров. |
simplify | bool | True | Упрощает граф модели с помощью onnxslim, что потенциально повышает производительность и совместимость. |
opset | int | None | Задает версию opset ONNX для совместимости с различными анализаторами и runtime ONNX. Если параметр не задан, используется последняя поддерживаемая версия. |
nms | bool, необязательно | None | Выбери необработанный вывод (None, по умолчанию), встроенный NMS (True) или голову без NMS (False). |
batch | int | 1 | Задаёт размер пакета при инференсе экспортированной модели или максимальное количество изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict. |
device | str | None | Указывает устройство для экспорта: GPU (device=0), CPU (device=cpu), MPS для Apple silicon (device=mps). |
Подробнее о процессе экспорта см. на странице документации Ultralytics об экспорте.
Развертывание экспортированных моделей YOLO26 ONNX#
После успешного экспорта моделей Ultralytics YOLO26 в формат ONNX следующий шаг — развернуть эти модели в различных средах. Подробные инструкции по развертыванию моделей ONNX приведены в следующих ресурсах:
-
Документация Python API ONNX Runtime: это руководство содержит основные сведения о загрузке и запуске моделей ONNX с использованием ONNX Runtime.
-
Развертывание на периферийных устройствах: ознакомься с этой страницей документации, где приведены различные примеры развертывания моделей ONNX на периферийных устройствах.
-
Учебные материалы по ONNX на GitHub: подборка подробных учебных материалов, охватывающих различные аспекты использования и реализации моделей ONNX в разных сценариях.
-
Сервер вывода Triton: узнай, как развертывать модели ONNX с помощью Triton Inference Server от NVIDIA для высокопроизводительного и масштабируемого развертывания.
Итоги#
В этом руководстве ты узнал, как экспортировать модели Ultralytics YOLO26 в формат ONNX, чтобы повысить их совместимость и производительность на различных платформах. Также были рассмотрены ONNX Runtime и варианты развертывания ONNX.
Экспорт ONNX — лишь один из множества форматов экспорта, поддерживаемых Ultralytics YOLO26, что позволяет развертывать модели практически в любой среде. В зависимости от конкретных требований можно также изучить другие варианты экспорта, например TensorRT для максимальной производительности GPU или CoreML для устройств Apple.
Дополнительные сведения об использовании см. в официальной документации ONNX.
Если ты хочешь узнать больше о других интеграциях Ultralytics YOLO26, посети нашу страницу руководства по интеграциям. Там ты найдешь множество полезных ресурсов и рекомендаций.
Часто задаваемые вопросы#
Чтобы экспортировать модели YOLO26 в формат ONNX с помощью Ultralytics, выполни следующие действия:
Использованиеfrom ultralytics import YOLO # Load a YOLO26 model model = YOLO("yolo26n.pt") # Export the model to ONNX format model.export(format="onnx") # creates 'yolo26n.onnx' # Load the exported ONNX model onnx_model = YOLO("yolo26n.onnx") # Run inference results = onnx_model("https://ultralytics.com/images/bus.jpg")Подробнее см. в документации по экспорту.
Использование ONNX Runtime для развертывания моделей YOLO26 дает несколько преимуществ:
- Кроссплатформенная совместимость: ONNX Runtime поддерживает различные платформы, такие как Windows, macOS и Linux, обеспечивая бесперебойную работу моделей в разных средах.
- Аппаратное ускорение: ONNX Runtime может использовать оптимизации для конкретного оборудования CPU, GPU и специализированных ускорителей, обеспечивая высокопроизводительный вывод.
- Совместимость между фреймворками: модели, обученные в популярных фреймворках, таких как PyTorch или TensorFlow, можно легко преобразовать в формат ONNX и запускать с помощью ONNX Runtime.
- Оптимизация производительности: ONNX Runtime может обеспечивать ускорение CPU до 3 раз по сравнению с нативными моделями PyTorch, что делает его идеальным для сценариев развертывания с ограниченными ресурсами GPU.
Подробнее см. в документации ONNX Runtime.
Модели YOLO26, экспортированные в ONNX, можно развернуть на различных платформах, включая:
- CPU: использование ONNX Runtime для оптимизированного вывода на CPU.
- GPU: использование NVIDIA CUDA для высокопроизводительного ускорения на GPU.
- Периферийные устройства: запуск легковесных моделей на периферийных и мобильных устройствах для вывода в реальном времени непосредственно на устройстве.
- Веб-браузеры: выполнение моделей непосредственно в веб-браузерах для интерактивных веб-приложений.
- Облачные сервисы: развертывание на облачных платформах, поддерживающих формат ONNX, для масштабируемого вывода.
Дополнительную информацию см. в нашем руководстве по вариантам развертывания моделей.
Использование формата ONNX для моделей Ultralytics YOLO26 дает множество преимуществ:
- Совместимость: ONNX позволяет бесшовно переносить модели между различными фреймворками машинного обучения.
- Оптимизация производительности: ONNX Runtime может повысить производительность моделей за счет использования оптимизаций для конкретного оборудования.
- Гибкость: ONNX поддерживает различные среды развертывания, позволяя использовать одну и ту же модель на разных платформах без изменений.
- Стандартизация: ONNX предоставляет стандартизированный формат, широко поддерживаемый в отрасли, что обеспечивает долгосрочную совместимость.
Обратись к подробному руководству по экспорту моделей YOLO26 в ONNX.
При экспорте моделей YOLO26 в ONNX можно столкнуться с распространенными проблемами, такими как несовместимые зависимости или неподдерживаемые операции. Чтобы устранить эти проблемы:
- Убедись, что установлена правильная версия необходимых зависимостей.
- Проверь официальную документацию ONNX, чтобы узнать о поддерживаемых операторах и функциях.
- Изучи сообщения об ошибках для поиска подсказок и обратись к руководству Ultralytics по распространенным проблемам.
- Попробуй использовать другие аргументы экспорта, например
simplify=True, или изменить версиюopset. - При проблемах с динамическим размером входных данных задай
dynamic=Trueво время экспорта.
Если проблемы сохраняются, обратись в службу поддержки Ultralytics за дополнительной помощью.