ONNX (Open Neural Network Exchange)
ONNX (Open Neural Network Exchange) — открытый формат представления моделей машинного обучения, предназначенный для переноса обученных моделей между различными фреймворками, программными библиотеками и вычислительными платформами.
ONNX описывает структуру модели, ее операции и параметры в стандартизированном виде. Благодаря этому модель, обученную в одной программной среде, можно преобразовать в ONNX и использовать в другой среде, если она поддерживает соответствующие операции и формат.
Зачем нужен ONNX
Модели машинного обучения часто разрабатываются и обучаются с использованием определенного фреймворка. При этом среда, в которой модель будет использоваться после обучения, может отличаться.
Например:
обучение модели → экспорт в ONNX → запуск в другой среде выполнения
Такой подход позволяет отделить этап разработки и обучения модели от среды, в которой выполняется ее применение.
ONNX особенно полезен при переносе моделей на различные типы вычислительного оборудования и при построении систем, где одна модель должна использоваться в нескольких программных средах.
Что содержит ONNX-модель
ONNX-файл содержит описание вычислительной структуры модели и необходимые параметры.
В зависимости от модели в нем могут быть представлены:
- вычислительные операции;
- связи между операциями;
- веса и другие параметры модели;
- входы и выходы;
- информация о типах данных;
- служебные сведения о модели.
Таким образом, ONNX хранит не просто исходный код модели, а ее вычислительное представление, которое может быть интерпретировано совместимой средой выполнения.
ONNX и машинное обучение
ONNX используется преимущественно после этапа обучения модели.
Например, модель компьютерного зрения может быть разработана и обучена в одном фреймворке, после чего экспортирована в ONNX. Полученный файл затем используется для inference в совместимой среде.
При этом ONNX не выполняет inference самостоятельно. Для запуска модели необходим runtime или другая программная система, способная работать с ONNX-моделями.
ONNX Runtime
ONNX Runtime — среда выполнения, предназначенная для запуска моделей в формате ONNX.
Она позволяет выполнять inference на различных вычислительных устройствах и использовать аппаратные ускорители, если они поддерживаются конкретной конфигурацией.
В зависимости от платформы inference может выполняться на CPU, GPU или специализированном ускорителе.
ONNX в компьютерном зрении
ONNX широко применяется для переноса моделей компьютерного зрения из среды разработки в среду эксплуатации.
Например, обученная модель обнаружения объектов может быть экспортирована в ONNX и затем использоваться для обработки изображений и видеоданных в прикладном программном обеспечении.
Это особенно актуально для моделей, работающих на ограниченных вычислительных устройствах, где важны скорость inference, объем памяти и доступные аппаратные ускорители.
ONNX в БПЛА
В системах БПЛА ONNX может использоваться как промежуточный формат для переноса моделей компьютерного зрения на бортовое вычислительное оборудование.
Например, модель для анализа изображений может быть обучена на сервере, преобразована в формат ONNX, оптимизирована под целевую аппаратную платформу и затем использована для inference на бортовом компьютере.
Типовая схема может выглядеть следующим образом:
Датасет → обучение модели → экспорт в ONNX → оптимизация → бортовая платформа → inference → результат анализа
Такой подход позволяет отделить разработку модели от конкретного оборудования, на котором она будет работать.
Ограничения ONNX
ONNX не гарантирует, что любая модель будет без изменений работать в любой совместимой среде.
Причины могут включать:
- отсутствие поддержки отдельных операций;
- различия в типах данных;
- особенности конкретного runtime;
- различия в реализации операторов;
- ограничения аппаратного ускорителя;
- необходимость дополнительной оптимизации модели.
Поэтому после конвертации модели обычно проверяют корректность результатов и производительность inference на целевой платформе.
ONNX и другие форматы моделей
ONNX следует отличать от форматов, предназначенных для конкретных фреймворков или аппаратных платформ.
Главное назначение ONNX — обеспечить переносимое представление модели, тогда как специализированные форматы могут быть оптимизированы под конкретный runtime или тип оборудования.
В реальном проекте модель может пройти несколько этапов преобразования:
исходный формат → ONNX → оптимизированный формат целевой платформы → inference
Кратко
ONNX — открытый формат представления моделей машинного обучения, который используется для переноса обученных моделей между различными фреймворками, средами выполнения и вычислительными платформами. В системах компьютерного зрения и БПЛА ONNX может использоваться для подготовки моделей к inference на бортовом или другом целевом вычислительном оборудовании.