Ultralytics YOLO27:

Экспорт моделей YOLO26 в ONNX#

Инференс ONNX на CPU примерно на 43% быстрее: YOLO26n и YOLO11n
  • Инференс YOLO26n в ONNX на CPU работает до 43% быстрее, чем YOLO11n (процессор Intel Xeon @ 2.00 GHz). Полное сравнение смотри на странице модели YOLO26.

При развертывании моделей компьютерного зрения часто нужен формат модели, который одновременно гибок и совместим с несколькими платформами.

Экспорт моделей Ultralytics YOLO26 в формат ONNX упрощает развертывание и обеспечивает оптимальную производительность в различных средах. В этом руководстве показано, как легко преобразовать модели YOLO26 в ONNX и повысить их масштабируемость и эффективность в реальных приложениях.



Смотри: Сравнение инференса Ultralytics YOLO26 и Ultralytics YOLO11 в ONNX | YOLO26 обеспечивает инференс примерно на 43% быстрее 🚀

ONNX и ONNX Runtime#

ONNX, аббревиатура которого расшифровывается как «Открытый обмен нейронными сетями», — это проект сообщества, первоначально разработанный Facebook и Microsoft. Дальнейшая разработка ONNX ведётся совместными усилиями при поддержке различных организаций, таких как IBM, Amazon (через AWS) и Google. Цель проекта — создать открытый формат файлов для представления моделей машинного обучения, позволяющий использовать их в различных фреймворках ИИ и на разном оборудовании.

Модели 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 можно использовать отдельно или вместе с ONNX Runtime: этот формат обеспечивает гибкость при развертывании моделей машинного обучения и их совместимости.

Основные особенности моделей ONNX#

Возможность ONNX работать с различными форматами обеспечивают следующие ключевые особенности:

  • Единое представление модели: ONNX задает общий набор операторов (например, сверток и слоев) и стандартный формат данных. При преобразовании модели в формат ONNX ее архитектура и веса переводятся в это единое представление. Благодаря этому любая поддерживающая ONNX среда может интерпретировать модель.

  • Версионирование и обратная совместимость: ONNX использует систему версионирования операторов. Благодаря этому модели, созданные в предыдущих версиях, остаются пригодными к использованию по мере развития стандарта. Обратная совместимость особенно важна, поскольку она не дает моделям быстро устареть.

  • Представление модели в виде графа: ONNX представляет модели в виде вычислительных графов. Такая структура универсальна для представления моделей машинного обучения: узлы соответствуют операциям или вычислениям, а ребра — передаваемым между ними тензорам. Этот формат легко адаптировать к различным фреймворкам, которые также представляют модели в виде графов.

  • Инструменты и экосистема: вокруг ONNX сформировалась развитая экосистема инструментов для преобразования, визуализации и оптимизации моделей. Эти инструменты упрощают работу разработчиков с моделями ONNX и их преобразование между разными фреймворками.

Типичные сценарии использования ONNX#

Прежде чем перейти к экспорту моделей YOLO26 в формат ONNX, рассмотрим, где обычно применяются модели ONNX.

Развертывание на CPU#

Модели ONNX часто развертывают на CPU благодаря их совместимости с ONNX Runtime. Эта среда выполнения оптимизирована для работы на CPU. Она значительно ускоряет инференс и делает возможным развертывание на CPU в реальном времени.

Поддерживаемые варианты развертывания#

Хотя модели ONNX часто используют на CPU, их также можно развертывать на следующих платформах:

  • Ускорение на GPU: ONNX полностью поддерживает ускорение на GPU NVIDIA через CUDA и на GPU AMD через ROCm и MIGraphX.

  • Периферийные и мобильные устройства: ONNX подходит для периферийных и мобильных устройств, в том числе для инференса непосредственно на устройстве и в реальном времени. Формат отличается малым размером и совместимостью с периферийным оборудованием, а также служит основой для фирменных форматов NPU, таких как Huawei Ascend, Qualcomm QNN для устройств Snapdragon и RKNN для NPU Rockchip.

  • Веб-браузеры: ONNX можно запускать непосредственно в веб-браузерах, чтобы создавать интерактивные и динамичные веб-приложения на базе ИИ.

Поддерживаемые задачи#

Экспорт 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

