Jak spustit model strojového učení „Hello World“ na mikrokontrolérech STM32
Contributed By DigiKey's North American Editors
2022-08-18
Strojové učení (ML) je již léta v módě u serverových a mobilních aplikací, ale nyní migrovalo a stalo se kritickým na okrajových zařízeních. Vzhledem k tomu, že od okrajových zařízení se očekává vysoká energetická účinnost, vývojáři se musí naučit a pochopit, jak nasadit modely ML do systémů založených na mikrokontrolérech. ML modely běžící na mikrokontroléru se často označují jako tinyML. Bohužel nasazení modelu do mikrokontroléru není triviální záležitost. Přesto je to stále snazší a vývojáři bez specializovaného školení zjistí, že to mohou udělat včas.
Tento článek pojednává o tom, jak vývojáři vestavěných aplikací mohou začít se strojovým učením na mikrokontrolérech STM32 od společnosti STMicroelectronics. Aby tak mohli učinit, ukazuje, jak vytvořit aplikaci „Hello World“ převodem modelu TensorFlow Lite pro mikrokontroléry pro použití v mikrokontroléru STM32CubeIDE pomocí softwaru X-CUBE-AI.
Úvod do případů použití tinyML
TinyML je rostoucí obor, který přináší sílu strojového učení do zařízení s omezenými zdroji a výkonem, jako jsou mikrokontroléry, obvykle využívající hluboké neuronové sítě. Tato zařízení s mikrokontrolérem pak mohou provozovat model strojového učení a vykonávat hodnotnou práci na okraji. Existuje několik případů použití, kdy je tinyML nyní docela zajímavé.
První případ použití, který se vyskytuje u mnoha mobilních zařízení a zařízení pro automatizaci domácnosti, je detekce klíčových slov. Detekce klíčových slov umožňuje vestavěnému zařízení používat mikrofon k zachycení řeči a detekci předem připravených klíčových slov. Model tinyML používá vstup časové řady, která reprezentuje řeč a převádí ji na řečové rysy, obvykle spektrogram. Spektrogram obsahuje informace o frekvenci v čase. Spektrogram je pak přiveden do neuronové sítě trénované na detekci konkrétních slov. Výsledkem je pravděpodobnost detekce určitého slova. Obrázek 1 ukazuje příklad, jak tento proces vypadá.
Obrázek 1: detekce klíčových slov je zajímavý případ použití modelu tinyML. Vstupní řeč je převedena na spektrogram a poté přivedena do trénované neuronové sítě, aby se zjistilo, zda je přítomno předem natrénované slovo. (zdroj obrázku: Arm®)
Dalším případem použití tinyML, o který se mnoho vývojářů vestavěných aplikací zajímá, je rozpoznávání obrázků. Mikrokontrolér zachycuje snímky z kamery, které jsou poté vloženy do předem trénovaného modelu. Model dokáže rozeznat, co je na obrázku. Například by bylo možné určit, zda existuje kočka, pes, ryba a tak dále. Ideálním příkladem použití rozpoznávání obrazu na okraji jsou video zvonky. Video zvonek často dokáže zjistit, zda je u dveří přítomen člověk nebo zda v něm byla zanechána zásilka.
Jedním z posledních případů použití s vysokou popularitou je použití tinyML pro prediktivní údržbu. Prediktivní údržba využívá strojové učení k předpovídání stavů zařízení na základě detekce abnormalit, klasifikačních algoritmů a prediktivních modelů. Opět je k dispozici celá řada aplikací, od systémů HVAC po vybavení výrobních hal.
Zatímco výše uvedené tři případy použití jsou v současné době oblíbené pro tinyML, existuje nepochybně mnoho potenciálních případů použití, které mohou vývojáři najít. Zde je stručný seznam:
- Klasifikace gest
- Detekce anomálií
- Analogová čtečka měřidel
- Navádění a ovládání (GNC)
- Detekce balíčků
Bez ohledu na případ použití představuje nejlepší způsob seznámení se s tinyML, aplikace „Hello World“, která vývojářům pomůže naučit se a pochopit základní postup zprovoznění minimálního systému. Ke spuštění modelu tinyML na mikrokontroléru STM32 je potřeba pět kroků:
- Zachycení dat
- Označení dat
- Učení neuronové sítě
- Převod modelu
- Spuštění modelu na mikrokontroléru
Zachycení, označení a školení modelu „Hello World“
Vývojáři mají obecně k dispozici mnoho možností, jak zachytit a označit data potřebná k trénování svého modelu. Za prvé, existuje mnoho online školicích databází. Vývojáři mohou vyhledávat data, která někdo shromáždil a označil. Například pro základní detekci obrazu je k dispozici datová sada CIFAR-10 nebo ImageNet. K dispozici je též sada obrázků pro naučení modelu detekovat úsměvy na fotografiích. Jednoznačně ideálním místem, kde začít, jsou online datová úložiště.
Pokud požadovaná data dosud nebyla veřejně zdostupněná na internetu, pak jako další možnost si vývojáři mohou vygenerovat vlastní data. Pro generování datových sad lze použít Matlab nebo nějaký jiný nástroj. Pokud automatické generování dat není možné, lze jej provést ručně. A konečně, pokud se toto vše zdá příliš časově náročné, některé datové sady lze zakoupit na internetu. Shromažďování dat je často tou nejzajímavější a nejzajímavější možností, ale je také nejpracnější.
Zde zkoumaný příklad „Hello World“ ukazuje, jak trénovat model pro generování sinusovky a nasadit jej do STM32. Tento příklad dali dohromady Pete Warden a Daniel Situnayake v rámci své práce ve společnosti Google na platformě TensorFlow Lite pro mikrokontroléry. Díky tomu je práce snazší, protože sestavili jednoduchý, veřejný návod na zachycení, označení a školení modelu. Nalezete jej na platformě Github zde; po vstupu musejí vývojáři kliknout na tlačítko „Spustit v Google Colab“. Google Colab, zkratka pro Google Collaboratory, umožňuje vývojářům psát a spouštět jazyk Python v prohlížeči s nulovou konfigurací a poskytuje bezplatný přístup k GPU Google.
Výstup z procházení příkladu školení bude obsahovat dva různé soubory modelu - model.tflite TensorFlow, který je kvantován pro mikrokontroléry, a model_no_quant.tflite, který není kvantován. Kvantování ukazuje, jak jsou aktivace modelu a zkreslení numericky uloženy. Kvantovaná verze vytváří menší model, který je vhodnější pro mikrokontrolér. Pro zvídavé čtenáře jsou výsledky trénovaného modelu v porovnání se skutečnými výsledky sinusovky znázorněny na obrázku 2. Výstup modelu je v červené barvě. Sinusový výstup není dokonalý, ale pro program „Hello World“ funguje dostatečně dobře.
Obrázek 2: Porovnání předpovědí modelu TensorFlow pro sinusovou vlnu se skutečnými hodnotami. (Zdroj obrázku: společnost Beningo Embedded Group)
Výběr vývojové desky
Než se budeme zabývat tím, jak převést model TensorFlow, aby běžel na mikrokontroléru, je třeba vybrat mikrokontrolér pro nasazení v modelu. Tento článek se zaměří na mikrokontroléry STM32, protože společnost STMicroelectronics nabízí mnoho nástrojů tinyML/ML, které dobře fungují pro převod a provoz modelů. Společnost STMicroelectronics dále nabízí širokou škálu součástek kompatibilních s jejich nástroji strojového učení (obrázek 3).
Obrázek 3: Zde jsou znázorněny mikrokontroléry a mikroprocesorová jednotka (MPU), které aktuálně podporuje ekosystém umělé inteligence STMicroelectronics. (Zdroj obrázku: STMicroelectronics)
Pokud se jedna z těchto desek povaluje po kanceláři, je ideální pro zprovoznění aplikace „Hello World“. Nicméně pro ty, kteří chtějí jít nad rámec tohoto příkladu a provádět ovládání gesty nebo detekci klíčových slov, je určena platforma STM32B-L4S5I-IOT01A Discovery IoT Node (obrázek 4).
Tato deska je osazena procesorem Arm Cortex®-M4 založeným na řadě STM32L4+. Procesor má 2 megabajty (Mbajty) flash paměti a 640 kilobajtů (kbytů) paměti RAM, což poskytuje dostatek místa pro modely tinyML. Vzhledem k tomu, že modul je rovněž vybaven mikrofonem s mikroelektromechanickými obvody (MEMS) MP34DT01 od společnosti STMicroelectronics, který lze použít k vývoji aplikací na detekci klíčových slov, je přizpůsobitelný pro experimenty s případy použití tinyML. Vestavěný tříosý akcelerometr LIS3MDLTR, rovněž od společnosti STMicroelectronics, lze dále používat k detekci gest na bázi modelu tinyML.
Obrázek 4: STM32 B-L4S5I-IOT01A Discovery IoT Node je adaptabilní experimentální platforma pro tinyML díky integrovanému procesoru Arm Cortex-M4, MEMS mikrofonu a tříosému akcelerometru. (Zdroj obrázku: STMicroelectronics)
Převod a spuštění modelu TensorFlow Lite pomocí STM32Cube.AI
S využitím vývojové desky, pomocí které lze spouštět model tinyML, mohou nyní vývojáři začít převádět model TensorFlow Lite na něco, co lze spouštět na mikrokontroléru. Model TensorFlow Lite může běžet přímo na mikrokontroléru, ale ke zpracování potřebuje prostředí runtime.
Je-li model spuštěn, je třeba provést řadu funkcí. Tyto funkce začínají sběrem dat senzoru, jejich filtrováním, extrahováním nezbytných funkcí a jejich předáním do modelu. Model poskytne výsledek, který může být dále filtrován, poté se obvykle provede nějaká akce. Obrázek 5 znázorňuje přehled tohoto procesu.
Obrázek 5: Znázornění toku dat ze senzorů do modulu runtime a poté na výstup v aplikaci tinyML. (Zdroj obrázku: Beningo Embedded Group)
Zásuvný modul X-CUBE-AI pro STM32CubeMx poskytuje prostředí runtime pro interpretaci modelu TensorFlow Lite a nabízí alternativní prostředí runtime a konverzní nástroje, které mohou vývojáři využívat. Zásuvný modul X-CUBE-AI není v projektu ve výchozím nastavení povolen. Po vytvoření nového projektu a inicializaci desky je však v části Softwarové balíčky-> Vybrat komponenty možnost povolit modul runtime AI. Zde je několik možností; ujistěte se, že pro tento příklad je použita šablona aplikace, jak je znázorněno na obrázku 6.
Obrázek 6: Zásuvný modul X-CUBE-AI je třeba povolit pomocí šablony aplikace pro tento příklad. (Zdroj obrázku: Beningo Embedded Group)
Jakmile je povolen modul X-CUBE-AI, v sadě nástrojů se objeví kategorie STMicroelectronics X-CUBE-AI. Kliknutím na kategorii může vývojář vybrat soubor modelu, který vytvořil, a nastavit parametry modelu, jak je znázorněno na obrázku 7. Tlačítko analýzy také provede analýzu modelu a poskytne vývojářům informace o paměti RAM, ROM a cyklu provádění. Důrazně doporučujeme, aby vývojáři porovnali možnosti modelu Keras a TFLite. V příkladu modelu sinusového průběhu, který je malý, nebude rozdíl velký, bude však znatelný. Projekt vygenerujete kliknutím na tlačítko „Vygenerovat kód“.
Obrázek 7: Tlačítko analýzy poskytne vývojářům informace o paměti RAM, ROM a cyklu provádění. (Zdroj obrázku: Beningo Embedded Group)
Generátor kódu inicializuje projekt a sestavení v prostředí runtime pro model tinyML. Ve výchozím nastavení však do modelu nic nevstupuje. Vývojáři potřebují přidat kód, který poskytne vstupní hodnoty modelu - hodnoty x - které pak model interpretuje a použije ke generování hodnot sine y. K funkcím purchase_and_process_data a post_process je potřeba přidat několik úseků kódu, jak ukazuje obrázek 8.
Obrázek 8: Zobrazený kód připojí falešné vstupní hodnoty senzoru k modelu sinusové vlny. (Zdroj obrázku: Beningo Embedded Group)
V tomto okamžiku je příklad nyní připraven ke spuštění. Poznámka: přidejte několik příkazů printf, abyste získali výstup modelu pro rychlé ověření. Rychlá kompilace a nasazení vede ke spuštění modelu tinyML „Hello World“. Vytažením výstupu modelu po celý cyklus vznikne sinusovka zobrazená na obrázku 9. Není to dokonalé, ale na první aplikaci tinyML jde o vynikající výsledek. Odtud mohli vývojáři spojit výstup s modulátorem šířky pulzu (PWM) a generovat sinusovou vlnu.
Obrázek 9: Výstup sinusového modelu „Hello World“ při běhu na STM32. (Zdroj obrázku: Beningo Embedded Group)
Tipy a triky pro ML na vestavěných systémech
Pro vývojáře, kteří chtějí začít se strojovým učením na systémech založených na mikrokontrolérech, bude zprovoznění první aplikace tinyML poměrně velkým soustem. Je však třeba mít na paměti několik „tipů a triků“, které mohou jejich vývoj zjednodušit a urychlit:
- Projděte si příklad „Hello World“ na platformě TensorFlow Lite pro mikrokontroléry, včetně souboru Google Colab. Udělejte si čas na úpravu parametrů a pochopení, jak ovlivňují trénovaný model.
- Použijte kvantované modely pro aplikace mikrokontrolérů. Kvantovaný model je komprimován tak, aby pracoval s uint8_t spíše než s 32bitovými čísly s plovoucí desetinnou čárkou. V důsledku toho bude model menší a bude rychlejší.
- Prozkoumejte další příklady v úložišti TensorFlow Lite for Microcontrollers. Mezi další příklady patří detekce gest a detekce klíčových slov.
- Vytvořte příklad „Hello World“ připojením výstupu modelu k pulzně-šířkové modulaci (PWM) a filtru se spodní propustí, abyste viděli výslednou sinusovku. Experimentujte s dobou běhu pro zvýšení a snížení frekvence sinusové vlny.
- Vyberte vývojovou desku, která obsahuje „extra“ senzory, které umožní vyzkoušet širokou škálu aplikací strojového učení.
- Jakkoli je shromažďování dat zábavné, pro trénování modelu je obecně jednodušší zakoupit nebo použít open-source databázi.
Vývojáři, kteří se těmito „tipy a triky“ řídí, ušetří při zabezpečení své aplikace poměrně dost času i zklamání.
Závěr
ML se dostalo na okraj sítě a systémy založené na mikrokontrolérech s omezenými zdroji jsou hlavním cílem. Nejnovější nástroje umožňují modely ML převádět a optimalizovat pro provoz na systémech v reálném čase. Jak je ukázáno, uvedení modelu do provozu na vývojové desce STM32 je poměrně snadné, navzdory složitosti. Zatímco se diskuse zabýbala jednoduchým modelem generujícím sinusovou vlnu, existují mnohem složitější modely, jako je detekce gest a rozpoznávání klíčových slov.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




