Un inference engine onnx C99 Pure léger et portable pour les appareils intégrés avec support d'accélération matérielle.
Les fichiers .c et .h de la bibliothèque peuvent être déposés dans un projet et compilés avec. Avant l'utilisation, il faut être alloué struct onnx_context_t * et vous pouvez passer un tableau de struct resolver_t * pour l'accélération matérielle.
Le nom de fichier est le chemin du format du modèle onnx .
struct onnx_context_t * ctx = onnx_context_alloc_from_file ( filename , NULL , 0 ); Ensuite, vous pouvez obtenir le tenseur d'entrée et de sortie à l'aide de la fonction 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" ); Lorsque le tenseur d'entrée a été réglé, vous pouvez exécuter le moteur d'inférence à l'aide de la fonction onnx_run et le résultat mettra dans le tenseur de sortie.
onnx_run ( ctx ); Enfin, vous devez libérer struct onnx_context_t * à l'aide de la fonction onnx_context_free .
onnx_context_free ( ctx ); Tapez simplement make au répertoire racine, vous verrez une bibliothèque statique et un binaire d'exemples et de tests d'utilisation.
cd libonnx
make Pour compiler l'exemple mnist , vous devrez installer SDL2 et SDL2 GFX. Sur des systèmes comme Ubuntu Run
apt-get install libsdl2-dev libsdl2-gfx-devPour installer les bibliothèques de couche directes simples requises pour exécuter l'interface graphique.
arm64 ) Exécutez make CROSS_COMPILE=path/to/toolchains/aarch64-linux-gnu- au répertoire racine pour compiler toutes les bibliothèques, tests et exemples pour la plate-forme.
Modifiez CROSS_COMPILE pour pointer les chaînes d'outils que vous prévoyez d'utiliser.
Après avoir compilé tous les fichiers, vous pouvez exécuter un exemple en utilisant:
cd libonnx/examples/hello/output
./hello
Pour exécuter des tests, par exemple sur ceux des tests/model Utilisation du dossier:
cd libonnx/tests/output
./tests ../modelVoici la sortie:
[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]Notez que l'exécution du test sur les autres dossiers peut ne pas réussir. Certains opérateurs n'ont pas été mis en œuvre, regardez la section des notes pour plus d'informations.
opset 23 . Le tableau des opérateurs pris en charge dans le répertoire des documents.tools pour obtenir de l'aide avec les fichiers du modèle ONNX.xxd -i <filename.onnx> (sur Linux) pour convertir votre modèle ONNX en un unsigned char array , puis utiliser la fonction onnx_context_alloc pour l'utiliser. C'est ainsi que les modèles sont chargés dans les exemples - hello et mnist . Cette bibliothèque est un logiciel libre; Vous pouvez le redistribuer et le modifier selon les termes de la licence MIT. Voir la licence MIT pour plus de détails.