TensorFlow Lite na ESP32

Co je TensorFlow Lite?

TensorFlow Lite je odlehčená verze TensorFlow, navržená pro mobilní a vestavěná zařízení jako ESP32, která umožňuje spouštět modely strojového učení na hardwaru s omezenými zdroji.

Kroky k nasazení na ESP32

Zde je návod, jak spustit model strojového učení na vašem ESP32:

Trénování modelu

Natrénujte jednoduchou neuronovou síť, například pro předpovídání hodnot sinu, pomocí Pythonu a Keras na vašem PC. Nainstalujte TensorFlow pomocí:
  • Příkaz: pip install tensorflow
  • Příklad kódu:
    importovat numpy jako np
    import tensorflow as tf
    z tensorflow import keras
    
    úhly = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1))
    sines = np.sin(angles)
    model = 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')
        
      
    ✔ Zkopírováno!

Převést na TensorFlow Lite

Převést natrénovaný model do formátu .tflite:
  • Nainstalujte nástroj: pip install tflite
  • Převést: tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite

Nastavení ESP32

Použijte Arduino IDE pro vývoj ESP32. Nainstalujte podporu ESP32:

Integrovat a spustit

Převod .tflite na C pole: xxd -i sine_model.tflite > sine_model.h. Použijte tento Arduino sketch:
  • Kód:
    #include 
    #include "tflite-micro.h"
    #include "sine_model.h"
    
    tflite::MicroErrorReporter mikro_chybový_reportér;
    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 řešič;
    constexpr int kTensorArenaSize = 2000;
    uint8_t tensor_arena[kTensorArenaSize];
    tflite::MicroInterpreter interpreter(model, resolver, tensor_arena, kTensorArenaSize, error_reporter);
    
    float náhodnéFloat(float min, float max) {
        return min + (max - min) * (float)random(0, 10000) / 10000.0;
    }
    
    void setup() {
        Serial.begin(115200);
        interpreter.AllocateTensors();
    }
    
    void loop() {
        float angle = randomFloat(-3.1416, 3.1416);
        TfLiteTensor* vstup = interpreter.input(0);
        input->data.f[0] = úhel;
        if (interpreter.Invoke() != kTfLiteOk) {
            error_reporter->Report("Nepodařilo se vyvolat model");
            návrat;
        }
        TfLiteTensor* output = interpreter.output(0);
        float predikce = output->data.f[0];
        Serial.print("Úhel: ");
        Serial.print(úhel);
        Serial.print(", Predikovaný sinus: ");
        Serial.println(předpověď);
        zpoždění(1000);
    }
        
      
    ✔ Zkopírováno!
  • Nahrajte do ESP32, otevřete Serial Monitor pro zobrazení výsledků.

Neočekávaný detail

Nemusíte očekávat, že funkce náhodného desetinného čísla používá jednoduché škálování random(0, 10000), což nemusí být pro strojové učení nejpřesnější, ale pro tento příklad to funguje.

Nasazení TensorFlow Lite na ESP32

Tato komplexní analýza zkoumá nasazení TensorFlow Lite na mikrokontrolér ESP32, podrobně popisuje proces od tréninku modelu až po jeho spuštění, založený na výzkumu a praktické implementaci. Zaměřuje se na poskytnutí důkladného průvodce pro vývojáře, zajišťující, že všechny kroky jsou jasné a proveditelné, s ohledem na omezení paměti a integraci knihoven.

Pozadí a kontext

TensorFlow Lite, lehká verze TensorFlow, je navržena pro spouštění modelů strojového učení na zařízeních s omezenými zdroji, jako jsou mobilní telefony, vestavěné systémy a mikrokontroléry. ESP32, vyvinutý společností Espressif, je populární mikrokontrolér s Wi-Fi a Bluetooth funkcemi, což ho činí ideálním pro IoT aplikace. Spouštění modelů strojového učení lokálně na ESP32 zvyšuje soukromí, snižuje latenci a snižuje náklady tím, že se vyhýbá závislosti na cloudu.
Proces zahrnuje trénování modelu na PC, jeho převod do formátu TensorFlow Lite, nastavení vývojového prostředí ESP32, integraci modelu a jeho spuštění pro pozorování výsledků. Tato analýza pokrývá každý krok, řeší možné výzvy a poskytuje podrobné příklady kódu.