# Загрузи модель YOLO26
model = YOLO("yolo26n.pt")

# Экспортировать модель в формат ONNX
model.export(format="onnx")  # создаёт 'yolo26n.onnx'

# Экспорт ONNX-модели с квантованием INT8 и калибровочными данными
model.export(format="onnx", quantize=8, data="coco8.yaml")  # создает 'yolo26n_int8.onnx'
Предсказание
from ultralytics import YOLO

# Загрузи экспортированную модель ONNX
model = YOLO("yolo26n.onnx")

# Выполнить инференс
results = model("https://ultralytics.com/images/bus.jpg")
Проверка
from ultralytics import YOLO

# Загрузи экспортированную модель ONNX
model = YOLO("yolo26n.onnx")

# Проверить точность на наборе данных COCO8
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.
datastrNoneYAML-файл датасета, используемый для калибровки INT8; для классификации вместо него указывают каталог датасета или имя встроенного датасета. Если параметр не задан вместе с quantize=8, Ultralytics выбирает стандартный калибровочный датасет для задачи модели; контрольной точке, обученной с quantize=8, он не требуется.
fractionfloat, int или list1.0Подмножество для калибровки, заданное как доля, количество изображений или [train, val, test] отношения/количества. Если список содержит два элемента, test остаётся без изменений, а 0 пропускает его.
dynamicboolFalseПозволяет использовать динамические размеры входных данных, повышая гибкость при обработке изображений разных размеров.
simplifyboolTrueУпрощает граф модели с помощью onnxslim, что потенциально повышает производительность и совместимость.
opsetintNoneЗадает версию ONNX opset для совместимости с различными парсерами и средами выполнения 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 смотри в следующих материалах:

Инференс на GPU AMD с MIGraphX#

Ultralytics запускает экспортированные модели ONNX на GPU AMD с помощью провайдера выполнения MIGraphX в ONNX Runtime. В системе с ROCm (HIP) бэкенд ONNX при первом использовании устанавливает плагин onnxruntime-ep-migraphx и автоматически выбирает MIGraphXExecutionProvider без изменения кода; поддерживаются все задачи YOLO26. Требования, установку, использование, результаты тестирования производительности и кэш скомпилированных программ смотри в руководстве по инференсу на GPU AMD.

Итоги#

В этом руководстве ты узнал, как экспортировать модели Ultralytics YOLO26 в формат ONNX, чтобы повысить их совместимость и производительность на различных платформах. Также ты познакомился с ONNX Runtime и вариантами развертывания ONNX-моделей.

Экспорт в ONNX — лишь один из множества форматов экспорта, поддерживаемых Ultralytics YOLO26, которые позволяют развертывать модели практически в любой среде. В зависимости от задач также стоит рассмотреть другие варианты экспорта, например TensorRT для максимальной производительности GPU или CoreML для устройств Apple.

Дополнительные сведения об использовании смотри в официальной документации ONNX.

Если хочешь узнать больше о других вариантах интеграции Ultralytics YOLO26, посети нашу страницу руководства по интеграциям. Там ты найдешь множество полезных материалов и рекомендаций.

Часто задаваемые вопросы#

  • Чтобы экспортировать модели YOLO26 в формат ONNX с помощью Ultralytics, выполни следующие действия:

    Использование
    from ultralytics import YOLO
    
    # Загрузи модель YOLO26
    model = YOLO("yolo26n.pt")
    
    # Экспортировать модель в формат ONNX
    model.export(format="onnx")  # создаёт 'yolo26n.onnx'
    
    # Загрузи экспортированную модель ONNX
    onnx_model = YOLO("yolo26n.onnx")
    
    # Выполнить инференс
    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: использование NVIDIA CUDA для высокопроизводительного ускорения вычислений на GPU.
    • GPU AMD: использование провайдера выполнения AMD ROCm и MIGraphX для высокопроизводительного ускорения вычислений на GPU в Linux.
    • Периферийные устройства: запуск облегчённых моделей на периферийных и мобильных устройствах для инференса в реальном времени непосредственно на устройстве.
    • Веб-браузеры: выполнение моделей непосредственно в браузерах для интерактивных веб-приложений.
    • Облачные сервисы: развёртывание на облачных платформах с поддержкой формата 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 за дополнительной помощью.

Комментарии