Легкий, портативный Pure C99 onnx inference engine для встроенных устройств с аппаратной поддержкой ускорения.
Файлы библиотеки .c и .h могут быть сброшены в проект и скомпилированы вместе с ним. Перед использованием следует выделить struct onnx_context_t * , и вы можете передать массив struct resolver_t * для ускорения аппаратного обеспечения.
Имя файла - это путь к формату модели onnx .
struct onnx_context_t * ctx = onnx_context_alloc_from_file ( filename , NULL , 0 ); Затем вы можете получить ввод и вывод тензора с помощью функции onnx_tensor_search .
struct onnx_tensor_t * input = onnx_tensor_search ( ctx , "input-tensor-name" );
struct onnx_tensor_t * output = onnx_tensor_search ( ctx , "output-tensor-name" ); Когда входной тензор настраивается, вы можете запустить механизм вывода, используя функцию onnx_run , и результат будет помещать в выходной тензор.
onnx_run ( ctx ); Наконец, вы должны освободить struct onnx_context_t * Использование функции onnx_context_free .
onnx_context_free ( ctx ); Просто введите make в корневом каталоге, вы увидите статическую библиотеку и несколько двоичных примеров и тестов для использования.
cd libonnx
make Чтобы составить пример mnist , вам придется установить SDL2 и SDL2 GFX. В таких системах, как ubuntu Run
apt-get install libsdl2-dev libsdl2-gfx-devЧтобы установить требуемые простые библиотеки слоев DirectMedia для запуска графического интерфейса.
arm64 ) Запустить make CROSS_COMPILE=path/to/toolchains/aarch64-linux-gnu- в корневом каталоге, чтобы составить все библиотеки, тесты и примеры для платформы.
Измените CROSS_COMPILE , чтобы указать на инструментальные уходы, которые вы планируете использовать.
После составления всех файлов вы можете запустить пример, используя:
cd libonnx/examples/hello/output
./hello
Для запуска тестов, например, в тех, кто используется в папке tests/model :
cd libonnx/tests/output
./tests ../modelВот выход:
[mnist_8](test_data_set_0) [OKAY]
[mnist_8](test_data_set_1) [OKAY]
[mnist_8](test_data_set_2) [OKAY]
[mobilenet_v2_7](test_data_set_0) [OKAY]
[mobilenet_v2_7](test_data_set_1) [OKAY]
[mobilenet_v2_7](test_data_set_2) [OKAY]
[shufflenet_v1_9](test_data_set_0) [OKAY]
[shufflenet_v1_9](test_data_set_1) [OKAY]
[shufflenet_v1_9](test_data_set_2) [OKAY]
[squeezenet_v11_7](test_data_set_0) [OKAY]
[squeezenet_v11_7](test_data_set_1) [OKAY]
[squeezenet_v11_7](test_data_set_2) [OKAY]
[super_resolution_10](test_data_set_0) [OKAY]
[tinyyolo_v2_8](test_data_set_0) [OKAY]
[tinyyolo_v2_8](test_data_set_1) [OKAY]
[tinyyolo_v2_8](test_data_set_2) [OKAY]Обратите внимание, что запуск теста в других папках может не добиться успеха. Некоторые операторы не были реализованы, посмотрите на раздел «ЗАМЕЧАНИЯ» для получения дополнительной информации.
opset 23 . Поддерживаемая таблица операторов в каталоге документов.tools для помощи с файлами моделей ONNX.xxd -i <filename.onnx> (на Linux), чтобы преобразовать модель ONNX в unsigned char array , а затем использовать функцию onnx_context_alloc для ее использования. Вот как модели загружаются в примеры - hello и mnist . Эта библиотека - свободное программное обеспечение; Вы можете перераспределить его и изменить его в соответствии с условиями лицензии MIT. Смотрите лицензию MIT для деталей.