data.f[0] = angolo; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Impossibile invocare il modello"); ritorno; } TfLiteTensor* output = interpreter.output(0); float previsione = output->data.f[0]; Serial.print("Angolo: "); Serial.print(angle); Serial.print(", Seno previsto: "); Serial.println(prediction); ritardo(1000); } Copia il codice ✔ Copiato! Carica su ESP32, apri il Monitor Seriale per vedere i risultati. Dettaglio inaspettato Potresti non aspettarti che la funzione float casuale utilizzi una semplice scalatura di random(0, 10000), che potrebbe non essere la più precisa per il ML, ma funziona per questo esempio. Distribuire TensorFlow Lite su ESP32 Questa analisi completa esplora il deployment di TensorFlow Lite sul microcontrollore ESP32, dettagliando il processo dalla formazione del modello all'esecuzione, basato su ricerca e implementazione pratica. L'obiettivo è fornire una guida approfondita per gli sviluppatori, assicurando che tutti i passaggi siano chiari e attuabili, con considerazioni per le limitazioni di memoria e l'integrazione delle librerie. Contesto e Sfondo TensorFlow Lite, una versione leggera di TensorFlow, è progettato per eseguire modelli di machine learning su dispositivi con risorse limitate, come telefoni cellulari, sistemi embedded e microcontrollori. L'ESP32, sviluppato da Espressif, è un microcontrollore popolare con capacità Wi-Fi e Bluetooth, rendendolo ideale per applicazioni IoT. Eseguire modelli di machine learning localmente su ESP32 migliora la privacy, riduce la latenza e abbassa i costi evitando la dipendenza dal cloud. Il processo prevede l'addestramento di un modello su un PC, la conversione in formato TensorFlow Lite, la configurazione dell'ambiente di sviluppo ESP32, l'integrazione del modello e l'esecuzione per osservare i risultati. Questa analisi copre ogni passaggio, affrontando le potenziali sfide e fornendo esempi di codice dettagliati. Passaggi Dettagliati per il Deployment Passo 1: Addestrare un Modello di Apprendimento Automatico Il primo passo è addestrare un modello di machine learning utilizzando un desktop o un server con sufficiente potenza di calcolo. Per questo esempio, addestriamo una semplice rete neurale per prevedere il seno di un angolo dato, utilizzando Python e l'API Keras. Installazione: Installa TensorFlow con il comando pip install tensorflow. Codice di Addestramento: Il seguente codice genera un dataset e addestra il modello: importa numpy come np importa tensorflow come tf da tensorflow import keras # Genera set di dati angoli = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(angoli) # Crea un semplice modello di rete neurale modello = keras.Sequential([ keras.layers.Dense(1, input_shape=(1,)) ]) # Compila il modello model.compile(optimizer='adam', loss='mean_squared_error') # Addestrare il modello model.fit(angles, sines, epochs=100, verbose=0) # Salva il modello model.save('sine_model.h5') Copia il codice ✔ Copiato! Note: Questo modello è semplice, con un unico strato denso, adatto alle risorse limitate dell'ESP32. Il dataset consiste in 1000 angoli casuali e i loro valori di seno, addestrato per 100 epoche con l'ottimizzatore Adam e la perdita di errore quadratico medio. Passo 2: Conversione del Modello nel Formato TensorFlow Lite Dopo l'addestramento, converti il modello nel formato TensorFlow Lite (.tflite) per il deployment su dispositivi con risorse limitate. Installazione: Installa lo strumento di conversione con pip install tflite. Comando di Conversione: Usa il seguente per convertire: battere tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite Copia il codice ✔ Copiato!   Dettagli: Il file .tflite è ottimizzato per dimensioni e prestazioni, fondamentale per microcontrollori come l'ESP32 con memoria flash e RAM limitate. Passo 3: Configurazione dell'ambiente di sviluppo ESP32 Utilizza l'IDE Arduino per lo sviluppo ESP32, assicurandoti che il supporto per la scheda e le librerie necessarie siano installati. Supporto per la scheda ESP32:   Apri l'IDE di Arduino, vai su File > Preferenze e aggiungi http://dl.espressif.com/dl/package_esp32_index.json a URL aggiuntivi del Board Manager.   Vai su Strumenti > Scheda > Gestore schede, cerca "esp32" e installa l'ultima versione. Libreria TensorFlow Lite Micro:   Scarica da repository GitHub e aggiungi alla directory delle librerie di Arduino, oppure utilizza il Gestore delle librerie se disponibile.   Assicurati della compatibilità con ESP32, poiché Espressif fornisce supporto specifico per tflite-micro. Passo 4: Integrazione del Modello nel Codice ESP32 Integra il modello convertendo il file .tflite in un array C e scrivendo uno sketch Arduino per caricarlo ed eseguirlo. Converti in array C: Usa xxd -i sine_model.tflite > sine_model.h per generare un file di intestazione contenente i dati del modello come un array C, tipicamente: unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model); Arduino Sketch: Il seguente codice carica ed esegue il modello: #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 risolutore; constexpr int kTensorArenaSize = 2000; uint8_t tensor_arena[kTensorArenaSize]; tflite::MicroInterpreter interprete(model, risolutore, tensor_arena, kTensorArenaSize, error_reporter); float randomFloat(float min, float max) { ritorna min + (max - min) * (float)random(0, 10000) / 10000.0; } impostazione nulla() { Inizio seriale(115200); interpreter.AllocateTensors(); } ciclo vuoto() { float angolo = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = angolo; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Impossibile invocare il modello"); ritorno; } TfLiteTensor* output = interpreter.output(0); float previsione = output->data.f[0]; Serial.print("Angolo: "); Serial.print(angle); Serial.print(", Seno previsto: "); Serial.println(prediction); ritardo(1000); } Copia il codice ✔ Copiato!   Note: La funzione randomFloat genera angoli casuali per i test, utilizzando un semplice metodo di scaling. La dimensione dell'arena del tensore (2000 byte) potrebbe necessitare di un aggiustamento per modelli più grandi, dato che l'ESP32 ha 520 KB di SRAM. Passo 5: Carica ed Esegui il Codice Compila e carica lo sketch utilizzando l'Arduino IDE, quindi apri il Monitor Seriale per osservare i risultati, come angoli e valori di seno previsti. Procedura: Assicurati che la scheda sia selezionata correttamente (ad es., ESP32 Dev Module), compila e carica. Apri il Monitor Seriale a 115200 baud per vedere le uscite. Considerazioni e Potenziali Sfide Vincoli di Memoria: ESP32 ha 520 KB di SRAM e flash limitata, quindi assicurati che il modello e l'area dei tensori rientrino in questi limiti. Ottimizza riducendo la complessità del modello o aumentando la dimensione dell'area dei tensori se necessario. Compatibilità della libreria: Assicurati che la versione della libreria tflite-micro corrisponda ai requisiti dell'ESP32, poiché Espressif fornisce supporto specifico. Generazione di Numeri Casuali: La funzione randomFloat utilizza un semplice metodo di scaling, che potrebbe non essere preciso per tutte le applicazioni. Considera di utilizzare un generatore di numeri casuali più robusto per la produzione. Fare un passo Descrizione Esempio di Comando/Codice Installa TensorFlow Installa TensorFlow per l'addestramento del modello pip install tensorflow Modello di treno Addestra un modello di previsione del seno utilizzando Keras Vedi il codice Python sopra Converti modello Converti in formato TensorFlow Lite tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite Converti in array C Genera intestazione C per i dati del modello xxd -i sine_model.tflite > sine_model.h Imposta ESP32 Installa il supporto per la scheda ESP32 e la libreria tflite-micro Aggiungi URL http://dl.espressif.com/dl/package_esp32_index.json, installa tramite Gestore schede Esegui su ESP32 Sketch Arduino per caricare ed eseguire il modello Vedere il codice C++ sopra   Osservazione Inaspettata Potresti non aspettarti che la funzione float casuale utilizzi una semplice scalatura di random(0, 10000), che potrebbe non essere la più precisa per il machine learning, ma funziona per questo esempio, evidenziando i compromessi nei sistemi embedded.   Conclusione Questa guida fornisce un processo completo per il deployment di TensorFlow Lite su ESP32, dalla formazione di un semplice modello di previsione del seno all'esecuzione locale. Apre possibilità per dispositivi IoT intelligenti, con considerazioni per l'integrazione della memoria e delle librerie che garantiscono un'implementazione pratica. Citazioni chiave Easy TinyML su ESP32 e Arduino TensorFlow Lite Micro per chipset Espressif Primi passi con ESP32 e TensorFlow Lite per Microcontrollori TensorFlow Lite TinyML per ESP32  ">
Salta al contenuto

