TinyML - Maschinelles Lernen für Mikrocontroller

Was ist TinyML?

Künstliche Intelligenz (KI) und Maschinelles Lernen (ML) haben in den letzten Jahren Schlagzeilen gemacht. Tiny Machine Learning (TinyML) ist ein aufstrebendes Gebiet innerhalb der KI und des ML, das sich auf die Ausführung von ML-Algorithmen auf ressourcenbeschränkten Geräten wie Embedded Systemen konzentriert.

Der Hauptvorteil von TinyML liegt in der Fähigkeit, ML-Modelle direkt auf diesen Edge-Geräten auszuführen, anstatt Daten zur Verarbeitung in die Cloud zu senden. Dies bietet mehrere Vorteile:

  • Niedrigere Latenzzeiten
  • Geringerer Energieverbrauch
  • Höhere Privatsphäre
  • Bessere Verfügbarkeit und Zuverlässigkeit

Die Modelle müssen gleichwohl mit deutlich kleineren Speichern auskommen können, sodass der Aufbau von ML-Modellen mit einem Umfang von wenigen Kilobyte notwendig wird. Zusätzlich wird durch die lokale Datenverarbeitung eine optimale Ausnutzung der Maschinenleistung notwendig, da die verfügbare Leistung nicht beliebig skaliert werden kann.

In diesem Beispiel erstellen wir mithilfe von Edge Impulse ein TinyML-Modell, welches die Bewegungen eines ST-IoT-Discovery-Kit (Cortex M4) anhand von den Daten der integrierten Beschleunigungssensoren erkennen und klassifizieren kann.

Das ST-IoT-Discovery-Kit B-L475E-IOT01A mit dem Entwicklungsrechner
Das ST-IoT-Discovery-Kit B-L475E-IOT01A mit dem Entwicklungsrechner

Abbildung 1: setup_hardware2.png: Die Hardware, mit der das Projekt umgesetzt werden kann, passt auf den kleinsten Tisch in unserer schmallsten Besprechungskabine

Edge Impulse

Edge Impulse ist ein webbasiertes Tool für den Entwurf von TinyML-Modellen. Das Tool ermöglicht unter anderen die Datensammlung direkt von den Mikrocontroller, über das eigene Smartphone oder durch den Upload bestehender Rohdaten. Edge Impulse ermöglicht das einfache Kurieren von Daten und die Organisation in Trainings- und Testdatensätze. Das Tool bietet vordefinierte Blöcke für Datenverarbeitung und ML-Modelle an, was das Design des Systems sehr vereinfacht. Nach der initialen Konfiguration kann das Modell mit einigen Klicks trainiert und getestet werden, es können nach dem Training noch weitere Parameter angepasst werden und zu guter Letzt können Bibliotheken und Binärdateiformate erzeugt werden, welche mit diversen Mikrocontrollern kompatibel sind.

Screenshot eines Ausschnitts der Internetpräsenz von Edge Impulse
Screenshot eines Ausschnitts der Internetpräsenz von Edge Impulse

Abbildung 2: edge_impulse_frontpage.png: Edge Impulse bietet eine Webplattform für das einfache Erstellen von TinyML-Modellen mithilfe einer mächtigen Low-Code-Oberfläche

Datenaufnahme

Wie bei einem klassischen ML-Modell muss eine ausreichende Datenmenge gesammelt werden. Im behandelten Beispiel bietet sich dafür eine von zwei möglichen Datenerfassungsmethoden an.

Edge Impulse bietet für ausgewählte Mikrocontroller Firmwares an, welche eine Gegenstelle auf dem Mikrocontroller erzeugen, die vom der Webanwendung direkt ausgelesen werden kann.

Alternativ besteht für ein Subset der Mikrocontroller auch die Möglichkeit, direkt über den Browser ohne Firmwareänderungen auf die Onboard-Sensorik des Boards zuzugreifen. Dieser Ansatz ist in Abb. 2 dargestellt und wird für das Beispiel verwendet.

