Uruchamianie modelu uczenia maszynowego „Hello World” na mikrokontrolerach STM32

Przez: Jacob Beningo

Przekazane przez: Północnoamerykańscy redaktorzy DigiKey

Uczenie maszynowe (ML) jest obecne w zastosowaniach serwerowych i mobilnych od lat, ale teraz migrowało i stało się kluczowe w urządzeniach brzegowych. Biorąc pod uwagę, że urządzenia brzegowe muszą być energooszczędne, deweloperzy muszą zrozumieć i nauczyć się, jak wdrażać modele uczenia maszynowego w systemach opartych na mikrokontrolerach. Modele uczenia maszynowego działające na mikrokontrolerach są często określane mianem tinyML. Niestety wdrożenie modelu na mikrokontrolerze nie jest zadaniem łatwym. Jest to jednak coraz łatwiejsze i możliwe do wykonania we względnie krótkim czasie przez deweloperów bez specjalistycznego przeszkolenia.

W niniejszym artykule omówiono sposób, w jaki deweloperzy systemów wbudowanych mogą rozpocząć pracę z uczeniem maszynowym z użyciem mikrokontrolerów STM32 firmy STMicroelectronics. Dla przykładu zaprezentowano metodę tworzenia aplikacji „Hello World”, poprzez konwersję modelu TensorFlow Lite for Microcontrollers z przeznaczeniem do wykorzystania w mikrokontrolerze STM32CubeIDE przy użyciu X-CUBE-AI.

Wprowadzenie do zastosowań tinyML

tinyML to rozwijająca się technologia, która przenosi potencjał uczenia maszynowego na urządzenia o ograniczonych zasobach i niskim poborze mocy, takie jak mikrokontrolery, zwykle korzystające z głębokich sieci neuronowych. Mikrokontrolery te mogą następnie uruchamiać model uczenia maszynowego i wykonywać cenną pracę na urządzeniu brzegowym. Istnieje wiele przypadków użycia, w których wykorzystanie technologii tinyML jest obecnie dość interesujące.

Pierwszym z takich przypadków, który można zaobserwować w wielu urządzeniach mobilnych i sprzęcie automatyki domowej, jest wychwytywanie słów kluczowych. Funkcja wychwytywania słów kluczowych umożliwia wbudowanemu urządzeniu użycie mikrofonu do przechwytywania mowy i wykrywania wyuczonych słów kluczowych. Model tinyML wykorzystuje wejście szeregowe czasu, które reprezentuje mowę i konwertuje ją na funkcje mowy, zwykle spektrogram. Spektrogram zawiera informacje o częstotliwości w czasie. Następnie spektrogram jest przekazywany do sieci neuronowej przeszkolonej pod kątem wykrywania określonych słów, a wynikiem jest prawdopodobieństwo wykrycia określonego słowa. Ilustracja 1 przedstawia przykład tego procesu.

Ilustracja przedstawiająca wychwytywanie słów kluczowych jako interesujący przypadek wykorzystania technologii tinyML (kliknij, aby powiększyć)Ilustracja 1: ciekawym przypadkiem wykorzystania technologii tinyML jest wychwytywanie słów kluczowych. Sygnał wejściowy mowy jest przekształcany w spektrogram, a następnie wprowadzany do przeszkolonej sieci neuronowej w celu wykrycia, czy wstępnie wyuczone słowo wystąpiło. (Źródło ilustracji: Arm®)

Następnym przykładem zastosowania dla tinyML, interesującym dla wielu deweloperów systemów wbudowanych, jest rozpoznawanie obrazów. Mikrokontroler rejestruje obrazy z kamery, które następnie są wprowadzane do wcześniej przeszkolonego modelu. Model jest w stanie rozpoznać, co znajduje się na obrazie. Na przykład może określić, czy jest to kot, pies, ryba itd. Świetnym przykładem ilustrującym zastosowanie rozpoznawania obrazu w urządzeniach brzegowych są wideodomofony. Wideodomofon często potrafi wykrywać obecność człowieka przy drzwiach lub pozostawione przy nich przesyłki.