+49 1626571232

info@openelab.io

🚀 Spedizione gratuita da 30€ in Germania, 50€ nell'UE!

TensorFlow Lite su ESP32

25 Feb 2025 0 Commenti

Che cos'è TensorFlow Lite?

TensorFlow Lite è una versione leggera di TensorFlow, progettata per dispositivi mobili e embedded come ESP32, che consente ai modelli di machine learning di funzionare su hardware con risorse limitate.

Passaggi per il deployment su ESP32

Ecco come far funzionare un modello di machine learning sul tuo ESP32:

Addestrare un modello

Allena una semplice rete neurale, come la previsione dei valori del seno, utilizzando Python e Keras sul tuo PC. Installa TensorFlow con:
  • Comando: pip install tensorflow
  • Codice di esempio:
    importa numpy come np
    importa tensorflow come tf
    da tensorflow import keras
    
    angoli = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1))
    sines = np.sin(angoli)
    modello = 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')
    
    
    
    ✔ Copiato!

Converti in TensorFlow Lite

Converti il modello addestrato nel formato .tflite:
  • Installa strumento: pip install tflite
  • Converti: tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite

Imposta ESP32

Usa l'IDE Arduino per lo sviluppo ESP32. Installa il supporto ESP32:

Integrare ed eseguire

