Comprendre la bibliothèque C++

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

La bibliothèque C++ TensorFlow Lite pour microcontrôleurs fait partie du référentiel TensorFlow . Il est conçu pour être lisible, facile à modifier, bien testé, facile à intégrer et compatible avec TensorFlow Lite standard.

Le document suivant décrit la structure de base de la bibliothèque C++ et fournit des informations sur la création de votre propre projet.

Structure du fichier

Le répertoire racine micro a une structure relativement simple. Cependant, comme il se trouve à l'intérieur du vaste référentiel TensorFlow, nous avons créé des scripts et des fichiers de projet pré-générés qui fournissent les fichiers source pertinents de manière isolée dans divers environnements de développement intégrés.

Fichiers clés

Les fichiers les plus importants pour utiliser l'interpréteur TensorFlow Lite for Microcontrollers sont situés à la racine du projet, accompagnés de tests :

  • all_ops_resolver.h ou micro_mutable_op_resolver.h peuvent être utilisés pour fournir les opérations utilisées par l'interpréteur pour exécuter le modèle. Étant donné que all_ops_resolver.h extrait toutes les opérations disponibles, il utilise beaucoup de mémoire. Dans les applications de production, vous devez utiliser micro_mutable_op_resolver.h pour extraire uniquement les opérations dont votre modèle a besoin.
  • micro_error_reporter.h des informations de débogage.
  • micro_interpreter.h contient du code pour gérer et exécuter des modèles.

Voir Premiers pas avec les microcontrôleurs pour une présentation de l'utilisation typique.

Le système de construction fournit des implémentations spécifiques à la plate-forme de certains fichiers. Ceux-ci sont situés dans un répertoire portant le nom de la plate-forme, par exemple sparkfun_edge .

Plusieurs autres répertoires existent, notamment :

  • kernel , qui contient les implémentations d'opérations et le code associé.
  • tools , qui contient les outils de construction et leur sortie.
  • examples , qui contient un exemple de code.

Démarrer un nouveau projet

Nous vous recommandons d'utiliser l'exemple Hello World comme modèle pour les nouveaux projets. Vous pouvez en obtenir une version pour la plateforme de votre choix en suivant les instructions de cette section.

Utiliser la bibliothèque Arduino

Si vous utilisez Arduino, l'exemple Hello World est inclus dans la bibliothèque Arduino_TensorFlowLite Arduino, que vous pouvez installer manuellement dans l'IDE Arduino et dans Arduino Create .

Une fois la bibliothèque ajoutée, allez dans File -> Examples . Vous devriez voir un exemple vers le bas de la liste nommé TensorFlowLite:hello_world . Sélectionnez-le et cliquez sur hello_world pour charger l'exemple. Vous pouvez ensuite enregistrer une copie de l'exemple et l'utiliser comme base de votre propre projet.

Générer des projets pour d'autres plateformes

TensorFlow Lite pour microcontrôleurs est capable de générer des projets autonomes contenant tous les fichiers source nécessaires, à l'aide d'un Makefile . Les environnements actuellement pris en charge sont Keil, Make et Mbed.

Pour générer ces projets avec Make, clonez le dépôt TensorFlow et exécutez la commande suivante :

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

Cela prendra quelques minutes, car il doit télécharger de grandes chaînes d'outils pour les dépendances. Une fois terminé, vous devriez voir des dossiers créés dans un chemin comme gen/linux_x86_64/prj/ (le chemin exact dépend de votre système d'exploitation hôte). Ces dossiers contiennent le projet généré et les fichiers source.

Après avoir exécuté la commande, vous pourrez trouver les projets Hello World dans gen/linux_x86_64/prj/hello_world . Par exemple, hello_world/keil contiendra le projet Keil.

Exécutez les tests

Pour créer la bibliothèque et exécuter tous ses tests unitaires, utilisez la commande suivante :

make -f tensorflow/lite/micro/tools/make/Makefile test

Pour exécuter un test individuel, utilisez la commande suivante, en remplaçant <test_name> par le nom du test :

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

Vous pouvez trouver les noms des tests dans les Makefiles du projet. Par exemple, examples/hello_world/Makefile.inc spécifie les noms de test pour l'exemple Hello World .

Construire des binaires

Pour construire un binaire exécutable pour un projet donné (comme un exemple d'application), utilisez la commande suivante, en remplaçant <project_name> par le projet que vous souhaitez construire :

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

Par exemple, la commande suivante construira un binaire pour l'application Hello World :

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

Par défaut, le projet sera compilé pour le système d'exploitation hôte. Pour spécifier une architecture cible différente, utilisez TARGET= . L'exemple suivant montre comment créer l'exemple Hello World pour SparkFun Edge :

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge hello_world_bin

Lorsqu'une cible est spécifiée, tous les fichiers source spécifiques à la cible disponibles seront utilisés à la place du code d'origine. Par exemple, le sous-répertoire examples/hello_world/sparkfun_edge contient les implémentations SparkFun Edge des fichiers constants.cc et output_handler.cc , qui seront utilisés lorsque la cible sparkfun_edge est spécifiée.

Vous pouvez trouver les noms de projet dans les Makefiles du projet. Par exemple, examples/hello_world/Makefile.inc spécifie les noms binaires pour l'exemple Hello World .

Noyaux optimisés

Les noyaux de référence à la racine de tensorflow/lite/micro/kernels sont implémentés en C/C++ pur et n'incluent pas d'optimisations matérielles spécifiques à la plate-forme.

Les versions optimisées des noyaux sont fournies dans des sous-répertoires. Par exemple, kernels/cmsis-nn contient plusieurs noyaux optimisés qui utilisent la bibliothèque CMSIS-NN d'Arm.

Pour générer des projets à l'aide de noyaux optimisés, utilisez la commande suivante, en remplaçant <subdirectory_name> par le nom du sous-répertoire contenant les optimisations :

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

Vous pouvez ajouter vos propres optimisations en créant un nouveau sous-dossier pour celles-ci. Nous encourageons les demandes d'extraction pour de nouvelles implémentations optimisées.

Générer la bibliothèque Arduino

Si vous devez générer une nouvelle version de la bibliothèque, vous pouvez exécuter le script suivant à partir du dépôt TensorFlow :

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

La bibliothèque résultante se trouve dans gen/arduino_x86_64/prj/tensorflow_lite.zip .

Port vers de nouveaux appareils

Des conseils sur le portage de TensorFlow Lite pour microcontrôleurs vers de nouvelles plates-formes et de nouveaux appareils sont disponibles dans micro/docs/new_platform_support.md .