TensorFlow Lite sur ESP32
25 Feb 2025
0 commentaires
Qu'est-ce que TensorFlow Lite ?
TensorFlow Lite est une version légère 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 à ressources limitées.
Étapes pour déployer sur ESP32
Voici comment faire fonctionner un modèle d'apprentissage automatique sur votre ESP32 :
Entraîner un modèle
Entraînez un réseau de neurones simple, comme la prédiction des valeurs sinusoïdales, 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) modèle = keras.Sequential([keras.layers.Dense(1, input_shape=(1,))]) model.compile(optimizer='adam', loss='mean_squared_error') 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.
-
Ajoutez 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 croquis 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 model_size = 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éteur(modèle, résolveur, arène_tensor, kTailleArèneTensor, rapporteur_d'erreurs); float randomFloat(float min, float max) { retourner min + (max - min) * (float)random(0, 10000) / 10000.0; } configuration vide() { Série.begin(115200); interpreter.AllouerTenseurs(); } boucle vide() { float angle = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = angle; if (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(", Sine prédit : "); Serial.println(prévision); délai(1000); }
✔ Copié !
-
Téléchargez sur l'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 un simple redimensionnement de random(0, 10000), ce qui peut ne pas être le plus précis pour l'apprentissage automatique, mais fonctionne pour cet exemple.
Déployer TensorFlow Lite sur ESP32
Cette analyse complète explore le déploiement de TensorFlow Lite sur le microcontrôleur ESP32, détaillant le processus de l'entraînement du modèle à l'exécution, basé sur des recherches et une mise en œuvre pratique. L'accent est mis sur la fourniture d'un guide complet 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 légère de TensorFlow, est conçu pour exécuter des modèles d'apprentissage automatique sur des appareils à 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 avec des 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 de former un modèle sur un PC, de le convertir au format TensorFlow Lite, de configurer l'environnement de développement ESP32, d'intégrer le modèle et de l'exécuter pour observer les résultats. Cette analyse couvre chaque étape, abordant les défis potentiels et fournissant des exemples de code détaillés.
Étapes détaillées pour le déploiement
Étape 1 : Entraîner 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 simple réseau de neurones 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 de formation : Le code suivant génère un ensemble 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 de neurones simple modèle = keras.Sequential([ keras.layers.Dense(1, input_shape=(1,)) ]) # Compiler le modèle model.compile(optimizer='adam', loss='mean_squared_error') # Entraîner le modèle model.fit(angles, sines, epochs=100, verbose=0) # Enregistrer le modèle model.save('sine_model.h5')
✔ Copié !
-
Remarques : Ce modèle est simple, avec une couche dense, adapté aux ressources limitées de l'ESP32. L'ensemble 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 à ressources limitées.
-
Installation : Installez l'outil de conversion avec pip install tflite.
-
Commande de conversion : Utilisez ce qui suit pour convertir :
frapper
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 les performances, 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 tableau.Allez dans Outils > Tableau > Gestionnaire de tableaux, 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-vous de la compatibilité avec l'ESP32, car Espressif fournit 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 croquis 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, typiquement :
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);
Arduino Sketch : 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 model_size = 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éteur(modèle, résolveur, arène_tensor, kTailleArèneTensor, rapporteur_d'erreurs); float randomFloat(float min, float max) { retourner min + (max - min) * (float)random(0, 10000) / 10000.0; } configuration vide() { Série.begin(115200); interpreter.AllouerTenseurs(); } boucle vide() { float angle = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = angle; if (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(", Sine prédit : "); Serial.println(prévision); 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 de tenseurs (2000 octets) peut nécessiter un ajustement pour des modèles plus grands, étant donné les 520 Ko de SRAM de l'ESP32.
Étape 5 : Téléchargez et exécutez le code
Compilez et téléchargez 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 de sinus prédites.
-
Procédure : Assurez-vous que la carte est sélectionnée correctement (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, donc assurez-vous que le modèle et l'arène de tenseurs s'inscrivent 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 de modèles | pip installer tensorflow |
Modèle de train | Entraîner un modèle de prédiction de sinus 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 un 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 la carte ESP32 et la bibliothèque tflite-micro | Ajouter une URL http://dl.espressif.com/dl/package_esp32_index.json, installez via le Gestionnaire de cartes |
Fonctionne sur ESP32 | Croquis Arduino pour charger et exécuter le 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 un simple redimensionnement 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, de l'entraînement d'un simple modèle de prédiction de sinus à son exécution localement. 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
laissez un commentaire
Tous les commentaires du blog sont vérifiés avant la publication