Converti .tflite in array C: xxd -i sine_model.tflite > sine_model.h. Usa questo sketch Arduino:
  • Codice:
    #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 risolutore;
    constexpr int kTensorArenaSize = 2000;
    uint8_t tensor_arena[kTensorArenaSize];
    tflite::MicroInterpreter interprete(model, risolutore, tensor_arena, kTensorArenaSize, error_reporter);
    
    float randomFloat(float min, float max) {
        ritorna min + (max - min) * (float)random(0, 10000) / 10000.0;
    }
    
    impostazione nulla() {
        Inizio seriale(115200);
        interpreter.AllocateTensors();
    }
    
    ciclo vuoto() {
        float angolo = randomFloat(-3.1416, 3.1416);
        TfLiteTensor* input = interpreter.input(0);
        input->data.f[0] = angolo;
        if (interpreter.Invoke() != kTfLiteOk) {
            error_reporter->Report("Impossibile invocare il modello");
            ritorno;
        }
        TfLiteTensor* output = interpreter.output(0);
        float previsione = output->data.f[0];
        Serial.print("Angolo: ");
        Serial.print(angle);
        Serial.print(", Seno previsto: ");
        Serial.println(prediction);
        ritardo(1000);
    }
    
    
    
    ✔ Copiato!
  • Carica su ESP32, apri il Monitor Seriale per vedere i risultati.

Dettaglio inaspettato

Potresti non aspettarti che la funzione float casuale utilizzi una semplice scalatura di random(0, 10000), che potrebbe non essere la più precisa per il ML, ma funziona per questo esempio.

Distribuire TensorFlow Lite su ESP32

Questa analisi completa esplora il deployment di TensorFlow Lite sul microcontrollore ESP32, dettagliando il processo dalla formazione del modello all'esecuzione, basato su ricerca e implementazione pratica. L'obiettivo è fornire una guida approfondita per gli sviluppatori, assicurando che tutti i passaggi siano chiari e attuabili, con considerazioni per le limitazioni di memoria e l'integrazione delle librerie.

Contesto e Sfondo

