Mikä on TensorFlow Lite?
TensorFlow Lite on kevyt versio TensorFlow’sta, suunniteltu mobiili- ja sulautetuille laitteille kuten ESP32, jolloin koneoppimismallit voivat toimia rajallisilla resursseilla varustetussa laitteistossa.
Vaiheet käyttöönottoon ESP32:lla
Näin saat koneoppimismallin toimimaan ESP32:lla:
Kouluta malli
Kouluta yksinkertainen neuroverkko, kuten siniarvojen ennustaminen, Pythonilla ja Kerasilla tietokoneellasi. Asenna TensorFlow komennolla:
-
Komento: pip install tensorflow
-
Esimerkkikoodi:
import numpy as np import tensorflow as tf from tensorflow import keras angles = 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')
✔ Kopioitu!
Muunna TensorFlow Lite -muotoon
Muunna koulutettu malli .tflite-muotoon:
-
Asenna työkalu: pip install tflite
-
Muunna: tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
Määritä ESP32
Käytä Arduino IDE:tä ESP32-kehitykseen. Asenna ESP32-tuki:
-
Lisää URL: http://dl.espressif.com/dl/package_esp32_index.json Asetuksissa.
-
Asenna Board Managerin kautta.
-
Lisää tflite-micro-kirjasto GitHub-repositorysta Arduino-kirjastoihin.
Integroi ja suorita
Muuta .tflite C-taulukoksi: xxd -i sine_model.tflite > sine_model.h. Käytä tätä Arduino-sketsiä:
-
Koodi:
#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; } void setup() { Serial.begin(115200); interpreter.AllocateTensors(); } void loop() { float kulma = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = kulma; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Mallin kutsu epäonnistui"); return; } TfLiteTensor* output = interpreter.output(0); float prediction = output->data.f[0]; Serial.print("Kulma: "); Serial.print(angle); Serial.print(", Ennustettu sini: "); Serial.println(prediction); delay(1000); }
✔ Kopioitu!
-
Lataa ESP32:lle, avaa Sarjamonitori nähdäksesi tulokset.
Odottamaton yksityiskohta
Et ehkä odottaisi, että satunnaislukufunktio käyttää yksinkertaista skaalausta random(0, 10000) -arvosta, mikä ei ehkä ole tarkin koneoppimiseen, mutta toimii tässä esimerkissä.
TensorFlow Liten käyttöönotto ESP32:lla
Tämä kattava analyysi tutkii TensorFlow Liten käyttöönottoa ESP32-mikrokontrollerilla, yksityiskohtaisesti mallin koulutuksesta suoritukseen, perustuen tutkimukseen ja käytännön toteutukseen. Painopiste on tarjota perusteellinen opas kehittäjille, varmistaen, että kaikki vaiheet ovat selkeitä ja toteuttamiskelpoisia, ottaen huomioon muistin rajoitukset ja kirjastojen integroinnin.
Tausta ja konteksti
TensorFlow Lite, TensorFlow'n kevyt versio, on suunniteltu koneoppimismallien ajamiseen resurssirajoitetuissa laitteissa, kuten matkapuhelimissa, sulautetuissa järjestelmissä ja mikrokontrollereissa. ESP32, jonka on kehittänyt Espressif, on suosittu mikrokontrolleri, jossa on Wi-Fi- ja Bluetooth-ominaisuudet, tehden siitä ihanteellisen IoT-sovelluksiin. Koneoppimismallien ajaminen paikallisesti ESP32:lla parantaa yksityisyyttä, vähentää viivettä ja alentaa kustannuksia välttämällä pilvipalveluiden riippuvuuden.
Prosessi sisältää mallin kouluttamisen PC:llä, sen muuntamisen TensorFlow Lite -muotoon, ESP32-kehitysympäristön pystyttämisen, mallin integroinnin ja ajamisen tulosten tarkastelua varten. Tämä analyysi kattaa jokaisen vaiheen, käsittelee mahdollisia haasteita ja tarjoaa yksityiskohtaisia koodiesimerkkejä.
Yksityiskohtaiset vaiheet käyttöönottoon
Vaihe 1: Koneoppimismallin koulutus
Ensimmäinen vaihe on kouluttaa koneoppimismalli työpöydällä tai palvelimella, jossa on riittävästi laskentatehoa. Tässä esimerkissä koulutamme yksinkertaisen neuroverkon ennustamaan annetun kulman siniä käyttäen Pythonia ja Keras-rajapintaa.
-
Asennus: Asenna TensorFlow komennolla pip install tensorflow.
-
Koulutuskoodi: Seuraava koodi luo aineiston ja kouluttaa mallin:
import numpy as np import tensorflow as tf from tensorflow import keras # Luo aineisto angles = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(angles) # Luo yksinkertainen neuroverkkomalli model = keras.Sequential([ keras.layers.Dense(1, input_shape=(1,)) ]) # Kokoa malli model.compile(optimizer='adam', loss='mean_squared_error') # Kouluta malli model.fit(angles, sines, epochs=100, verbose=0) # Tallenna malli model.save('sine_model.h5')
✔ Kopioitu!
-
Huomautuksia: Tämä malli on yksinkertainen, sisältäen yhden tiheän kerroksen, sopiva ESP32:n rajallisille resursseille. Datasetti koostuu 1000 satunnaisesta kulmasta ja niiden sini-arvoista, koulutettuna 100 epookin ajan Adam-optimointimenetelmällä ja keskimääräisen neliövirheen häviöllä.
Vaihe 2: Mallin muuntaminen TensorFlow Lite -muotoon
Koulutuksen jälkeen muunna malli TensorFlow Lite -muotoon (.tflite) käyttöönottoa varten laitteissa, joilla on rajalliset resurssit.
-
Asennus: Asenna muunnostyökalu komennolla pip install tflite.
-
Muunnoskomeno: Käytä seuraavaa muuntamiseen:
tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
✔ Kopioitu!
-
Yksityiskohdat: .tflite-tiedosto on optimoitu koolle ja suorituskyvylle, mikä on ratkaisevaa mikrokontrollereille kuten ESP32, joilla on rajallinen flash-muisti ja RAM.
Vaihe 3: ESP32-kehitysympäristön asennus
Käytä Arduino IDE:tä ESP32-kehitykseen varmistaen, että levyntuki ja tarvittavat kirjastot on asennettu.
-
ESP32-levyntuki:Avaa Arduino IDE, mene Tiedosto > Asetukset ja lisää http://dl.espressif.com/dl/package_esp32_index.json Lisää Lisälevynhallinnan URL-osoitteisiin.Mene Työkalut > Levy > Levynhallinta, etsi "esp32" ja asenna uusin versio.
-
TensorFlow Lite Micro -kirjasto:Lataa GitHub-repositoriosta ja lisää Arduino-kirjastohakemistoon tai käytä Kirjastonhallintaa, jos saatavilla.Varmista yhteensopivuus ESP32:n kanssa, sillä Espressif tarjoaa erityistä tukea tflite-microlle.
Vaihe 4: Mallin integrointi ESP32-koodiin
Integroi malli muuntamalla .tflite-tiedosto C-taulukoksi ja kirjoittamalla Arduino-sketch, joka lataa ja suorittaa sen.
-
Muunna C-taulukoksi: Käytä komentoa xxd -i sine_model.tflite > sine_model.h luodaksesi otsikkotiedoston, joka sisältää mallin tiedot C-taulukkona, tyypillisesti:
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);
Arduino Sketch: Seuraava koodi lataa ja suorittaa mallin:
#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; } void setup() { Serial.begin(115200); interpreter.AllocateTensors(); } void loop() { float kulma = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = kulma; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Mallin kutsu epäonnistui"); return; } TfLiteTensor* output = interpreter.output(0); float prediction = output->data.f[0]; Serial.print("Kulma: "); Serial.print(angle); Serial.print(", Ennustettu sini: "); Serial.println(prediction); delay(1000); }
✔ Kopioitu!
-
Huomautuksia: randomFloat-funktio generoi satunnaisia kulmia testaukseen yksinkertaisella skaalausmenetelmällä. Tensorialueen koko (2000 tavua) saattaa vaatia säätöä suuremmille malleille ESP32:n 520 KB SRAM-muistin vuoksi.
Vaihe 5: Lataa ja suorita koodi
Käännä ja lataa koodi Arduino IDE:llä, avaa sitten Sarjaporttimonitori tarkkaillaksesi tuloksia, kuten kulmia ja ennustettuja sini-arvoja.
-
Menettely: Varmista, että kortti on valittu oikein (esim. ESP32 Dev Module), käännä ja lataa. Avaa Sarjaporttimonitori nopeudella 115200 nähdäksesi tulosteet.
Huomioitavaa ja mahdollisia haasteita
-
Muistirajoitukset: ESP32:lla on 520 KB SRAM-muistia ja rajallinen flash-muisti, joten varmista, että malli ja tensorialue mahtuvat näihin rajoihin. Optimoi vähentämällä mallin monimutkaisuutta tai kasvattamalla tensorialueen kokoa tarvittaessa.
-
Kirjaston yhteensopivuus: Varmista, että tflite-micro-kirjaston versio vastaa ESP32:n vaatimuksia, sillä Espressif tarjoaa erityistä tukea.
-
Satunnaislukujen generointi: randomFloat-funktio käyttää yksinkertaista skaalausmenetelmää, joka ei välttämättä ole tarkka kaikissa sovelluksissa. Harkitse vahvemman satunnaislukugeneraattorin käyttöä tuotannossa.
Vaihe | Kuvaus | Komentoesimerkki/koodiesimerkki |
Asenna TensorFlow | Asenna TensorFlow mallin koulutusta varten | pip install tensorflow |
Kouluta malli | Kouluta sini-ennustusmalli käyttäen Kerasta | Katso yllä oleva Python-koodi |
Muunna malli | Muunna TensorFlow Lite -muotoon | tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite |
Muunna C-taulukoksi | Luo C-otsikkotiedosto mallidatalle | xxd -i sine_model.tflite > sine_model.h |
Määritä ESP32 | Asenna ESP32-lautatuki ja tflite-micro-kirjasto | Lisää URL-osoite http://dl.espressif.com/dl/package_esp32_index.json, asenna Board Managerin kautta |
Suorita ESP32:lla | Arduino-sketsi mallin lataamiseen ja suorittamiseen | Katso yllä oleva C++-koodi |
Odottamaton havainto
Et ehkä odottaisi, että satunnaislukufunktio käyttää yksinkertaista skaalausta random(0, 10000), mikä ei ehkä ole tarkin koneoppimiseen, mutta toimii tässä esimerkissä korostaen sulautettujen järjestelmien kompromisseja.
Johtopäätös
Tämä opas tarjoaa kattavan prosessin TensorFlow Liten käyttöönottoon ESP32:lla, yksinkertaisen siniaaltoennustemallin kouluttamisesta sen paikalliseen suorittamiseen. Se avaa mahdollisuuksia älykkäille IoT-laitteille, ottaen huomioon muistin ja kirjastojen integroinnin käytännön toteutuksen varmistamiseksi.
Keskeiset viitteet
1 kommentti
Ankita
Can’t find the supported library of tensorflow lite for ESP32 board. Which one should I install