Ultralytics YOLO27:

Экспорт 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 model portability across deep learning frameworks

Кроме того, модели ONNX можно использовать с ONNX Runtime. ONNX Runtime — это универсальный кроссплатформенный ускоритель для моделей машинного обучения, совместимый с такими фреймворками, как PyTorch, TensorFlow, scikit-learn и др.

ONNX Runtime оптимизирует выполнение моделей ONNX, используя возможности конкретного оборудования. Благодаря этой оптимизации модели эффективно работают с высокой производительностью на различных аппаратных платформах, включая CPU, GPU и специализированные ускорители.

ONNX Runtime cross-platform inference acceleration

При самостоятельном использовании или в сочетании с 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 — единственном семействе, поставляемом с такими головами.

Экспорт моделей 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'
Predict
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 можно настроить процесс с помощью различных аргументов, чтобы оптимизировать его под конкретные требования развертывания:

АргументТипПо умолчаниюОписание
formatstr'onnx'Целевой формат экспортированной модели, определяющий совместимость с различными средами развёртывания.
imgszint или tuple640Требуемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров.
quantizeint или strNoneТочность квантования: 16 (FP16) или 8 (статическое квантование INT8 с использованием ONNX Runtime и калибровочных изображений из data, что дает модель _int8.onnx); 32/не задано соответствует FP32. Чекпоинт, обученный с quantize=8, всегда экспортирует INT8 как узлы Q/DQ из содержащихся в нем диапазонов, без калибровки и под простым именем .onnx. Заменяет устаревшие флаги half/int8.
datastrNoneDataset YAML, используемый для калибровки INT8; для классификации вместо этого передается каталог датасета или встроенное имя датасета. Если параметр опущен при quantize=8, Ultralytics выбирает датасет калибровки по умолчанию для задачи модели; чекпоинту, обученному с quantize=8, он не требуется.
fractionfloat, int или list1.0Подмножество для калибровки в виде доли, количества изображений или значений [train, val, test] — долей/количеств. В списках из двух элементов test оставляет полный набор, а 0 пропускает его.
dynamicboolFalseРазрешает динамические размеры входных данных, повышая гибкость при работе с изображениями разных размеров.
simplifyboolTrueУпрощает граф модели с помощью onnxslim, что потенциально повышает производительность и совместимость.
opsetintNoneЗадает версию opset ONNX для совместимости с различными анализаторами и runtime ONNX. Если параметр не задан, используется последняя поддерживаемая версия.
nmsbool, необязательноNoneВыбери необработанный вывод (None, по умолчанию), встроенный NMS (True) или голову без NMS (False).
batchint1Задаёт размер пакета при инференсе экспортированной модели или максимальное количество изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict.
devicestrNoneУказывает устройство для экспорта: 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 можно столкнуться с распространенными проблемами, такими как несовместимые зависимости или неподдерживаемые операции. Чтобы устранить эти проблемы:

    1. Убедись, что установлена правильная версия необходимых зависимостей.
    2. Проверь официальную документацию ONNX, чтобы узнать о поддерживаемых операторах и функциях.
    3. Изучи сообщения об ошибках для поиска подсказок и обратись к руководству Ultralytics по распространенным проблемам.
    4. Попробуй использовать другие аргументы экспорта, например simplify=True, или изменить версию opset.
    5. При проблемах с динамическим размером входных данных задай dynamic=True во время экспорта.

    Если проблемы сохраняются, обратись в службу поддержки Ultralytics за дополнительной помощью.

Комментарии