TensorFlow Lite, una versione leggera di TensorFlow, è progettato per eseguire modelli di machine learning su dispositivi con risorse limitate, come telefoni cellulari, sistemi embedded e microcontrollori. L'ESP32, sviluppato da Espressif, è un microcontrollore popolare con capacità Wi-Fi e Bluetooth, rendendolo ideale per applicazioni IoT. Eseguire modelli di machine learning localmente su ESP32 migliora la privacy, riduce la latenza e abbassa i costi evitando la dipendenza dal cloud.
Il processo prevede l'addestramento di un modello su un PC, la conversione in formato TensorFlow Lite, la configurazione dell'ambiente di sviluppo ESP32, l'integrazione del modello e l'esecuzione per osservare i risultati. Questa analisi copre ogni passaggio, affrontando le potenziali sfide e fornendo esempi di codice dettagliati.

Passaggi Dettagliati per il Deployment

Passo 1: Addestrare un Modello di Apprendimento Automatico

Il primo passo è addestrare un modello di machine learning utilizzando un desktop o un server con sufficiente potenza di calcolo. Per questo esempio, addestriamo una semplice rete neurale per prevedere il seno di un angolo dato, utilizzando Python e l'API Keras.
  • Installazione: Installa TensorFlow con il comando pip install tensorflow.
  • Codice di Addestramento: Il seguente codice genera un dataset e addestra il modello:
    importa numpy come np
    importa tensorflow come tf
    da tensorflow import keras
    
    # Genera set di dati
    angoli = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1))
    sines = np.sin(angoli)
    
    # Crea un semplice modello di rete neurale
    modello = keras.Sequential([
        keras.layers.Dense(1, input_shape=(1,))
    ])
    
    # Compila il modello
    model.compile(optimizer='adam', loss='mean_squared_error')
    
    # Addestrare il modello
    model.fit(angles, sines, epochs=100, verbose=0)
    
    # Salva il modello
    model.save('sine_model.h5')
    
    
    
    ✔ Copiato!
  • Note: Questo modello è semplice, con un unico strato denso, adatto alle risorse limitate dell'ESP32. Il dataset consiste in 1000 angoli casuali e i loro valori di seno, addestrato per 100 epoche con l'ottimizzatore Adam e la perdita di errore quadratico medio.

Passo 2: Conversione del Modello nel Formato TensorFlow Lite

Dopo l'addestramento, converti il modello nel formato TensorFlow Lite (.tflite) per il deployment su dispositivi con risorse limitate.
  • Installazione: Installa lo strumento di conversione con pip install tflite.
  • Comando di Conversione: Usa il seguente per convertire:
battere
tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite


✔ Copiato!

 

  • Dettagli: Il file .tflite è ottimizzato per dimensioni e prestazioni, fondamentale per microcontrollori come l'ESP32 con memoria flash e RAM limitate.

Passo 3: Configurazione dell'ambiente di sviluppo ESP32

Utilizza l'IDE Arduino per lo sviluppo ESP32, assicurandoti che il supporto per la scheda e le librerie necessarie siano installati.
  • Supporto per la scheda ESP32:
      Apri l'IDE di Arduino, vai su File > Preferenze e aggiungi http://dl.espressif.com/dl/package_esp32_index.json a URL aggiuntivi del Board Manager.
      Vai su Strumenti > Scheda > Gestore schede, cerca "esp32" e installa l'ultima versione.
  • Libreria TensorFlow Lite Micro:
      Scarica da repository GitHub e aggiungi alla directory delle librerie di Arduino, oppure utilizza il Gestore delle librerie se disponibile.
      Assicurati della compatibilità con ESP32, poiché Espressif fornisce supporto specifico per tflite-micro.

Passo 4: Integrazione del Modello nel Codice ESP32

Integra il modello convertendo il file .tflite in un array C e scrivendo uno sketch Arduino per caricarlo ed eseguirlo.
  • Converti in array C: Usa xxd -i sine_model.tflite > sine_model.h per generare un file di intestazione contenente i dati del modello come un array C, tipicamente:
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);

Arduino Sketch: Il seguente codice carica ed esegue il modello:
#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 risolutore;
constexpr int kTensorArenaSize = 2000;
uint8_t tensor_arena[kTensorArenaSize];
tflite::MicroInterpreter interprete(model, risolutore, tensor_arena, kTensorArenaSize, error_reporter);