Ostatnim przedstawionym popularnym przykładem wykorzystania technologii tinyML jest konserwacja predykcyjna. Konserwacja predykcyjna wykorzystuje uczenie maszynowe do przewidywania stanów sprzętu w oparciu o wykrywanie anomalii, algorytmy klasyfikacji i modele predykcyjne. Również w tym przypadku możliwych jest wiele zastosowań - od instalacji klimatyzacji i wentylacji, aż po fabryczne urządzenia produkcyjne.

Trzy przytoczone powyżej przypadki wykorzystania technologii tinyML są obecnie bardzo popularne, ale niewątpliwie nie są jedynymi czekającymi na odkrycie przez deweloperów. Oto krótka lista innych:

  • Klasyfikacja gestów
  • Wykrywanie anomalii
  • Czytnik mierników analogowych
  • Prowadzenie i sterowanie (GNC)
  • Wykrywanie przesyłek

Bez względu na zastosowanie, najlepszym sposobem, aby zacząć zapoznawać się z technologią tinyML jest aplikacja „Hello World”, która pomaga deweloperom uczyć się i zrozumieć podstawowy proces, którego realizacja zaowocuje uruchomieniem systemu w minimalnej konfiguracji. Do uruchomienia modelu tinyML na mikrokontrolerze STM32 niezbędnych jest pięć etapów:

  1. Przechwytywanie danych
  2. Oznaczanie danych
  3. Szkolenie sieci neuronowej
  4. Konwersja modelu
  5. Uruchomienie modelu na mikrokontrolerze

Przechwytywanie, oznaczanie i szkolenie modelu „Hello World”

Deweloperzy mają zazwyczaj do wyboru wiele opcji pozwalających na przechwycenie i oznaczenie danych potrzebnych do szkolenia modelu. Po pierwsze, istnieje wiele internetowych szkoleniowych baz danych. Deweloperzy mogą wyszukiwać dane, które ktoś zebrał i oznaczył. Przykładowo na potrzeby podstawowego wykrywania obrazów dostępna jest sieć CIFAR-10 lub Image Net. Aby wyszkolić model do wykrywania uśmiechu na zdjęciach, dostępna jest także kolekcja zdjęć. Internetowe bazy danych są z oczywistych względów świetnym miejscem na rozpoczęcie pracy.

Jeśli wymagane dane nie zostały jeszcze udostępnione publicznie w Internecie, innym rozwiązaniem jest wygenerowanie przez deweloperów własnych danych. Do wygenerowania zestawów danych można użyć oprogramowania Matlab lub innego narzędzia. Jeśli nie ma możliwości automatycznego wygenerowania danych, można to zrobić ręcznie. Wreszcie, jeśli wszystko to wydaje się zbyt czasochłonne, istnieją zestawy danych dostępne do zakupu, również w Internecie. Gromadzenie danych jest często najbardziej ekscytującą i interesującą opcją, ale jest i również najbardziej pracochłonną.

Badany tutaj przykład „Hello World” pokazuje, jak wyszkolić model w celu wygenerowania fali sinusoidalnej i wdrożenia jej w mikrokontrolerze STM32. Przykład został opracowany wspólnie przez Pete'a Wardena i Daniela Situnayake’a w ramach ich pracy w Google nad biblioteką TensorFlow Lite dla mikrokontrolerów. Przygotowali oni prosty, dostępny publicznie samouczek na temat przechwytywania, oznaczania i szkolenia modeli, co ułatwia pracę. Można go znaleźć w witrynie Github tutaj. Po przejściu do witryny należy kliknąć przycisk „Run in Google Colab” (Uruchom w Google Colab). Google Colab, skrót od Google Collaboratory, pozwala deweloperom pisać i wykonywać kody w języku Python w przeglądarce bez konfiguracji i zapewnia bezpłatny dostęp do procesorów graficznych Google.

