0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovRevijaPredstavljamoSTM32 mikrokontrolerji in strojno učenje

    STM32 mikrokontrolerji in strojno učenje

    O strojnem učenju (angl. machine learning, ML) v strežniških in mobilnih aplikacijah se že leta veliko govori, vendar se je zdaj še razširilo in postalo ključnega pomena na robnih napravah.

    Digi-Key Electronics
    Avtor: Rolf Horn

    Glede na to, da morajo biti robne naprave energetsko učinkovite, se morajo razvijalci naučiti in morajo znati razumeti, kako uvajati modele strojnega učenja v sisteme, ki temeljijo na mikrokontrolerjih. Modeli strojnega učenja, ki delujejo na mikrokontrolerju, se pogosto imenujejo tinyML. Žal uvajanje modela na mikrokontroler ni zanemarljiv podvig. Vseeno pa postaja uvajanje vse lažje in razvijalci brez specializiranega usposabljanja spoznavajo, da to lahko opravijo v razumnem času.

    V tem članku je opisano, kako lahko razvijalci začnejo s strojnim učenjem z uporabo mikrokontrolerjev STMicroelectronics[1] STM32. Prikazano je, kako ustvariti aplikacijo »Hello World« s pretvorbo modela TensorFlow Lite za mikrokontrolerje[2] za uporabo v STM32CubeIDE[3] z uporabo X-CUBE-AI[4].

    Uvod v primere uporabe tinyML
    TinyML je rastoče področje, ki prinaša moč strojnega učenja na naprave z omejenimi strojnimi zmogljivostmi in močjo, kot so mikrokontrolerji, običajno z uporabo globokih nevronskih omrežij. Te mikrokrmilne naprave lahko nato izvajajo model strojnega učenja in opravljajo dragoceno delo na robu. Obstaja več primerov uporabe, kjer je tinyML zdaj precej zanimiv.

    Prvi primer uporabe, ki je viden v številnih mobilnih napravah in opremi za avtomatizacijo doma, je prepoznavanje ključnih besed. Prepoznavanje ključnih besed vgrajeni napravi omogoča, da z mikrofonom zajame govor in zazna vnaprej naučene ključne besede. Model tinyML uporablja vnos časovne vrste, ki predstavlja govor in ga pretvori v govorne funkcije, običajno spektrogram. Spektrogram vsebuje informacije o frekvencah skozi čas. Spektrogram se nato vnese v nevronsko mrežo, ki je naučena za prepoznavanje določenih besed, rezultat pa je verjetnost, da bo določena beseda prepoznana. Na sliki 1 je prikazan primer, kako je videti ta postopek.

    Naslednji primer uporabe za tinyML, ki zanima mnoge razvijalce, je prepoznavanje slik. Mikrokontroler zajame slike s fotoaparata, ki se nato naložijo v vnaprej naučen model. Model lahko razbere, kaj je na sliki. Model lahko na primer ugotovi, ali je na sliki mačka, pes, riba itd. Odličen primer, kako se prepoznavanje slik uporablja na robu, je v videozvoncih. Videozvonec lahko pogosto zazna, ali je pri vratih prisoten človek ali pa je bil puščen paket.

    Zadnji primer zelo priljubljene uporabe je uporaba tinyML za predvidljivo vzdrževanje. Predvidljivo vzdrževanje uporablja strojno učenje za predvidevanje stanja opreme na podlagi zaznavanja nepravilnosti, algoritmov za razvrščanje in modelov za predvidevanje. Tudi tu je na voljo veliko možnosti uporabe, od sistemov za ogrevanje, prezračevanje in klimatizacijo pa do opreme za tovarne.

    Medtem ko so zgornji trije primeri uporabe trenutno najpriljubljenejši za tinyML, je nedvomno še veliko potencialnih primerov uporabe, ki jih razvijalci lahko odkrijejo. Tukaj je nekaj predlogov:

    • klasifikacija kretenj,
    • zaznavanje nepravilnosti,
    • čitalnik analognega števca,
    • vodenje in nadzor,
    • zaznavanje paketov.

    Ne glede na primer uporabe je najboljši način za začetek seznanjanja s tinyML z aplikacijo »Hello World«, ki pomaga razvijalcem naučiti se in razumeti osnovni proces, s katerim lahko postavijo delujoč minimalni sistem. Za zagon modela tinyML na STM32 mikrokontrolerju obstaja pet obveznih korakov:
    1: zajemanje podatkov
    2: označevanje podatkov
    3: učenje nevronskega omrežja
    4: pretvorba modela
    5: zagon modela na mikrokontrolerju

    Zajemanje, označevanje in učenje modela “Hello World”
    Razvijalci imajo na splošno na voljo veliko možnosti za zajemanje in označevanje podatkov, potrebnih za učenje svojega modela. Prvič, na spletu je na voljo veliko podatkovnih baz za učenje. Razvijalci lahko iščejo podatke, ki jih je nekdo zbral in označil. Za osnovno prepoznavanje slik je na primer na voljo CIFAR-10 ali ImageNet. Za usposabljanje modela za prepoznavanje nasmehov na fotografijah je prav tako na voljo tudi zbirka slik. Spletni repozitoriji podatkov so brez dvoma odličen začetek.

    Če zahtevani podatki še niso javno dostopni na internetu, potem razvijalcem ostaja druga možnost, in sicer da ustvarijo svoje podatke. Za ustvarjanje naborov podatkov se lahko uporabi Matlab ali neko drugo orodje. Če samodejno ustvarjanje podatkov ni opcija, je to mogoče izvesti ročno. Če pa se vse skupaj zdi preveč zamudno, je na internetu na voljo nekaj naborov podatkov, ki jih je mogoče kupiti. Zbiranje podatkov je pogosto najbolj vznemirljiva in zanimiva možnost, vendar je za to treba opraviti največji delovni vložek.

    Na primeru »Hello World«, ki je predstavljen v tem članku, je mogoče videti, kako model usposobiti za ustvarjanje sinusnega vala in ga vnesti v STM32. Primer sta sestavila Pete Warden in Daniel Situnayake kot del njunega dela v Googlu na TensorFlow Lite za mikrokontrolerje. To olajša delo, saj sta sestavila preprost javni vodnik o zajemanju, označevanju in učenju modela. Najti ga je mogoče na portalu Github tukaj[5]; na tej lokaciji je treba klikniti gumb »Run in Google Colab« (Zagon v Google Colab). Google Colab, okrajšano za Google Collaboratory, omogoča razvijalcem pisanje in izvajanje Python jezika v brskalniku brez konfiguracije in omogoča brezplačen dostop do Googlovih grafičnih procesnih enot.

    Rezultat učnega primera bo vključeval dve različni datoteki modela: model.tflite TensorFlow, ki je kvantiziran za mikrokontrolerje, in model_no_quant.tflite, ki ni kvantiziran. Kvantizacija označuje, kako se aktivacije in odmik modela številsko shranjujejo. Kvantizirana različica proizvaja manjši model, ki je bolj primeren za mikrokontroler. Za radovedne bralce so rezultati naučenega modela v primerjavi z dejanskimi rezultati sinusnega vala prikazani na sliki 2. Rezultat modela je v rdeči barvi. Rezultat sinusnega vala ni popoln, vendar deluje dovolj dobro za program »Hello World«.

    Izbira razvojne plošče
    Pred pretvorbo modela TensorFlow za delovanje na mikrokontrolerju, je treba izbrati mikrokontroler za uvajanje v modelu. Ta članek se osredotoča na STM32 mikrokontrolerje, ker ima STMicroelectronics veliko tinyML/ML orodij, ki dobro delujejo za pretvarjanje in delovanje modelov. Poleg tega ima STMicroelectronics široko paleto delov, združljivih s svojimi orodji za strojno učenje (slika 3).

    Če imate kakšno od teh plošč pri roki, je kot nalašč za zagon aplikacije »Hello World«. Za tiste, ki želijo od tega primera več in se želijo lotiti nadzora nad kretnjami ali prepoznavanja ključnih besed, naj izberejo vozlišče Discovery IoT STM32 B-L4S5I-IOT01A[6] (slika 4).

    Ta plošča ima procesor ARM Cortex-M4, ki temelji na seriji STM32L4+. Procesor ima 2 megabajta (Mbajta) Flash pomnilnika in 640 kilobajtov (Kbajtov) RAM-a, kar zagotavlja dovolj prostora za tinyML modele. Modul je prilagodljiv za eksperimente primerov uporabe tinyML, ker ima vgrajen tudi MEMS mikrofon STMicroelectronics MP34DT01[7], ki se lahko uporablja za razvoj aplikacije prepoznavanja ključnih besed. Poleg tega se lahko vgrajeni triosni merilnik pospeška LIS3MDLTR[8], prav tako iz podjetja STMicroelectronics, uporablja za odkrivanje kretenj na podlagi tinyML.

    Pretvarjanje in zagon modela TensorFlow Lite z uporabo STM32Cube.AI
    Ko imajo razvijalci v arzenalu razvojno ploščo, ki se lahko uporablja za zagon tinyML modela, lahko začnejo pretvarjati TensorFlow Lite model v nekaj, kar lahko deluje na mikrokontrolerju. TensorFlow Lite model lahko deluje neposredno na mikrokontrolerju, vendar za obdelavo potrebuje ustrezno okolje.

    Ko se model izvaja, je treba izvesti vrsto funkcij. Te funkcije se začnejo z zbiranjem podatkov senzorjev, ki se nato filtrirajo ekstrahirajo se potrebne funkcije in se dovedejo v model. Model bo ponudil rezultat, ki ga je nato mogoče nadalje filtrirati, nato pa se običajno izvede neko dejanje. Na sliki 5 je prikazan pregled, kako je ta postopek videti.

    Vtičnik X-CUBE-AI za STM32CubeMx zagotavlja izvajalno okolje za interpretacijo TensorFlow Lite modela in ponuja alternativna trajanja izvajanja in orodja za pretvorbo, ki jih lahko uporabijo razvijalci. X-CUBE-AI vtičnik ni privzeto omogočen v projektu. Vendar pa je po ustvarjanju novega projekta in inicializaciji plošče v razdelku Software Packs (Paketi programske opreme) -> Select Components (Izbira komponent) na voljo možnost, da se omogoči čas izvajanja umetne inteligence. Na voljo je več možnosti; poskrbite, da se za ta primer uporablja Application template (Predloga aplikacije), kot je prikazano na sliki 6.

    Ko je omogočen X-CUBE-AI, se v verigi orodij pojavi kategorija STMicroelectronics.X-CUBE-AI. S klikom na kategorijo bo razvijalec lahko izbral datoteko modela, ki jo je ustvaril, in določil parametre modela, kot je prikazano na sliki 7. Gumb za analizo bo analiziral tudi model in razvijalcem zagotovil informacije o RAM-u, ROM-u in izvedbenem ciklu. Zelo priporočljivo je, da razvijalci primerjajo možnosti Keras in TFLite modelov. Na modelu sinusnega vala, ki je majhen, ne bo videti velike razlike, bo pa opazna. Projekt je nato mogoče ustvariti s klikom na »Generate code« (Ustvari kodo).

    Generator kode bo inicializiral projekt in izvajalno okolje za tinyML model. Vendar pa se privzeto nič ne vnaša v model. Razvijalci morajo dodati kodo, da zagotovijo vhodne vrednosti modela (vrednosti x), ki jih bo model nato razlagal in uporabljal za ustvarjanje sinusnih vrednosti y. Nekaj kode je treba dodati funkcijama acquire_and_process_data in post_process, kot je prikazano na sliki 8.

    Na tej točki je primer zdaj pripravljen za izvajanje. Opomba: dodajte nekaj printf ukazov, da dobite rezultat modela za hitro preverjanje. Hitri rezultati zbiranja in uvedbe v modelu tinyML »Hello World«, ki se izvaja. Pridobivanje rezultata modela za celoten cikel prikaže sinusni val, prikazan na sliki 9. Ni popoln, vendar je odličen za prvo tinyML aplikacijo. Od tu bi razvijalci lahko povezali rezultat na modulator širine impulza in ustvarili sinusni val.

    Namigi in nasveti za iskanje in odpravljanje napak v ugnezdenem sistemu
    Razvijalci, ki želijo začeti s strojnim učenjem na sistemih, ki temeljijo na mikrokontrolerjih, bodo imeli kar nekaj dela, da bodo lahko svojo prvo tinyML aplikacijo privedli do delovanja. Vendar pa je treba upoštevati več nasvetov in trikov, ki lahko poenostavijo in pospešijo njihov razvoj:
    Oglejte si TensorFlow Lite »Hello World« primer za mikrokontrolerje korak po koraku, vključno z Google Colab datoteko. Vzemite si nekaj časa, da prilagodite parametre in razumete, kako vplivajo na naučeni model.
    Uporabite kvantizirane modele za mikrokontrolerske aplikacije. Kvantizirani model je stisnjen za delo z uint8_t in ne z 32-bitnimi števili s plavajočo vejico. Posledično bo model manjši in se bo izvajal hitreje.
    Raziščite dodatne primere v repozitoriju TensorFlow Lite za mikrokontrolerje. Drugi primeri vključujejo prepoznavanje kretenj in prepoznavanje ključnih besed.
    Vzemite primer »Hello World« in povežite rezultat modela na modulator širine impulza in nizkoprepustni filter, da vidite rezultat sinusnega vala. Poskusite s časom izvajanja za povečanje in zmanjšanje frekvence sinusnega vala.
    Izberite razvojno ploščo, ki vključuje »dodatne« senzorje, ki bodo omogočili preizkušanje široke palete aplikacij strojnega učenja.
    Ne glede na to, koliko je zbiranje podatkov lahko zabavno, je za učenje modela na splošno lažje podatkovno bazo kupiti ali uporabiti odprtokodno podatkovno bazo.

    Razvijalci, ki sledijo tem nasvetom in trikom, bodo prihranili precej časa in živcev pri pripravi svoje aplikacije.

    Zaključek
    Strojno učenje je prišlo do roba omrežja, glavni cilj pa so sistemi z omejenimi strojnimi zmogljivostmi, ki temeljijo na mikrokontrolerjih. Najnovejša orodja omogočajo pretvorbo in optimizacijo modelov strojnega učenja za delovanje na sistemih v realnem času. Kot je prikazano, je vzpostavitev modela na STM32 razvojni plošči kljub zapletenosti razmeroma preprosta. Čeprav se ta članek osredotoča na preprost model, ki generira sinusni val, je mogoče izvesti veliko bolj zapletene modele, kot sta prepoznavanje kretenj in prepoznavanje ključnih besed.

    Viri:
    https://bit.ly/3BpoP0c
    https://bit.ly/3QUWwMT
    https://bit.ly/2W52EGw
    https://bit.ly/3qLLgHQ
    https://bit.ly/3UkA96j
    https://bit.ly/3Ue0JxQ
    https://bit.ly/3eZB9fU
    https://bit.ly/3RX1XMz

    https://www.digikey.com