float randomFloat(float min, float max) {
    ritorna min + (max - min) * (float)random(0, 10000) / 10000.0;
}

impostazione nulla() {
    Inizio seriale(115200);
    interpreter.AllocateTensors();
}

ciclo vuoto() {
    float angolo = randomFloat(-3.1416, 3.1416);
    TfLiteTensor* input = interpreter.input(0);
    input->data.f[0] = angolo;
    if (interpreter.Invoke() != kTfLiteOk) {
        error_reporter->Report("Impossibile invocare il modello");
        ritorno;
    }
    TfLiteTensor* output = interpreter.output(0);
    float previsione = output->data.f[0];
    Serial.print("Angolo: ");
    Serial.print(angle);
    Serial.print(", Seno previsto: ");
    Serial.println(prediction);
    ritardo(1000);
}


✔ Copiato!

 

  • Note: La funzione randomFloat genera angoli casuali per i test, utilizzando un semplice metodo di scaling. La dimensione dell'arena del tensore (2000 byte) potrebbe necessitare di un aggiustamento per modelli più grandi, dato che l'ESP32 ha 520 KB di SRAM.

Passo 5: Carica ed Esegui il Codice

Compila e carica lo sketch utilizzando l'Arduino IDE, quindi apri il Monitor Seriale per osservare i risultati, come angoli e valori di seno previsti.
  • Procedura: Assicurati che la scheda sia selezionata correttamente (ad es., ESP32 Dev Module), compila e carica. Apri il Monitor Seriale a 115200 baud per vedere le uscite.

Considerazioni e Potenziali Sfide

  • Vincoli di Memoria: ESP32 ha 520 KB di SRAM e flash limitata, quindi assicurati che il modello e l'area dei tensori rientrino in questi limiti. Ottimizza riducendo la complessità del modello o aumentando la dimensione dell'area dei tensori se necessario.
  • Compatibilità della libreria: Assicurati che la versione della libreria tflite-micro corrisponda ai requisiti dell'ESP32, poiché Espressif fornisce supporto specifico.
  • Generazione di Numeri Casuali: La funzione randomFloat utilizza un semplice metodo di scaling, che potrebbe non essere preciso per tutte le applicazioni. Considera di utilizzare un generatore di numeri casuali più robusto per la produzione.
Fare un passo Descrizione Esempio di Comando/Codice
Installa TensorFlow Installa TensorFlow per l'addestramento del modello pip install tensorflow
Modello di treno Addestra un modello di previsione del seno utilizzando Keras Vedi il codice Python sopra
Converti modello Converti in formato TensorFlow Lite tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
Converti in array C Genera intestazione C per i dati del modello xxd -i sine_model.tflite > sine_model.h
Imposta ESP32 Installa il supporto per la scheda ESP32 e la libreria tflite-micro Aggiungi URL http://dl.espressif.com/dl/package_esp32_index.json, installa tramite Gestore schede
Esegui su ESP32 Sketch Arduino per caricare ed eseguire il modello Vedere il codice C++ sopra

 

Osservazione Inaspettata

Potresti non aspettarti che la funzione float casuale utilizzi una semplice scalatura di random(0, 10000), che potrebbe non essere la più precisa per il machine learning, ma funziona per questo esempio, evidenziando i compromessi nei sistemi embedded.

 

Conclusione

Questa guida fornisce un processo completo per il deployment di TensorFlow Lite su ESP32, dalla formazione di un semplice modello di previsione del seno all'esecuzione locale. Apre possibilità per dispositivi IoT intelligenti, con considerazioni per l'integrazione della memoria e delle librerie che garantiscono un'implementazione pratica.

Citazioni chiave

 

Articolo precedente
Articolo successivo

Lascia un commento

Tutti i commenti del blog vengono controllati prima della pubblicazione

Qualcuno ha recentemente acquistato un

Grazie per esserti iscritto!

Questa email è stata registrata!

Acquista il look

Scegli Opzioni

visualizzato recentemente

Modifica opzione
Notifica di disponibilità
this is just a warning
Login
Carrello della spesa
0 elementi
RuffRuff App RuffRuff App by Tsun