Efektem wykonania szkoleniowego przykładu będzie opracowanie dwóch różnych plików modeli. Modelu TensorFlow model.tflite skwantyzowanego pod kątem mikrokontrolerów, oraz modelu model_no_quant.tflite, który nie jest skwantyzowany. Kwantyzacja wskazuje, w jaki sposób aktywacje modelu i odchylenie są przechowywane numerycznie. Wersja z kwantyzacją stanowi mniejszy model, bardziej odpowiedni dla mikrokontrolerów. Dla zainteresowanych czytelników, porównanie wyników uzyskanych przez przeszkolony model z wynikami rzeczywistej fali sinusoidalnej można zobaczyć na ilustracji 2. Wynik modelu oznaczono kolorem czerwonym. Wyjściowa fala sinusoidalna nie jest doskonała, ale rezultat jest wystarczająco dobry dla programu „Hello World”.

Wykres przewidywań modelu TensorFlow dla fali sinusoidalnej w porównaniu z rzeczywistymi wartościamiIlustracja 2: porównanie przewidywań modelu TensorFlow dla fali sinusoidalnej z rzeczywistymi wartościami. (Źródło ilustracji: Beningo Embedded Group)

Dobór płytki rozwojowej

Przed rozpoczęciem konwersji modelu TensorFlow na mikrokontroler należy wybrać mikrokontroler do wdrożenia w modelu. W niniejszym artykule skupiliśmy się na mikrokontrolerach STM32, ponieważ firma STMicroeletronics posiada wiele narzędzi tinyML/ML, które dobrze sprawdzają się w konwertowaniu i uruchamianiu modeli. Ponadto firma STMicroeletronics posiada szeroką gamę części kompatybilnych z narzędziami do uczenia maszynowego (ilustracja 3).

Tabela ekosystemu sztucznej inteligencji (AI) firmy STMicroelenics (kliknij, aby powiększyć)Ilustracja 3: mikrokontrolery i jednostka mikroprocesorowa (MPU) obecnie obsługiwane przez ekosystem sztucznej inteligencji (AI) firmy STMicroelectronics. (Źródło ilustracji: STMicroelectronics)

Jeśli taka płytka zalega gdzieś w biurze, idealnie nada się do uruchomienia aplikacji „Hello World”. Jednak ci, którzy chcą wyjść poza omawiany przykład i wdrożyć się w sterowanie gestami lub wychwytywanie słów kluczowych, powinni wybrać węzeł badawczy Internetu rzeczy (IoT) STM32 B-L4S5I-IOT01A (ilustracja 4).

Płytka ta jest wyposażona w procesor Arm Cortex®-M4 oparty na serii STM32L4+. Procesor posiada 2MB pamięci flash i 640kB pamięci RAM, co zapewnia dużo miejsca dla modeli TinyML. Moduł można dostosować do eksperymentów z użyciem tinyML, ponieważ posiada również mikrofon mikroelektromechaniczny (MEMS) MP34DT01 firmy STMicroelectronics, który można wykorzystać do rozwoju aplikacji do wychwytywania słów kluczowych. Ponadto wbudowany przyspieszeniomierz trójosiowy LIS3MDLTR, również firmy STMicroeletronics, może być używany do wykrywania gestów w oparciu o tinyML.

Ilustracja przedstawiająca węzeł badawczy Internetu rzeczy (IoT) STM32 B-L4S5I-IOT01A firmy STMicroeletronicsIlustracja 4: węzeł badawczy Internetu rzeczy (IoT) STM32 B-L4S5I-IOT01A jest elastyczną platformą do eksperymentowania z technologią tinyML posiadającą wbudowany procesor Arm Cortex-M4, mikrofon MEMS i przyspieszeniomierz trójosiowy. (Źródło ilustracji: STMicroelectronics)

Konwertowanie i uruchamianie modelu TensorFlow Lite przy użyciu STM32Cube.AI

Dysponując płytką rozwojową, która pozwala na uruchomienie modelu tinyML, deweloperzy mogą teraz zacząć konwertować model TensorFlow Lite na model obsługiwany na mikrokontrolerze. Model TensorFlow Lite może być uruchamiany bezpośrednio na mikrokontrolerze, ale do jego przetworzenia potrzebne jest środowisko uruchomieniowe.

