TensorFlow Lite Op ESP32
25 Feb 2025
0 Opmerkingen
Wat is TensorFlow Lite?
TensorFlow Lite is een lichte versie van TensorFlow, ontworpen voor mobiele en embedded apparaten zoals de ESP32, waardoor machine learning-modellen kunnen draaien op hardware met beperkte middelen.
Stappen om te implementeren op ESP32
Hier is hoe je een machine learning model kunt laten draaien op je ESP32:
Train een model
Train een eenvoudig neuraal netwerk, zoals het voorspellen van sinuswaarden, met Python en Keras op je pc. Installeer TensorFlow met:
-
Opdracht: pip install tensorflow
-
Voorbeeldcode:
importeer numpy als np import tensorflow as tf van tensorflow import keras hoeken = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(hoeken) model = keras.Sequential([keras.layers.Dense(1, input_shape=(1,))]) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(hoeken, sinussen, epochs=100, verbose=0) model.save('sine_model.h5')
✔ Gekopieerd!
Converteren naar TensorFlow Lite
Converteer het getrainde model naar .tflite-formaat:
-
Installeer tool: pip install tflite
-
Converteer: tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
ESP32 instellen
Gebruik Arduino IDE voor ESP32-ontwikkeling. Installeer ESP32-ondersteuning:
-
URL toevoegen: http://dl.espressif.com/dl/package_esp32_index.json in Voorkeuren.
-
Installeer via Board Manager.
-
Voeg de tflite-micro bibliotheek toe van GitHub-repository aan de Arduino-bibliotheken toe.
Integreren en uitvoeren
Converteer .tflite naar C-array: xxd -i sine_model.tflite > sine_model.h. Gebruik deze Arduino-schets:
-
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 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; } lege instellingen() { Serial.begin(115200); interpreter.AllocateTensors(); } lege lus() { float hoek = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = hoek; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Kon model niet aanroepen"); opbrengst; } TfLiteTensor* output = interpreter.output(0); float voorspelling = output->data.f[0]; Serial.print("Hoek: "); Serial.print(angle); Serial.print(", Voorspelde sinus: "); Serial.println(voorspelling); vertraging(1000); }
✔ Gekopieerd!
-
Uploaden naar ESP32, open de Seriële Monitor om de resultaten te zien.
Onverwachte details
Je zou misschien niet verwachten dat de random float functie een eenvoudige schaling van random(0, 10000) gebruikt, wat misschien niet de meest nauwkeurige is voor ML, maar werkt voor dit voorbeeld.
TensorFlow Lite implementeren op ESP32
Deze uitgebreide analyse verkent het inzetten van TensorFlow Lite op de ESP32-microcontroller, waarbij het proces van modeltraining tot uitvoering wordt gedetailleerd, gebaseerd op onderzoek en praktische implementatie. De focus ligt op het bieden van een grondige gids voor ontwikkelaars, waarbij ervoor gezorgd wordt dat alle stappen duidelijk en uitvoerbaar zijn, met aandacht voor geheugengebreken en bibliotheekintegratie.
Achtergrond en Context
TensorFlow Lite, een lichte versie van TensorFlow, is ontworpen voor het uitvoeren van machine learning-modellen op apparaten met beperkte middelen, zoals mobiele telefoons, embedded systemen en microcontrollers. De ESP32, ontwikkeld door Espressif, is een populaire microcontroller met Wi-Fi- en Bluetooth-mogelijkheden, waardoor het ideaal is voor IoT-toepassingen. Het lokaal uitvoeren van machine learning-modellen op de ESP32 verbetert de privacy, vermindert de latentie en verlaagt de kosten door afhankelijkheid van de cloud te vermijden.
Het proces omvat het trainen van een model op een pc, het omzetten naar TensorFlow Lite-formaat, het opzetten van de ESP32-ontwikkelomgeving, het integreren van het model en het uitvoeren ervan om de resultaten te observeren. Deze analyse behandelt elke stap, gaat in op mogelijke uitdagingen en biedt gedetailleerde codevoorbeelden.
Gedetailleerde Stappen voor Implementatie
Stap 1: Een Machine Learning Model Trainen
De eerste stap is het trainen van een machine learning-model met behulp van een desktop of server met voldoende rekenkracht. Voor dit voorbeeld trainen we een eenvoudig neuraal netwerk om de sinus van een gegeven hoek te voorspellen, met behulp van Python en de Keras API.
-
Installatie: Installeer TensorFlow met de opdracht pip install tensorflow.
-
Trainingscode: De volgende code genereert een dataset en traint het model:
importeer numpy als np import tensorflow as tf van tensorflow import keras # Dataset genereren hoeken = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(hoeken) # Maak een eenvoudig neuraal netwerkmodel model = keras.Sequential([ keras.layers.Dense(1, input_shape=(1,)) ]) # Compileer het model model.compile(optimizer='adam', loss='mean_squared_error') # Train het model model.fit(hoeken, sinussen, epochs=100, verbose=0) # Sla het model op model.save('sine_model.h5')
✔ Gekopieerd!
-
Notities: Dit model is eenvoudig, met één dichte laag, geschikt voor de beperkte middelen van de ESP32. De dataset bestaat uit 1000 willekeurige hoeken en hun sinuswaarden, getraind voor 100 epochs met de Adam-optimizer en de mean squared error-verliesfunctie.
Stap 2: Het model omzetten naar TensorFlow Lite-indeling
Na de training, converteer het model naar TensorFlow Lite-formaat (.tflite) voor implementatie op apparaten met beperkte middelen.
-
Installatie: Installeer de conversietool met pip install tflite.
-
Conversieopdracht: Gebruik het volgende om te converteren:
bashen
tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
✔ Gekopieerd!
-
Details: Het .tflite-bestand is geoptimaliseerd voor grootte en prestaties, cruciaal voor microcontrollers zoals de ESP32 met beperkte flash en RAM.
Stap 3: Het instellen van de ESP32-ontwikkelomgeving
Gebruik de Arduino IDE voor ESP32-ontwikkeling, zorg ervoor dat de bordondersteuning en de benodigde bibliotheken zijn geïnstalleerd.
-
ESP32 Bordondersteuning:Open Arduino IDE, ga naar Bestand > Voorkeuren, en voeg toe http://dl.espressif.com/dl/package_esp32_index.json naar aanvullende URL's van het bestuursbeheer.Ga naar Hulpmiddelen > Bord > Bordbeheer, zoek naar "esp32" en installeer de nieuwste versie.
-
TensorFlow Lite Micro Bibliotheek:Download van GitHub-repository en voeg toe aan de Arduino-bibliotheekdirectory, of gebruik de Bibliotheekbeheerder als deze beschikbaar is.Zorg voor compatibiliteit met ESP32, aangezien Espressif specifieke ondersteuning biedt voor tflite-micro.
Stap 4: Het model integreren in ESP32-code
Integreer het model door het .tflite-bestand om te zetten naar een C-array en een Arduino-schets te schrijven om het te laden en uit te voeren.
-
Converteer naar C-array: Gebruik xxd -i sine_model.tflite > sine_model.h om een headerbestand te genereren dat de modelgegevens als een C-array bevat, typisch:
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);
Arduino Sketch: De volgende code laadt en voert het model uit:
#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 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; } lege instellingen() { Serial.begin(115200); interpreter.AllocateTensors(); } lege lus() { float hoek = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = hoek; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Kon model niet aanroepen"); opbrengst; } TfLiteTensor* output = interpreter.output(0); float voorspelling = output->data.f[0]; Serial.print("Hoek: "); Serial.print(angle); Serial.print(", Voorspelde sinus: "); Serial.println(voorspelling); vertraging(1000); }
✔ Gekopieerd!
-
Notities: De randomFloat functie genereert willekeurige hoeken voor testen, met behulp van een eenvoudige schaalmethode. De tensor arena grootte (2000 bytes) moet mogelijk worden aangepast voor grotere modellen, gezien de 520 KB SRAM van de ESP32.
Stap 5: Upload en voer de code uit
Compileer en upload de sketch met Arduino IDE, open vervolgens de Seriële Monitor om resultaten te observeren, zoals hoeken en voorspelde sinuswaarden.
-
Procedure: Zorg ervoor dat het bord correct is geselecteerd (bijv. ESP32 Dev Module), compileer en upload. Open de Seriële Monitor op 115200 baud om de uitvoer te zien.
Overwegingen en Potentiële Uitdagingen
-
Geheugenbeperkingen: ESP32 heeft 520 KB SRAM en beperkte flash, dus zorg ervoor dat het model en de tensorarena binnen deze limieten passen. Optimaliseer door de modelcomplexiteit te verminderen of de grootte van de tensorarena te vergroten indien nodig.
-
Bibliotheekcompatibiliteit: Zorg ervoor dat de tflite-micro bibliotheekversie overeenkomt met de vereisten van de ESP32, aangezien Espressif specifieke ondersteuning biedt.
-
Willekeurige Getalgeneratie: De randomFloat functie gebruikt een eenvoudige schaalmethode, die mogelijk niet nauwkeurig is voor alle toepassingen. Overweeg om een robuustere willekeurige getalgenerator te gebruiken voor productie.
Stap | Beschrijving | Opdracht/Code Voorbeeld |
TensorFlow installeren | Installeer TensorFlow voor modeltraining | pip install tensorflow |
Treinmodel | Train een sinusvoorspellingsmodel met Keras | Zie de bovenstaande Python-code |
Model converteren | Converteer naar TensorFlow Lite-formaat | tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite |
Converteren naar C-array | Genereer C-header voor modelgegevens | xxd -i sine_model.tflite > sine_model.h |
ESP32 instellen | Installeer de ESP32-bordondersteuning en de tflite-micro bibliotheek | URL toevoegen http://dl.espressif.com/dl/package_esp32_index.json, installeer via Board Manager |
Draait op ESP32 | Arduino-schets om model te laden en uit te voeren | Zie C++-code hierboven |
Onverwachte Waarneming
Je zou misschien niet verwachten dat de random float functie een eenvoudige schaling van random(0, 10000) gebruikt, wat misschien niet de meest nauwkeurige is voor machine learning, maar werkt voor dit voorbeeld en benadrukt de afwegingen in embedded systemen.
Conclusie
Deze gids biedt een uitgebreid proces voor het implementeren van TensorFlow Lite op ESP32, van het trainen van een eenvoudig sinusvoorspellingsmodel tot het lokaal uitvoeren ervan. Het opent mogelijkheden voor intelligente IoT-apparaten, met aandacht voor geheugen en bibliotheekintegratie die een praktische implementatie waarborgen.
Belangrijkste citaten
laat een reactie achter
Alle blogreacties worden vóór publicatie gecontroleerd