Unabhängig von den beiden Methoden erfolgt die Anbindung des Mikrocontrollers an den Hostrechner über einen COM-Port.

Screenshot der Webanwendung, in welcher ein Dialog eingeblendet wird, über den
 die Verbindung zum angeschlossenen Mikrocontroller ausgewählt werden kann
Screenshot der Webanwendung, in welcher ein Dialog eingeblendet wird, über den die Verbindung zum angeschlossenen Mikrocontroller ausgewählt werden kann

Abbildung 3: edge_impulse_connection_dialog.png: Der Dateiupload in Edge Impulse kann wahlweise einfach per Upload, über die serielle Schnittstelle eines Zielsystems oder für unterstützte Geräte auch direkt durch Abgreifen der Sensordaten erfolgen

In unserem Beispiel soll das Modell vier Bewegungen erkennen können. Diese sind:

  • Stillstand (nachfolgend als idle bezeichnet)
  • Vertikale Bewegung (up-down)
  • Horizontale Bewegung (left-right)
  • Kreisförmige Bewegung (circle)

Für das Training werden Sensordaten für jede der vier ausgeführten Bewegungen benötigt. Die Webanwendung bietet für die Aufzeichnung der Daten des ST-IoT-Discovery-Kit eine Liveupload-Option über USB direkt zur projekteigenen Edge-Impulse-Datenbank. Sobald die Verbindung bereit ist müssen Messfrequenz und Datenlabel gewählt werden.

Als Messfrequenz wird in unserem Beispielprojekt global mit 62 Hz aufgezeichnet.

Als Label werden die oben genannten Kurzbezeichner verwendet:

  • idle
  • up-down
  • left-right
  • circle

Je Label wurden im Beispiel 25 Einzelaufzeichnungen von 2 Sekunden für das Training aufgenommen. Dieser Datensatz wird als Basis für das ML-Modell dienen. Weitere Daten verbessern die Trainingsergebnisse möglicherweise drastisch.

Screenshot der Webanwendung mit Datensatzkonfiguration
Screenshot der Webanwendung mit Datensatzkonfiguration

Abbildung 4: edge_impulse_data_acquisition.png: Datenaufnahme mit Visualisierung

Modellaufbau und Training

Für unser Beispiel sind die im kostenfreien Free-Tier enthaltenen Datenverarbeitungs- und ML-Modell-Blöcke vollkommend ausreichend. Es ist aber auch möglich, eigene Code-Fragmente hochzuladen und anstelle der Blöcke zu verwenden. Hierbei muss allerdings auf das korrekte Format geachtet werden.

Übersicht über die Systemblockkonfiguration in der Webanwendung
Übersicht über die Systemblockkonfiguration in der Webanwendung

Abbildung 5: edge_impulse_system_overview.png: Die Webanwendung ermöglicht das einfache Zusammenklicken einer Auswertungs- und Trainingspipeline

Zur Datenverarbeitung wird in unserem Beispiel die Spektralanalyse (Spectral Analysis) über die drei Beschleunigungsachsen (x, y, z) eingesetzt.

Für den ML-Anteil kommen ein Klassifikationsblock (Classification) sowie ein Anomalieerkennungsblock (Anomaly Detection) zum Einsatz.

Nach der Auswahl der Systemblöcke können diese noch weiter konfiguriert werden. So wird beispielsweise in dem Signalverarbeitungsblock zusätzlich zum Fast Fourier Transformation (FFT)-Anteil noch ein Digitalfilter eingefügt. Hierfür reicht ein Klick auf Add a ___ block aus, um den neuen Block hinzuzufügen.

Screenshot der Digitalfilter-Konfiguration
Screenshot der Digitalfilter-Konfiguration

Abbildung 6: edge_impulse_preprocessing_filter.png: Die verwendete Konfiguration des Digitalfilters