Po uruchomieniu modelu należy wykonać szereg funkcji. Do funkcji tych należy zbieranie danych czujnika, następnie filtrowanie, wyodrębnianie niezbędnych funkcji i wprowadzanie ich do modelu. Model generuje wynik, który następnie może być dalej filtrowany, a następnie (zwykle) podejmowane jest jakieś działanie. Ilustracja 5 przedstawia ogólny zarys tego procesu.

Schemat przepływu danych z czujników do środowiska uruchomieniowego, aż do rezultatu wyjściowegoIlustracja 5: schemat przepływu danych w technologii tinyML z czujników do środowiska uruchomieniowego, aż do rezultatu wyjściowego. (Źródło ilustracji: Beningo Embedded Group)

Wtyczka X-CUBE-AI do narzędzia STM32CubeMx zapewnia środowisko uruchomieniowe dla interpretacji modelu TensorFlow Lite i oferuje alternatywne narzędzia wykonawcze oraz narzędzie do konwersji, z których mogą korzystać deweloperzy. Wtyczka X-CUBE-AI nie jest domyślnie włączona w projekcie. Jednak po utworzeniu nowego projektu i zainicjowaniu płytki, w sekcji „Software Packs -> Select Components (Pakiety oprogramowania -> Wybierz komponenty), istnieje opcja włączenia środowiska wykonawczego sztucznej inteligencji. W tym miejscu mamy do wyboru kilka opcji. Należy pamiętać, aby w tym przykładzie użyć szablonu aplikacji, jak ukazano na ilustracji 6.

Ilustracja przedstawiająca wtyczkę X-CUBE-AI, która wymaga włączeniaIlustracja 6: w tym przykładzie wtyczka X-CUBE-AI wymaga włączenia przy użyciu szablonu aplikacji. (Źródło ilustracji: Beningo Embedded Group)

Po włączeniu wtyczki X-CUBE-AI w łańcuchu narzędzi pojawi się kategoria wtyczki X-CUBE-AI firmy STMicroelectronics. Kliknięcie kategorii umożliwi deweloperowi wybór utworzonego pliku modelu i ustawienie parametrów modelu, jak to ukazuje ilustracja 7. Przycisk „Analyze” (Analizuj) służy do analizy modelu i pozwala sprawdzić informacje o pamięci RAM, ROM i cyklu wykonania. Zdecydowanie zaleca się, aby deweloperzy porównali opcje modeli Keras i TFLite. W przykładowym niewielkim modelu fali sinusoidalnej różnica nie będzie duża, choć będzie zauważalna. Następnie projekt można wygenerować, klikając przycisk „Generate code” (Generuj kod).

Ilustracja przedstawiająca informacje o pamięci RAM, ROM i o cyklu wykonaniaIlustracja 7: przycisk „Analyze” (Analizuj) służy do wyświetlania informacji o pamięci RAM, ROM i cyklu wykonywania. (Źródło ilustracji: Beningo Embedded Group)

Generator kodu zainicjuje projekt i zbuduje środowisko wykonawcze dla modelu tinyML. Jednak domyślnie do modelu nie są wprowadzane żadne dane. Deweloperzy muszą dodać kod, aby wprowadzić wartości wejściowe x modelu, które model zinterpretuje i których będzie używać do generowania wartości y sinusoidy. Dla funkcji acquire_and_process_data i post_process, należy dodać kilka linijek kodu, jak pokazano na ilustracji 8.

Ilustracja przedstawiająca kod łączący sztuczne wartości wejściowe czujnikaIlustracja 8: przedstawiony kod połączy sztuczne wartości wejściowe czujnika z modelem fali sinusoidalnej. (Źródło ilustracji: Beningo Embedded Group)

