TensorFlow Lite Op ESP32

Wat is TensorFlow Lite?

TensorFlow Lite is een lichtgewicht versie van TensorFlow, ontworpen voor mobiele en ingebedde apparaten zoals ESP32, waarmee machine learning-modellen kunnen draaien op hardware met beperkte middelen.

Stappen om te implementeren op ESP32

Hier leest u hoe u een machine learning-model op uw ESP32 kunt laten draaien:

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 als tf
    van tensorflow importeer 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:

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 willekeurigeFloat(float min, float max) {
        return min + (max - min) * (float)random(0, 10000) / 10000.0;
    }
    
    lege setup() {
        Serial.begin(115200);
        interpreter.AllocateTensors();
    }
    
    lege lus() {
        float hoek = randomFloat(-3.1416, 3.1416);
        TfLiteTensor* invoer = interpreter.input(0);
        input->data.f[0] = hoek;
        if (interpreter.Invoke() != kTfLiteOk) {
            error_reporter->Report("Mislukt om model aan te roepen");
            opbrengst;
        }
        TfLiteTensor* output = interpreter.output(0);
        float voorspelling = output->data.f[0];
        Serial.print("Hoek: ");
        Serial.print(hoek);
        Serial.print(", Voorspelde sinus: ");
        Serial.println(voorspelling);
        vertraging(1000);
    }
        
      
    ✔ Gekopieerd!
  • Upload naar ESP32, open de Seriële Monitor om de resultaten te zien.

Onverwachte details

Je zou niet verwachten dat de willekeurige float-functie een eenvoudige schaalverdeling van random(0, 10000) gebruikt, wat misschien niet het meest nauwkeurig is voor ML, maar wel werkt voor dit voorbeeld.

TensorFlow Lite implementeren op ESP32

Deze uitgebreide analyse onderzoekt het inzetten van TensorFlow Lite op de ESP32-microcontroller, waarbij het proces van modeltraining tot uitvoering wordt beschreven, gebaseerd op onderzoek en praktische implementatie. De focus ligt op het bieden van een grondige gids voor ontwikkelaars, waarbij alle stappen duidelijk en uitvoerbaar zijn, met aandacht voor geheugenbeperkingen en bibliotheekintegratie.

Achtergrond en Context

TensorFlow Lite, een lichtere 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 converteren ervan naar het 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: Het trainen van een machine learning-model

De eerste stap is het trainen van een machine learning-model met 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 het commando pip install tensorflow.
  • Trainingscode: De volgende code genereert een dataset en traint het model:
    importeer numpy als np
    import tensorflow als tf
    van tensorflow importeer 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!
  • Opmerkingen: Dit model is eenvoudig, met één dense laag, geschikt voor de beperkte middelen van de ESP32. De dataset bestaat uit 1000 willekeurige hoeken en hun sinuswaarden, getraind gedurende 100 epochs met de Adam-optimizer en mean squared error verlies.

Stap 2: Het model converteren naar TensorFlow Lite-formaat

Na het trainen, converteer het model naar het 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:
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 ESP32 met beperkte flash en RAM.

Stap 3: Het opzetten van de ESP32-ontwikkelomgeving

Gebruik de Arduino IDE voor ESP32-ontwikkeling, zorg ervoor dat de bordondersteuning en benodigde bibliotheken zijn geïnstalleerd.
  • ESP32 Boardondersteuning:
      Open Arduino IDE, ga naar Bestand > Voorkeuren, en voeg toe http://dl.espressif.com/dl/package_esp32_index.json naar Extra Board Manager-URL's.
      Ga naar Gereedschappen > Bord > Bordbeheer, zoek naar "esp32" en installeer de nieuwste versie.
  • TensorFlow Lite Micro Bibliotheek:
      Download van GitHub repository en voeg toe aan de Arduino bibliotheekmap, of gebruik Library Manager indien beschikbaar.
      Zorg voor compatibiliteit met ESP32, aangezien Espressif specifieke ondersteuning biedt voor tflite-micro.

Stap 4: Het integreren van het model 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.
  • Converteren 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, meestal:
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 willekeurigeFloat(float min, float max) {
    return min + (max - min) * (float)random(0, 10000) / 10000.0;
}

lege setup() {
    Serial.begin(115200);
    interpreter.AllocateTensors();
}

lege lus() {
    float hoek = randomFloat(-3.1416, 3.1416);
    TfLiteTensor* invoer = interpreter.input(0);
    input->data.f[0] = hoek;
    if (interpreter.Invoke() != kTfLiteOk) {
        error_reporter->Report("Mislukt om model aan te roepen");
        opbrengst;
    }
    TfLiteTensor* output = interpreter.output(0);
    float voorspelling = output->data.f[0];
    Serial.print("Hoek: ");
    Serial.print(hoek);
    Serial.print(", Voorspelde sinus: ");
    Serial.println(voorspelling);
    vertraging(1000);
}
  
✔ Gekopieerd!

 

  • Opmerkingen: De functie randomFloat 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 schets met de Arduino IDE, open vervolgens de Seriële Monitor om resultaten te bekijken, 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 uitvoer te zien.

Overwegingen en potentiële uitdagingen

  • Geheugenbeperkingen: ESP32 heeft 520 KB SRAM en beperkte flash, zorg er dus voor dat het model en tensor arena binnen deze limieten passen. Optimaliseer door de modelcomplexiteit te verminderen of de tensor arena-grootte te vergroten indien nodig.
  • Bibliotheekcompatibiliteit: Zorg ervoor dat de versie van de tflite-micro bibliotheek overeenkomt met de vereisten van ESP32, aangezien Espressif specifieke ondersteuning biedt.
  • Willekeurige getalgeneratie: De functie randomFloat gebruikt een eenvoudige schaalmethode, die mogelijk niet nauwkeurig is voor alle toepassingen. Overweeg het gebruik van een robuustere willekeurige getalgenerator voor productie.
Stap Beschrijving Commando/Code Voorbeeld
TensorFlow installeren Installeer TensorFlow voor modeltraining pip install tensorflow
Treinmodel Train een sinusvoorspellingsmodel met Keras Zie bovenstaande Python-code
Model converteren Converteren 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 ESP32 bordondersteuning en tflite-micro bibliotheek URL toevoegen http://dl.espressif.com/dl/package_esp32_index.json, installeren via Board Manager
Draaien op ESP32 Arduino-schets om model te laden en uit te voeren Zie C++-code hierboven

 

Onverwachte Observatie

Je zou misschien niet verwachten dat de willekeurige float-functie een eenvoudige schaalverdeling van random(0, 10000) gebruikt, wat mogelijk niet het meest nauwkeurig is voor machine learning, maar werkt voor dit voorbeeld en de afwegingen in embedded systemen benadrukt.

 

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.

Belangrijke citaten

 

1 reactie

hdt-avatar
Ankita

Can’t find the supported library of tensorflow lite for ESP32 board. Which one should I install

July 17, 2025 at 11:13am

Laat een reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met een *

Schrijf u in voor onze nieuwsbrief

Ontvang het laatste nieuws over onze producten en speciale aanbiedingen.