TensorFlow Lite auf ESP32
25 Feb 2025
0 Kommentare
Was ist TensorFlow Lite?
TensorFlow Lite ist eine leichtgewichtige Version von TensorFlow, die für mobile und eingebettete Geräte wie ESP32 entwickelt wurde und es ermöglicht, maschinelles Lernen-Modelle auf hardwarebeschränkten Geräten auszuführen.
Schritte zur Bereitstellung auf ESP32
So bringen Sie ein Machine-Learning-Modell auf Ihrem ESP32 zum Laufen:
Trainieren eines Modells
Trainiere ein einfaches neuronales Netzwerk, wie das Vorhersagen von Sinuswerten, mit Python und Keras auf deinem PC. Installiere TensorFlow mit:
-
Befehl: pip install tensorflow
-
Beispielcode:
importiere Numpy als np import tensorflow as tf von tensorflow import keras winkel = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(Winkel) modell = 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')
✔ Kopiert!
In TensorFlow Lite konvertieren
Konvertieren Sie das trainierte Modell in das .tflite-Format:
-
Installationswerkzeug: pip install tflite
-
Konvertieren: tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
ESP32 einrichten
Verwenden Sie die Arduino IDE für die ESP32-Entwicklung. Installieren Sie die ESP32-Unterstützung:
-
URL hinzufügen: http://dl.espressif.com/dl/package_esp32_index.json in den Einstellungen.
-
Über den Board-Manager installieren.
-
Fügen Sie die tflite-micro-Bibliothek aus dem GitHub-Repository zu den Arduino-Bibliotheken hinzu.
Integrieren und ausführen
Konvertiere .tflite in C-Array: xxd -i sine_model.tflite > sine_model.h. Verwende diesen Arduino-Sketch:
-
Code:
#include #include "tflite-micro.h" #include "sine_model.h" tflite::MicroErrorReporter mikro_fehler_berichtserstatter; 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 resolver; constexpr int kTensorArenaSize = 2000; uint8_t tensor_arena[kTensorArenaSize]; tflite::MicroInterpreter interpreter(model, resolver, tensor_arena, kTensorArenaSize, error_reporter); float randomFloat(float min, float max) { return min + (max - min) * (float)random(0, 10000) / 10000.0; } void setup() { Serial.begin(115200); interpreter.AllocateTensors(); } void schleife() { float winkel = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = winkel; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Modellaufruf fehlgeschlagen"); zurückkehren; } TfLiteTensor* output = interpreter.output(0); float vorhersage = output->data.f[0]; Serial.print("Winkel: "); Serial.print(Winkel); Serial.print(", Vorhergesagte Sinus: "); Serial.println(Vorhersage); Verzögerung (1000); }
✔ Kopiert!
-
Laden Sie auf ESP32 hoch, öffnen Sie den Serial Monitor, um die Ergebnisse zu sehen.
Unerwartetes Detail
Man könnte nicht erwarten, dass die Funktion random float eine einfache Skalierung von random(0, 10000) verwendet, die möglicherweise nicht die genaueste für ML ist, aber für dieses Beispiel funktioniert.
TensorFlow Lite auf ESP32 bereitstellen
Diese umfassende Analyse untersucht den Einsatz von TensorFlow Lite auf dem ESP32-Mikrocontroller und beschreibt den Prozess von der Modellerstellung bis zur Ausführung, basierend auf Forschung und praktischer Umsetzung. Der Fokus liegt darauf, Entwicklern einen ausführlichen Leitfaden zu bieten, der sicherstellt, dass alle Schritte klar und umsetzbar sind, unter Berücksichtigung von Speicherbeschränkungen und der Integration von Bibliotheken.
Hintergrund und Kontext
TensorFlow Lite, eine leichtgewichtige Version von TensorFlow, ist dafür konzipiert, maschinelle Lernmodelle auf ressourcenbeschränkten Geräten wie Mobiltelefonen, eingebetteten Systemen und Mikrocontrollern auszuführen. Der ESP32, entwickelt von Espressif, ist ein beliebter Mikrocontroller mit Wi-Fi- und Bluetooth-Funktionen, was ihn ideal für IoT-Anwendungen macht. Das lokale Ausführen von maschinellen Lernmodellen auf dem ESP32 verbessert die Privatsphäre, reduziert die Latenz und senkt die Kosten, indem die Abhängigkeit von der Cloud vermieden wird.
Der Prozess umfasst das Trainieren eines Modells auf einem PC, die Umwandlung in das TensorFlow Lite-Format, die Einrichtung der ESP32-Entwicklungsumgebung, die Integration des Modells und das Ausführen, um die Ergebnisse zu beobachten. Diese Analyse behandelt jeden Schritt, geht auf potenzielle Herausforderungen ein und bietet detaillierte Codebeispiele.
Detaillierte Schritte für die Bereitstellung
Schritt 1: Ein Machine Learning Modell trainieren
Der erste Schritt besteht darin, ein Machine-Learning-Modell mit einem Desktop oder Server mit ausreichender Rechenleistung zu trainieren. In diesem Beispiel trainieren wir ein einfaches neuronales Netzwerk, um den Sinus eines gegebenen Winkels vorherzusagen, unter Verwendung von Python und der Keras-API.
-
Installation: Installieren Sie TensorFlow mit dem Befehl pip install tensorflow.
-
Trainingscode: Der folgende Code generiert einen Datensatz und trainiert das Modell:
importiere Numpy als np import tensorflow as tf von tensorflow import keras # Datensatz generieren winkel = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(Winkel) # Erstelle ein einfaches neuronales Netzwerkmodell modell = keras.Sequential([ keras.layers.Dense(1, input_shape=(1,)) ]) # Kompilieren Sie das Modell model.compile(optimizer='adam', loss='mean_squared_error') # Trainieren Sie das Modell model.fit(angles, sines, epochs=100, verbose=0) # Speichern Sie das Modell model.save('sine_model.h5')
✔ Kopiert!
-
Hinweise: Dieses Modell ist einfach, mit einer dichten Schicht, geeignet für die begrenzten Ressourcen des ESP32. Der Datensatz besteht aus 1000 zufälligen Winkeln und ihren Sinuswerten, trainiert über 100 Epochen mit dem Adam-Optimierer und dem Verlust der mittleren quadratischen Abweichung.
Schritt 2: Konvertierung des Modells in das TensorFlow Lite-Format
Nach dem Training das Modell in das TensorFlow Lite-Format (.tflite) konvertieren, um es auf ressourcenbeschränkten Geräten bereitzustellen.
-
Installation: Installieren Sie das Konvertierungstool mit pip install tflite.
-
Konvertierungsbefehl: Verwenden Sie Folgendes zur Konvertierung:
Schlag
tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
✔ Kopiert!
-
Details: Die .tflite-Datei ist für Größe und Leistung optimiert, was für Mikrocontroller wie den ESP32 mit begrenztem Flash-Speicher und RAM entscheidend ist.
Schritt 3: Einrichten der ESP32-Entwicklungsumgebung
Verwenden Sie die Arduino IDE für die ESP32-Entwicklung und stellen Sie sicher, dass die Board-Unterstützung und die erforderlichen Bibliotheken installiert sind.
-
ESP32-Board-Unterstützung:Öffnen Sie die Arduino IDE, gehen Sie zu Datei > Einstellungen und fügen Sie hinzu http://dl.espressif.com/dl/package_esp32_index.json zu zusätzlichen Board-Manager-URLs.Gehe zu Werkzeuge > Board > Boardverwalter, suche nach "esp32" und installiere die neueste Version.
-
TensorFlow Lite Micro-Bibliothek:Laden Sie von GitHub-Repository herunter und fügen Sie es dem Arduino-Bibliotheksverzeichnis hinzu, oder verwenden Sie den Bibliotheksmanager, falls verfügbar.Stellen Sie die Kompatibilität mit ESP32 sicher, da Espressif spezifische Unterstützung für tflite-micro bietet.
Schritt 4: Integration des Modells in den ESP32-Code
Integrieren Sie das Modell, indem Sie die .tflite-Datei in ein C-Array umwandeln und einen Arduino-Sketch schreiben, um es zu laden und auszuführen.
-
In C-Array umwandeln: Verwenden Sie xxd -i sine_model.tflite > sine_model.h, um eine Header-Datei zu generieren, die die Modelldaten als C-Array enthält, typischerweise:
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);
Arduino-Sketch: Der folgende Code lädt und führt das Modell aus:
#include #include "tflite-micro.h" #include "sine_model.h" tflite::MicroErrorReporter mikro_fehler_berichtserstatter; 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 resolver; constexpr int kTensorArenaSize = 2000; uint8_t tensor_arena[kTensorArenaSize]; tflite::MicroInterpreter interpreter(model, resolver, tensor_arena, kTensorArenaSize, error_reporter); float randomFloat(float min, float max) { return min + (max - min) * (float)random(0, 10000) / 10000.0; } void setup() { Serial.begin(115200); interpreter.AllocateTensors(); } void schleife() { float winkel = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = winkel; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Modellaufruf fehlgeschlagen"); zurückkehren; } TfLiteTensor* output = interpreter.output(0); float vorhersage = output->data.f[0]; Serial.print("Winkel: "); Serial.print(Winkel); Serial.print(", Vorhergesagte Sinus: "); Serial.println(Vorhersage); Verzögerung (1000); }
✔ Kopiert!
-
Hinweise: Die randomFloat-Funktion generiert zufällige Winkel für Tests, indem sie eine einfache Skalierungsmethode verwendet. Die Größe des Tensor-Arena (2000 Bytes) muss möglicherweise für größere Modelle angepasst werden, da der ESP32 über 520 KB SRAM verfügt.
Schritt 5: Code hochladen und ausführen
Kompilieren und laden Sie den Sketch mit der Arduino IDE hoch, und öffnen Sie dann den Serial Monitor, um Ergebnisse wie Winkel und vorhergesagte Sinuswerte zu beobachten.
-
Verfahren: Stellen Sie sicher, dass das Board korrekt ausgewählt ist (z.B. ESP32 Dev Module), kompilieren und hochladen. Öffnen Sie den Serial Monitor bei 115200 Baud, um die Ausgaben zu sehen.
Überlegungen und potenzielle Herausforderungen
-
Speicherbeschränkungen: Der ESP32 verfügt über 520 KB SRAM und begrenzten Flash-Speicher. Stellen Sie daher sicher, dass das Modell und der Tensorbereich innerhalb dieser Grenzen passen. Optimieren Sie, indem Sie die Modellkomplexität reduzieren oder die Größe des Tensorbereichs bei Bedarf erhöhen.
-
Bibliothekskompatibilität: Stellen Sie sicher, dass die Version der tflite-micro-Bibliothek den Anforderungen des ESP32 entspricht, da Espressif spezifische Unterstützung bietet.
-
Zufallszahlengenerierung: Die randomFloat-Funktion verwendet eine einfache Skalierungsmethode, die möglicherweise nicht für alle Anwendungen präzise ist. Ziehen Sie in Betracht, einen robusteren Zufallszahlengenerator für die Produktion zu verwenden.
Schritt | Beschreibung | Befehl/Codebeispiel |
Installieren Sie TensorFlow | Installieren Sie TensorFlow für das Modelltraining | pip install tensorflow |
Modell trainieren | Trainiere ein Sinusvorhersagemodell mit Keras | Siehe den obenstehenden Python-Code |
Modell konvertieren | In TensorFlow Lite-Format konvertieren | tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite |
In C-Array konvertieren | Generiere C-Header für Modelldaten | xxd -i sine_model.tflite > sine_model.h |
ESP32 einrichten | Installieren Sie die Unterstützung für das ESP32-Board und die tflite-micro-Bibliothek | URL hinzufügen http://dl.espressif.com/dl/package_esp32_index.json, über den Board-Manager installieren |
Läuft auf ESP32 | Arduino-Sketch zum Laden und Ausführen des Modells | Siehe C++-Code oben |
Unerwartete Beobachtung
Man könnte nicht erwarten, dass die Funktion random float eine einfache Skalierung von random(0, 10000) verwendet, die möglicherweise nicht die präziseste für maschinelles Lernen ist, aber für dieses Beispiel funktioniert und die Kompromisse in eingebetteten Systemen hervorhebt.
Abschluss
Dieser Leitfaden bietet einen umfassenden Prozess für die Bereitstellung von TensorFlow Lite auf ESP32, von der Schulung eines einfachen Sinusvorhersagemodells bis hin zur lokalen Ausführung. Er eröffnet Möglichkeiten für intelligente IoT-Geräte, wobei Überlegungen zu Speicher und Bibliotheksintegration eine praktische Implementierung gewährleisten.
Wichtige Zitate
Hinterlassen Sie einen Kommentar
Alle Blog-Kommentare werden vor der Veröffentlichung geprüft