Qu'est-ce que TensorFlow Lite ?
TensorFlow Lite est une version allégée de TensorFlow, conçue pour les appareils mobiles et embarqués comme l'ESP32, permettant aux modèles d'apprentissage automatique de fonctionner sur du matériel aux ressources limitées.
Étapes pour déployer sur ESP32
Voici comment faire fonctionner un modèle d'apprentissage automatique sur votre ESP32 :
Former un modèle
Entraînez un réseau de neurones simple, comme la prédiction des valeurs de sinus, en utilisant Python et Keras sur votre PC. Installez TensorFlow avec :
-
Commande : pip install tensorflow
-
Exemple de code :
importer numpy en tant que np import tensorflow as tf de tensorflow import keras angles = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(angles) model = keras.Sequential([keras.layers.Dense(1, input_shape=(1,))]) model.compile(optimizer='adam', loss='erreur quadratique moyenne') model.fit(angles, sines, epochs=100, verbose=0) model.save('sine_model.h5')
✔ Copié !
Convertir en TensorFlow Lite
Convertir le modèle entraîné au format .tflite :
-
Installer l'outil : pip install tflite
-
Convertir : tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
Configurer ESP32
Utilisez l'IDE Arduino pour le développement ESP32. Installez le support ESP32 :
-
Ajouter une URL : http://dl.espressif.com/dl/package_esp32_index.json dans les Préférences.
-
Installer via le gestionnaire de cartes.
-
Ajouter la bibliothèque tflite-micro depuis le dépôt GitHub aux bibliothèques Arduino.
Intégrer et exécuter
Convertir .tflite en tableau C : xxd -i sine_model.tflite > sine_model.h. Utilisez ce sketch Arduino :
-
Code:
#include #include "tflite-micro.h" #include "sine_model.h" tflite::MicroErrorReporter micro_error_reporter; tflite::ErrorReporter* error_reporter = µ_error_reporter; const unsigned char* model_data = sine_model; const size_t taille_modèle = sine_model_len; const tflite::Model* model = tflite::GetModel(model_data); tflite::AllOpsResolver résolveur; constexpr int kTensorArenaSize = 2000; uint8_t tensor_arena[kTensorArenaSize]; tflite::MicroInterpreter interprète (modèle, résolveur, tensor_arène, kTensorArenaSize, rapporteur_d'erreurs); float randomFloat(float min, float max) { return min + (max - min) * (float)random(0, 10000) / 10000.0; } void setup() { Serial.begin(115200); interpreter.AllocateTensors(); } boucle vide() { float angle = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = angle; si (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Échec de l'invocation du modèle"); retour; } TfLiteTensor* output = interpreter.output(0); float prediction = output->data.f[0]; Serial.print("Angle : "); Serial.print(angle); Serial.print(", Sinus prédit : "); Serial.println(prédiction); délai(1000); }
✔ Copié !
-
Téléchargez sur ESP32, ouvrez le Moniteur Série pour voir les résultats.
Détail inattendu
Vous ne vous attendriez peut-être pas à ce que la fonction de flottant aléatoire utilise une simple mise à l'échelle de random(0, 10000), ce qui peut ne pas être le plus précis pour l'apprentissage automatique, mais fonctionne pour cet exemple.
Déploiement de TensorFlow Lite sur ESP32
Cette analyse complète explore le déploiement de TensorFlow Lite sur le microcontrôleur ESP32, détaillant le processus depuis l'entraînement du modèle jusqu'à son exécution, basée sur la recherche et la mise en œuvre pratique. L'accent est mis sur la fourniture d'un guide approfondi pour les développeurs, garantissant que toutes les étapes sont claires et réalisables, avec des considérations pour les contraintes de mémoire et l'intégration des bibliothèques.
Contexte et arrière-plan
TensorFlow Lite, une version allégée de TensorFlow, est conçue pour exécuter des modèles d'apprentissage automatique sur des appareils aux ressources limitées, tels que les téléphones mobiles, les systèmes embarqués et les microcontrôleurs. L'ESP32, développé par Espressif, est un microcontrôleur populaire doté de capacités Wi-Fi et Bluetooth, ce qui le rend idéal pour les applications IoT. Exécuter des modèles d'apprentissage automatique localement sur l'ESP32 améliore la confidentialité, réduit la latence et diminue les coûts en évitant la dépendance au cloud.
Le processus implique l'entraînement d'un modèle sur un PC, sa conversion au format TensorFlow Lite, la configuration de l'environnement de développement ESP32, l'intégration du modèle, et son exécution pour observer les résultats. Cette analyse couvre chaque étape, en abordant les défis potentiels et en fournissant des exemples de code détaillés.
Étapes détaillées pour le déploiement
Étape 1 : Entraînement d'un modèle d'apprentissage automatique
La première étape consiste à entraîner un modèle d'apprentissage automatique en utilisant un ordinateur de bureau ou un serveur disposant d'une puissance de calcul suffisante. Pour cet exemple, nous entraînons un réseau neuronal simple pour prédire le sinus d'un angle donné, en utilisant Python et l'API Keras.
-
Installation : Installez TensorFlow avec la commande pip install tensorflow.
-
Code d'entraînement : Le code suivant génère un jeu de données et entraîne le modèle :
importer numpy en tant que np import tensorflow as tf de tensorflow import keras # Générer un ensemble de données angles = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(angles) # Créer un modèle de réseau neuronal simple modèle = keras.Sequential([ keras.layers.Dense(1, input_shape=(1,)) ]) # Compiler le modèle model.compile(optimizer='adam', loss='erreur quadratique moyenne') # Entraîner le modèle model.fit(angles, sines, epochs=100, verbose=0) # Enregistrer le modèle model.save('sine_model.h5')
✔ Copié !
-
Notes : Ce modèle est simple, avec une couche dense, adapté aux ressources limitées de l'ESP32. Le jeu de données se compose de 1000 angles aléatoires et de leurs valeurs de sinus, entraîné pendant 100 époques avec l'optimiseur Adam et la perte d'erreur quadratique moyenne.
Étape 2 : Conversion du modèle au format TensorFlow Lite
Après l'entraînement, convertissez le modèle au format TensorFlow Lite (.tflite) pour le déploiement sur des appareils aux ressources limitées.
-
Installation : Installez l'outil de conversion avec pip install tflite.
-
Commande de conversion : Utilisez ce qui suit pour convertir :
tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
✔ Copié !
-
Détails : Le fichier .tflite est optimisé pour la taille et la performance, ce qui est crucial pour les microcontrôleurs comme l'ESP32 avec une mémoire flash et RAM limitées.
Étape 3 : Configuration de l'environnement de développement ESP32
Utilisez l'IDE Arduino pour le développement ESP32, en vous assurant que le support de la carte et les bibliothèques nécessaires sont installés.
-
Support de la carte ESP32 :Ouvrez l'IDE Arduino, allez dans Fichier > Préférences, et ajoutez http://dl.espressif.com/dl/package_esp32_index.json vers des URL supplémentaires du gestionnaire de cartes.Allez dans Outils > Carte > Gestionnaire de cartes, recherchez "esp32" et installez la dernière version.
-
Bibliothèque TensorFlow Lite Micro :Téléchargez depuis le dépôt GitHub et ajoutez-le au répertoire des bibliothèques Arduino, ou utilisez le gestionnaire de bibliothèques si disponible.Assurez la compatibilité avec ESP32, car Espressif offre un support spécifique pour tflite-micro.
Étape 4 : Intégration du modèle dans le code ESP32
Intégrez le modèle en convertissant le fichier .tflite en un tableau C et en écrivant un sketch Arduino pour le charger et l'exécuter.
-
Convertir en tableau C : Utilisez xxd -i sine_model.tflite > sine_model.h pour générer un fichier d'en-tête contenant les données du modèle sous forme de tableau C, généralement :
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);
Sketch Arduino : Le code suivant charge et exécute le modèle :
#include #include "tflite-micro.h" #include "sine_model.h" tflite::MicroErrorReporter micro_error_reporter; tflite::ErrorReporter* error_reporter = µ_error_reporter; const unsigned char* model_data = sine_model; const size_t taille_modèle = sine_model_len; const tflite::Model* model = tflite::GetModel(model_data); tflite::AllOpsResolver résolveur; constexpr int kTensorArenaSize = 2000; uint8_t tensor_arena[kTensorArenaSize]; tflite::MicroInterpreter interprète (modèle, résolveur, tensor_arène, kTensorArenaSize, rapporteur_d'erreurs); float randomFloat(float min, float max) { return min + (max - min) * (float)random(0, 10000) / 10000.0; } void setup() { Serial.begin(115200); interpreter.AllocateTensors(); } boucle vide() { float angle = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = angle; si (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Échec de l'invocation du modèle"); retour; } TfLiteTensor* output = interpreter.output(0); float prediction = output->data.f[0]; Serial.print("Angle : "); Serial.print(angle); Serial.print(", Sinus prédit : "); Serial.println(prédiction); délai(1000); }
✔ Copié !
-
Notes : La fonction randomFloat génère des angles aléatoires pour les tests, en utilisant une méthode de mise à l'échelle simple. La taille de l'arène tensorielle (2000 octets) peut nécessiter un ajustement pour des modèles plus grands, compte tenu des 520 Ko de SRAM de l'ESP32.
Étape 5 : Télécharger et exécuter le code
Compilez et téléversez le croquis en utilisant l'IDE Arduino, puis ouvrez le Moniteur Série pour observer les résultats, tels que les angles et les valeurs sinusoïdales prédites.
-
Procédure : Assurez-vous que la carte est correctement sélectionnée (par exemple, ESP32 Dev Module), compilez et téléversez. Ouvrez le Moniteur Série à 115200 bauds pour voir les sorties.
Considérations et défis potentiels
-
Contraintes de mémoire : l'ESP32 dispose de 520 Ko de SRAM et d'une mémoire flash limitée, assurez-vous donc que le modèle et l'arène de tenseurs tiennent dans ces limites. Optimisez en réduisant la complexité du modèle ou en augmentant la taille de l'arène de tenseurs si nécessaire.
-
Compatibilité de la bibliothèque : Assurez-vous que la version de la bibliothèque tflite-micro correspond aux exigences de l'ESP32, car Espressif fournit un support spécifique.
-
Génération de nombres aléatoires : La fonction randomFloat utilise une méthode de mise à l'échelle simple, qui peut ne pas être précise pour toutes les applications. Envisagez d'utiliser un générateur de nombres aléatoires plus robuste pour la production.
Étape | Description | Exemple de commande/code |
Installer TensorFlow | Installer TensorFlow pour l'entraînement du modèle | pip installer tensorflow |
Modèle de train | Entraîner un modèle de prédiction sinusoïdale avec Keras | Voir le code Python ci-dessus |
Convertir le modèle | Convertir au format TensorFlow Lite | tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite |
Convertir en tableau C | Générer l'en-tête C pour les données du modèle | xxd -i sine_model.tflite > sine_model.h |
Configurer ESP32 | Installer le support de carte ESP32 et la bibliothèque tflite-micro | Ajouter une URL http://dl.espressif.com/dl/package_esp32_index.json, installer via le Gestionnaire de Cartes |
Fonctionne sur ESP32 | Croquis Arduino pour charger et exécuter un modèle | Voir le code C++ ci-dessus |
Observation inattendue
Vous ne vous attendriez peut-être pas à ce que la fonction de flottant aléatoire utilise une simple mise à l'échelle de random(0, 10000), ce qui peut ne pas être le plus précis pour l'apprentissage automatique, mais fonctionne pour cet exemple, mettant en évidence les compromis dans les systèmes embarqués.
Conclusion
Ce guide fournit un processus complet pour déployer TensorFlow Lite sur ESP32, depuis l'entraînement d'un modèle simple de prédiction sinusoïdale jusqu'à son exécution locale. Il ouvre des possibilités pour des dispositifs IoT intelligents, avec des considérations pour la mémoire et l'intégration des bibliothèques garantissant une mise en œuvre pratique.
Citations clés