Podrobné kroky pro nasazení

Krok 1: Trénink modelu strojového učení

Prvním krokem je natrénovat model strojového učení pomocí desktopu nebo serveru s dostatečným výpočetním výkonem. Pro tento příklad trénujeme jednoduchou neuronovou síť k predikci sinu daného úhlu, používající Python a API Keras.
  • Instalace: Nainstalujte TensorFlow příkazem pip install tensorflow.
  • Kód pro trénink: Následující kód generuje datovou sadu a trénuje model:
    importovat numpy jako np
    import tensorflow as tf
    z tensorflow import keras
    
    # Generování datové sady
    úhly = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1))
    sines = np.sin(angles)
    
    # Vytvořit jednoduchý model neuronové sítě
    model = keras.Sequential([
        keras.layers.Dense(1, input_shape=(1,))
    ])
    
    # Zkompilujte model
    model.compile(optimizer='adam', loss='mean_squared_error')
    
    # Trénování modelu
    model.fit(angles, sines, epochs=100, verbose=0)
    
    # Uložit model
    model.save('sine_model.h5')
        
      
    ✔ Zkopírováno!
  • Poznámky: Tento model je jednoduchý, s jednou hustou vrstvou, vhodný pro omezené zdroje ESP32. Datová sada se skládá z 1000 náhodných úhlů a jejich hodnot sinusů, trénovaných po dobu 100 epoch s optimalizátorem Adam a ztrátovou funkcí střední kvadratické chyby.

Krok 2: Převod modelu do formátu TensorFlow Lite

Po tréninku převedete model do formátu TensorFlow Lite (.tflite) pro nasazení na zařízeních s omezenými zdroji.
  • Instalace: Nainstalujte konverzní nástroj pomocí pip install tflite.
  • Příkaz pro převod: Použijte následující k převodu:
tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
  
✔ Zkopírováno!
  • Detaily: Soubor .tflite je optimalizován pro velikost a výkon, což je zásadní pro mikrokontroléry jako ESP32 s omezenou flash pamětí a RAM.

Krok 3: Nastavení vývojového prostředí ESP32

Použijte Arduino IDE pro vývoj ESP32, zajistěte instalaci podpory desky a potřebných knihoven.
  • Podpora desky ESP32:
      Otevřete Arduino IDE, přejděte na Soubor > Předvolby a přidejte http://dl.espressif.com/dl/package_esp32_index.json na další URL adresy Správce desek.
      Přejděte na Nástroje > Deska > Správce desek, vyhledejte "esp32" a nainstalujte nejnovější verzi.
  • Knihovna TensorFlow Lite Micro:
      Stáhněte z GitHub repozitáře a přidejte do adresáře knihoven Arduino, nebo použijte Správce knihoven, pokud je k dispozici.
      Zajistěte kompatibilitu s ESP32, protože Espressif poskytuje specifickou podporu pro tflite-micro.

Krok 4: Integrace modelu do kódu ESP32

Integrujte model převedením souboru .tflite na pole C a napsáním Arduino sketche pro jeho načtení a spuštění.
  • Převést na C pole: Použijte xxd -i sine_model.tflite > sine_model.h k vygenerování hlavičkového souboru obsahujícího data modelu jako C pole, obvykle:
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);

Arduino Sketch: Následující kód načte a spustí model:
#include 
#include "tflite-micro.h"
#include "sine_model.h"

tflite::MicroErrorReporter mikro_chybový_reportér;
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 řešič;
constexpr int kTensorArenaSize = 2000;
uint8_t tensor_arena[kTensorArenaSize];
tflite::MicroInterpreter interpreter(model, resolver, tensor_arena, kTensorArenaSize, error_reporter);