Screenshot der FFT-Konfiguration
Screenshot der FFT-Konfiguration

Abbildung 7: edge_impulse_preprocessing_fft.png: Die verwendete Konfiguration des FFT-Blocks

Bei dem Klassifikationsblock wurden die voreingestellten Parameter größtenteils übernommen. Eine Ausnahme bildet die Anzahl der Zyklen, welche auf 100 festgelegt wurde.

Screenshot der Klassifikationskonfiguration
Screenshot der Klassifikationskonfiguration

Abbildung 8: edge_impulse_settings_classification.png: Die verwendete Konfiguration des Klassifikators

Sobald alle gewünschten Blöcke eingefügt und fertig konfiguriert worden sind, kann das Modelltraining beginnen. In unserem Beispiel wird zuerst der ML-Klassifikator trainiert, sobald auf Start Training geklickt wird.

Sobald das Trainieren des Modells abgeschlossen ist, können die Ergebnisse in einer Wahrheitsmatrix und auch grafisch dargestellt werden. Gegebenenfalls können nun auch noch die Parameter oder das Modell angepasst werden. Bei Bedarf können über die Schaltfläche Add an extra layer noch weitere ML-Schichten bis hin zu kompletten neuronalen Netzwerken zum Modell hinzugefügt werden.

Screenshot der Modellkonfigurationsansicht für zusätzliche Layer
Screenshot der Modellkonfigurationsansicht für zusätzliche Layer

Abbildung 9: edge_impulse_additional_layers.png: Das Modell kann über weitere Schichten oder gezielte Parameteränderung umfangreich verändert werden

Neben dem Klassifikatortraining kann aber auch noch der Anomalieerkennungsblock so konfiguriert werden, dass die in Abb. XYZ von Edge Impulse empfohlenen Parameter ausgewählt sind. In unserem Beispiel haben diese drei Parameter für das Modell gut gepasst.

Screenshot der Anomalieerkennungskonfiguration
Screenshot der Anomalieerkennungskonfiguration

Abbildung 10: edge_impulse_settings_anomalydetection.png: Die Einstellungen der Anomalieerkennung liefern verschiedene Optionen für Parameter, welche für die Erkennung betrachtet werden sollen

Obgleich es weitere Parameter gibt, welche für das Modell verwendet werden könnten, muss beachtet werden, dass mehr gewählte Parameter nicht zwangsweise zu einem Modell führen, welches besser Fehler erkennt. Es ist nicht selten, dass mit verschiedenen Kombinationen experimentiert werden muss, bis zufriedenstellende Ergebnisse erzielt werden!

Wenn das Training abgeschlossen ist kann im Testing-Bereich auf Classify all geklickt werden, um das Modell gegen den Testdatensatz laufen zu lassen und eine zugehörige Wahrheitsmatrix zu generieren.

Screenshot der Ansicht des Testdatensatz
Screenshot der Ansicht des Testdatensatz

Abbildung 11: edge_impulse_test_overview.png: Der Testdatensatz kann mit dem trainierten Modell genutzt werden, um eine Aussage über die Genauigkeit der Ergebnisse zu erhalten.

Screenshot der Ansicht der Wahrheitsmatrix
Screenshot der Ansicht der Wahrheitsmatrix

Abbildung 12: edge_impulse_test_confusionmatrix.png: Die Wahrheitstabelle gibt Aufschluss darüber welche Klassen korrekt zugeordnet werden und bei welche Klassen die Erkennung noch verbessert werden muss

Modellexport

Entsprechen die Werte der Wahrheitsmatrix den gestellten Anforderungen, können die Binärdateien für das ST-IoT-Discovery-Kit erstellt und heruntergeladen werden. Für das Beispiel reicht dieses Format aus, da die Firmware im Anschluss direkt auf das Board aufgespielt und anschließend über die serielle Schnittstelle getestet werden kann.