W tym momencie przykład jest gotowy do uruchomienia. Uwaga: aby uzyskać model wyjściowy do szybkiej weryfikacji, należy dodać instrukcje prinprf. Szybka kompilacja i wdrożenie powoduje uruchomienie modelu tinyML „Hello World”. Zastosowanie modelu do pełnego cyklu powoduje uzyskanie fali sinusoidalnej przedstawionej na ilustracji 9. Nie jest ona doskonała, ale idealnie nadaje się do pierwszego zastosowania tinyML. Na tym etapie deweloperzy mogą powiązać wyjście z modulatorem szerokości impulsu (PWM) i wygenerować falę sinusoidalną.

Ilustracja przedstawiająca rezultat uruchomienia modelu fali sinusoidalnej „Hello World” (kliknij, aby powiększyć)Ilustracja 9: rezultat uruchomienia modelu fali sinusoidalnej „Hello World” podczas pracy na mikrokontrolerze STM32. (Źródło ilustracji: Beningo Embedded Group)

Wskazówki i porady dotyczące uczenia maszynowego w systemach wbudowanych

W przypadku deweloperów, którzy chcą rozpocząć pracę z uczeniem maszynowym na systemach opartych na mikrokontrolerach, uruchomienie pierwszej realizacji w technologii tinyML będzie wymagać sporo pracy. Istnieje jednak kilka wskazówek i porad, które mogą uprościć i przyspieszyć prace rozwojowe:

  • Zapoznaj się z przykładem wykorzystania biblioteki TensorFlow Lite for Microcontrollers do napisania programu “Hello World”, pamiętając też o pliku Google Colab. Poświęć trochę czasu na ustawianie parametrów i zrozumienie, w jaki sposób wpływają one na przeszkolony model.
  • Wykorzystuj modele z kwantyzacją w zastosowaniach z mikrokontrolerami. Model kwantyzowany jest skompresowany pod kątem pracy z formatem uint8_t, a nie 32-bitowymi liczbami zmiennoprzecinkowymi. W rezultacie taki model będzie mniejszy i szybszy.
  • Zapoznaj się z dodatkowymi przykładami w repozytorium „TensorFlow Lite for Microcontrollers”. Inne przykłady dotyczą m.in. wykrywania gestów i wychwytywania słów kluczowych.
  • Wykorzystaj przykład „Hello World”, przepuszczając rezultat uruchomienia modelu przez modulator szerokości impulsu (PWM) i filtr dolnoprzepustowy, aby zobaczyć powstałą falę sinusoidalną. Eksperymentuj ze środowiskiem uruchomieniowym, aby zwiększyć i zmniejszyć częstotliwość fali sinusoidalnej.
  • Wybierz płytkę rozwojową z czujnikami dodatkowymi, które umożliwią wypróbowywanie szerokiej gamy zastosowań uczenia maszynowego.
  • Gromadzenie danych może sprawiać wiele frajdy, jednak zwykle do przeszkolenia modelu łatwiej jest kupić bazę danych lub wykorzystać jakąś otwartoźródłową.

Deweloperzy, którzy zastosują się do powyższych wskazówek i porad, oszczędzą sobie sporo czasu i irytacji przy zabezpieczaniu swoich rozwiązań.

Podsumowanie

Uczenie maszynowe (ML) dotarło do brzegowego środowiska sieci, a jego głównym celem są systemy oparte na mikrokontrolerach charakteryzujące się ograniczonymi zasobami. Najnowsze narzędzia umożliwiają konwertowanie i optymalizację modeli uczenia maszynowego do pracy w systemach działających w czasie rzeczywistym. Pomimo istniejących złożoności, stworzenie i uruchomienie modelu na płytce rozwojowej STM32 jest stosunkowo łatwe. Powyżej omówiono prosty model generujący falę sinusoidalną, choć możliwe jest opracowanie znacznie bardziej złożonych modeli, np. do wykrywania gestów czy wychwytywania słów kluczowych.

DigiKey logo

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.

Informacje o autorze

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo is an embedded software consultant. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees, including a Masters of Engineering from the University of Michigan.

Informacje o wydawcy

Północnoamerykańscy redaktorzy DigiKey