float náhodnéFloat(float min, float max) {
    return min + (max - min) * (float)random(0, 10000) / 10000.0;
}

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

void loop() {
    float angle = randomFloat(-3.1416, 3.1416);
    TfLiteTensor* vstup = interpreter.input(0);
    input->data.f[0] = úhel;
    if (interpreter.Invoke() != kTfLiteOk) {
        error_reporter->Report("Nepodařilo se vyvolat model");
        návrat;
    }
    TfLiteTensor* output = interpreter.output(0);
    float predikce = output->data.f[0];
    Serial.print("Úhel: ");
    Serial.print(úhel);
    Serial.print(", Predikovaný sinus: ");
    Serial.println(předpověď);
    zpoždění(1000);
}
  
✔ Zkopírováno!

 

  • Poznámky: Funkce randomFloat generuje náhodné úhly pro testování pomocí jednoduché metody škálování. Velikost tensor arény (2000 bajtů) může vyžadovat úpravu pro větší modely, vzhledem k 520 KB SRAM u ESP32.

Krok 5: Nahrajte a spusťte kód

Sestavte a nahrajte skicu pomocí Arduino IDE, poté otevřete sériový monitor pro sledování výsledků, jako jsou úhly a předpovězené hodnoty sinu.
  • Postup: Ujistěte se, že je deska správně vybrána (např. ESP32 Dev Module), zkompilujte a nahrajte. Otevřete Serial Monitor na 115200 baudů pro zobrazení výstupů.

Úvahy a potenciální výzvy

  • Paměťová omezení: ESP32 má 520 KB SRAM a omezenou flash paměť, proto zajistěte, aby model a tensor arena byly v těchto limitech. Optimalizujte snížením složitosti modelu nebo zvětšením velikosti tensor areny, pokud je to potřeba.
  • Kompatibilita knihovny: Ujistěte se, že verze knihovny tflite-micro odpovídá požadavkům ESP32, protože Espressif poskytuje specifickou podporu.
  • Generování náhodných čísel: Funkce randomFloat používá jednoduchou metodu škálování, která nemusí být přesná pro všechny aplikace. Zvažte použití robustnějšího generátoru náhodných čísel pro produkční prostředí.
Krok Popis Příklad příkazu/kódu
Instalace TensorFlowu Nainstalujte TensorFlow pro trénink modelu pip install tensorflow
Model vlaku Natrénujte model predikce sinusové vlny pomocí Kerasu Viz výše uvedený kód v Pythonu
Převést model Převést do formátu TensorFlow Lite tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
Převést na pole C Vygenerovat C hlavičku pro data modelu xxd -i sine_model.tflite > sine_model.h
Nastavení ESP32 Nainstalujte podporu desky ESP32 a knihovnu tflite-micro Přidat URL http://dl.espressif.com/dl/package_esp32_index.json, nainstalujte přes Správce desek
Běží na ESP32 Arduino skica pro načtení a spuštění modelu Viz výše uvedený kód C++

 

Neočekávané pozorování

Nemusíte očekávat, že funkce náhodného desetinného čísla používá jednoduché škálování random(0, 10000), což nemusí být nejpřesnější pro strojové učení, ale funguje pro tento příklad a zdůrazňuje kompromisy v embedded systémech.

 

Závěr

Tato příručka poskytuje komplexní postup pro nasazení TensorFlow Lite na ESP32, od tréninku jednoduchého modelu predikce sinusové vlny až po jeho lokální spuštění. Otevírá možnosti pro inteligentní IoT zařízení, přičemž zohledňuje paměť a integraci knihoven pro zajištění praktické implementace.

Klíčové citace

 

Zanechte komentář

Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena *

Přihlaste se k odběru našeho newsletteru

Získejte nejnovější informace o našich produktech a speciálních nabídkách.