Für die Erzeugung der Binärdatei muss lediglich das gewünschte Zielsystem im Deployment-Bereich ausgewählt werden und der Schalter Build betätigt werden. Die Binärdatei wird automatisch heruntergeladen und kann anschließend mit einer geeigneten Anwendung überspielt werden.

Screenshot der Deploymentansicht
Screenshot der Deploymentansicht

Abbildung 13: edge_impulse_deployment.png: Edge Impulse stellt verschiedene Downloadformate für das Modell bereit und stellte für unser Beispiel auch ein Video bereit, welches das Übertragen der Firmware zeigt

Alternativ zur Binärdatei kann auch eine C++-Bibliothek erstellt werden. Diese kann im Anschluss in ein bestehendes Projekt integriert werden und im C++-Code als Klasse verwendet werden.

Klassifikation in Aktion

Nachfolgend ist die Ausgabe des Klassifikators an der seriellen Schnittstelle des ST-IoT-Discovery-Boards nach dem Deployment zu sehen.

Screenshot des PuTTY-Outputs an der seriellen Schnittstelle
Screenshot des PuTTY-Outputs an der seriellen Schnittstelle

Abbildung 14: putty_classif.png: Das aufgespielte Modell stellt über die UART-Schnittstelle seine Klassifikationsergebnisse zur Verfügung

In der Abbildung ist der Livebetrieb der Klassifikation und Anomalieerkennung nach dem erfolgreichen Deployment auf das Board dargestellt. Hierbei erfolgt eine zyklische Aufzeichnung, Klassifikation der aufgezeichneten Beschleunigungsdaten und eine anschließende Anomalieerkennung für die Klassifikation.

Der genaue Ablauf der Ausgabe ist wie folgt für jede Inferenz:

  • Ein Zyklus beginnt jeweils bei "Starting inferencing in 2 seconds...".
  • Anschließend wird das Sampling, also die Aufzeichnung der Daten, verkündet
  • Nun wird der Zeitbedarf ausgegeben für

    • das DSP (die Vorverarbeitungsschritte FFT und Digitalfilter),
    • Klassifikation, und
    • Anomalieerkennung.
  • Die Klassifikationsergebnisse werden nach Classification results ausgegeben. Die Werte für circle, idle, left-right und up-down summieren sich zu 1.0 auf und beschreiben die Wahrscheinlichkeit, mit der die jeweilige Bewegung erkannt wurde.
  • Der nachfolgende Wert für Anomaly prediction beschreibt die Wahrscheinlichkeit, dass es sich bei dem Klassifikationsergebnis um eine Anomalie handelt, die nicht zu den Bewegungsschemata der definierten Klassen passt.
  • Zuletzt erfolgt die Mitteilung, dass die Inferenz abgeschlossen ist mit der optionalen Möglichkeit, die Daten an Edge Impulse weiterzuleiten.

Fazit

TinyML-Modelle stehen im scharfen Kontrast zu klassischen ML-Modellen, da sie durch den Systemkontext nicht beliebig skaliert werden können und durch die benötigten Vorkenntnisse im Umgang mit teilweise stark speicher- und leistungsbegrenzten Systemen ein komplett unterschiedliches Entwicklerprofil ansprechen. Durch die stark reduzierten Anforderungen an die ausführende Hardware erschließt TinyML gleichzeitig aber auch komplett neue Einsatzgebiete für KI-augmentierte Systeme.

Tools wie Edge Impulse erleichtern den Einsatz von modernen KI-Systeme auf Mikrocontrollern enorm und liefern die Werkzeuge an die Hand, um performanten Code in kurzer Zeit zu generieren. Somit wird es auch ohne tiefe Einarbeitung in bestehende Frameworks möglich KI-basierte Funktionalität in den Entwicklungsprozess einzubringen.

Das hier dargestellte Beispiel ist Teil eines TinyML-spezifischen Fortbildungskurses.