Un inference engine onnx Pure C99 liviano y portátil para dispositivos integrados con soporte de aceleración de hardware.
Los archivos .c y .h de la biblioteca se pueden dejar en un proyecto y compilarse junto con él. Antes de usar, se debe asignar struct onnx_context_t * y puede pasar una matriz de struct resolver_t * para la aceleración de hardware.
El nombre de archivo es la ruta del formato del modelo onnx .
struct onnx_context_t * ctx = onnx_context_alloc_from_file ( filename , NULL , 0 ); Luego, puede obtener el tensor de entrada y salida utilizando la función 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" ); Cuando el tensor de entrada se ha estado configurando, puede ejecutar un motor de inferencia usando la función onnx_run y el resultado se pondrá en el tensor de salida.
onnx_run ( ctx ); Finalmente, debe liberar struct onnx_context_t * usando la función onnx_context_free .
onnx_context_free ( ctx ); Simplemente escriba make en el directorio raíz, verá una biblioteca estática y un binario de ejemplos y pruebas de uso.
cd libonnx
make Para compilar el ejemplo mnist , deberá instalar SDL2 y SDL2 GFX. En sistemas como Ubuntu Run
apt-get install libsdl2-dev libsdl2-gfx-devPara instalar las bibliotecas de capa directas simples requeridas para ejecutar la GUI.
arm64 ) Ejecutar make CROSS_COMPILE=path/to/toolchains/aarch64-linux-gnu- En el directorio raíz para compilar todas las bibliotecas, pruebas y ejemplos para la plataforma.
Cambie CROSS_COMPILE para apuntar las cadenas de herramientas que planea usar.
Después de compilar todos los archivos, puede ejecutar un ejemplo usando:
cd libonnx/examples/hello/output
./hello
Para ejecutar pruebas, por ejemplo en las de las tests/model de carpeta:
cd libonnx/tests/output
./tests ../modelAquí está la salida:
[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]Tenga en cuenta que ejecutar la prueba en las otras carpetas puede no tener éxito. Algunos operadores no se han implementado, busque la sección de notas para obtener más información.
opset 23 más nuevo. La tabla de operador compatible en el directorio de documentos.tools para obtener ayuda con los archivos del modelo ONNX.xxd -i <filename.onnx> (en Linux) para convertir su modelo ONNX en una unsigned char array y luego usar la función onnx_context_alloc para usarlo. Así es como se cargan los modelos en los ejemplos: hello y mnist . Esta biblioteca es un software gratuito; Puede redistribuirlo y modificarlo bajo los términos de la licencia MIT. Vea la licencia del MIT para más detalles.