Gefühlt geht heute nichts mehr ohne Künstliche Intelligenz. Spätestens seit LLMs wie ChatGPT in der breiten Bevölkerung angekommen ist, findet man fast täglich News und Prophezeiungen zu künstlicher Intelligenz und deren Zukunftsmöglichkeiten. Doch künstliche Intelligenz gibt es auch im Kleinformat, welche keine grossen Rechenzentren für das Anwenden benötigen. Seit Jahren sind diese auch bereits in Haushalten im Einsatz, ohne dass der Anwender sich bis anhin grosse Gedanken darüber gemacht hat. Als Beispiel kann hier unter anderem der Schrittzähler und die Gestensteuerung in Wearable- Devices genannt werden, welche mit kleinster Leistung arbeiten müssen und nicht unbedingt mit einer Cloud verbunden sind. Solche KI- Modelle müssen Speicher- und Energieeffizient arbeiten um die Spezifikationen zu erfüllen.
Dieser Blog gibt eine Einführung und Übersicht mit einem einfachen praktischen Beispiel in die Möglichkeiten der Entwicklung von KI- Modellen für Embedded- Systems mit Microcontrollern. Was gibt es für Möglichkeiten und wie wird eine Lösung umgesetzt.
Die praktische Umsetzung erfolgte mit einem STM32L010RBT Controller und Nano Edge AI Studio, Edge Impulse und Tensor Flow. Die Tensor Flow Modelle (.tflite) sind mit der X- Cube AI Erweiterung in die Applikation integriert worden.
Verwendete Hardware
Verwendete Software
Praktisch jeder Hersteller von Microcontrollern bietet mit seinen Entwicklungstools Möglichkeiten KI- Modelle auf deren Plattformen zu entwickeln oder zu integrieren. Grundsätzlich bieten sich vereinfacht drei Lösungsansätze an.
Die folgende Tabelle zeigt eine Übersicht der vorhandenen Entwicklungsumgebungen oder Tools zur Entwicklung von KI- Modellen der jeweiligen Prozessorhersteller. Eine genaue Betrachtung der Möglichkeiten bei den jeweiligen Herstellern ist nicht durchgeführt worden. Die Liste ist nicht abschliessend.
| Hersteller | Entwicklungsumgebung |
| STM | Nano Edge AI Studio |
| Microchip | Machine Learning Development Suite (MPLAB) |
| Nordic | Edge Impulse |
| Infineon | Deepcraft Edge AI Studio |
| NXP | eIQ Toolkit |
| ESP32 | Edge Impulse |
Generiert die Entwicklungsumgebung eine Modell- Datei wie .tflite oder wird das KI- Modell mit Tensor Flow erstellt ist die Integration bei den Plattformen, wie die folgende Tabelle zeigt, ebenfalls gegeben.
| Hersteller | Support |
| STM | X- Cube (STM32 AI Runtime / TF Lite Micro Runtime) |
| Microchip | MPLAB Harmony (TF Lite Micro Runtime)) |
| Nordic | Zephyr (TF Lite Micro Runtime) |
| Infineon | Modus Toolbox (Precompiled tflite- micro lib) |
| NXP | eIQ Toolkit (TFlite (Embd. Linux)) |
| ESP32 | TF Lite Micro Runtime (div. Bibliotheken) |
Die Integration von Modell- Dateien wie ONNX oder von PyTorch sind teilweise auch möglich. Dies ist jedoch im aktuellen Projekt nicht spezifisch betrachtet worden.
Das Ziel der Anomalieerkennung ist es, bei einem Sinus- Signal mit definierter Frequenz, Amplitude und Offset, eine Abweichung der Parameter festzustellen. Dies dient als Grundlage für praktische Anwendungen beispielsweise in Strommessungen, Spannungsmessungen oder Auswertungen von magnetischen Wechselfeldern. Das Signal wird über den integrierten Analog- Digital- Wandler des Mikrocontrollers abgetastet und anschliessend durch das KI- Modell klassifiziert. Die Ausgabe des Modells soll 1 (bzw. 100%) bei einer Übereinstimmung sein und 0 (0%) bei einer Anomalie. Die Signale werden über einen Signalgenerator erzeugt.

| Parameter | Wert | Einheit |
| Abtastrate ADC | 500 | Hz |
| f regulär | 50 | Hz |
| UDC regulär | 1 | V |
| Ap regulär | 200 | mV |
| f irregulär | f < 50 < f | Hz |
| UDC irregulär | UDC < 1 < UDC | V |
| Ap irregulär | Up < 200 < Up | mV |
Ein wichtiger Entwicklungsschritt ist die Erstellung eines Datasets. Für Bild- und Audioklassifizierungen sowie Spracherkennungen sind grosse Datasets im Internet frei Verfügbar, welche für das Training eigener Modelle verwendet werden können. Bei Sensoranwendungen fehlen Solche und müssen daher, mit der Zielhardware, selbst erstellt werden.
Das Datenset besteht in diesem Projekt aus gültigen Signalen, mit den korrekten Parametereinstellungen sowie gleichvielen ungültigen Signalen. Die Parameter für die ungültigen Signale sind jeweils einzeln mit einer Abweichung von +/- 10% zu den korrekten Signalen aufgezeichnet worden. Gesamthaft rund 12000 Messwerte. Das Signal wird unverarbeitet eingelesen. Es wird keine Filterung oder Offsetkompensation durchgeführt.
Das Sensorsignal wird durch den Analog- Digital- Wandler alle 2ms abgetastet und die 16 Werte sollen als Array dem KI-Modell zur Klassifikation mitgegeben werden. Das folgende Bild zeigt die Samples in einem Diagramm zur Visualisierung.

Die gemessenen Daten des Analog- Digital- Wandlers werden über die serielle Schnittstelle an die Entwicklungsumgebung weitergebenen, gelabelt und abgespeichert. Labeln bedeutet, dem Eingangssignal ein Zielwert mitzugeben, damit das Modell beim Training bei einem gültigen Eingangssignal auf eine Ausgabe 1 und bei ungültigem Eingangssignal auf eine Ausgabe 0, trainiert wird. Die Übertragung kann direkt in die Entwicklungsumgebung erfolgen oder indirekt über ein Konsolentool mit der Speicherung in eine CSV- Datei. Die Datenausgabe muss für ein direktes Einlesen entsprechend der Tool-Vorgabe erfolgen. (Siehe folgende Abbildung)

Bei einer automatisierten Modellerstellung sind je nach Plattform unterschiedliche Templates vorhanden. Das Nano Edge AI Studio ist primär für Sensorapplikationen gedacht. Im folgenden Bild sind die möglichen Templates, welche beim Start des Projekt ausgewählt werden, aufgezeigt.

Nach der Bestimmung der Hardwareplattform und dem Erzeugen oder Einlesen eines bereits erstellten Datasets, berechnet das Tool mögliche Modell- Varianten, welche je nach Spezifikation bezüglich Speicherbedarf, Genauigkeit und Reaktionszeit ausgewählt werden können.

Bei einer automatischen Modellentwicklung wird eine gesamte Modellpipeline erzeugt. Das heisst nebst dem eigentlichen Machine Learning Block mit dem neuronalen Netzwerk werden auch Preprocessing Blöcke zur Signalvorverarbeitung erzeugt.

Mithilfe von Templates und dem eingelesenen Dataset ist es je nach Hersteller möglich mit einem Model- Builder ein KI- Modell zu erstellen und daraufhin zu trainieren. Durch die Werkzeuge muss sich der Entwickler nicht mit der Struktur eines KI- Modells auseinandersetzen und braucht auch kein Vorwissen. Das Tool stellt das optimale Modell zusammen und trainiert es.
Entwicklungsumgebungen zur grafischen Modellentwicklung wie zum Beispiel Edge Impulse bieten nebst einem Model- Builder auch die Möglichkeit das Modell grafisch mit Funktionsblöcken zusammenzustellen. Dies erhöht die Flexibilität und eignet sich auch gut für den Einstieg und als Übung zu diesem Thema.
Im Bild unten wird nach dem Einlesen des Datasets zuerst die Grundstruktur der gesamten KI- Modell Pipeline definiert. Auch hier lassen sich vor der Klassifizierung mit dem neuronalen Netzwerk, Preprocessing Blöcke ergänzen. Im Beispiel unten werden jedoch direkt die Rohdaten zur Klassifizierung herangezogen.

Im nächsten Schritt muss die Funktion der Klassifikation bestimmt werden. Diese werden ebenfalls durch vordefinierte Layer durch Drag & Drop zusammengestellt. Anschliessend kann das Modell trainiert werden.

Nach erfolgreichem Training wird das Resultat und die Performance mit der voraussichtlichen Bearbeitungszeit und Speicherbedarf angezeigt.

Bei einer textuellen Modelleerstellung wie Tensor Flow erfordert, wie bereits erwähnt, Programmierkenntnisse in einer der unterstützten Programmiersprachen und grundlegende Kenntnisse zu den unterschiedlichen neuronalen Netzwerken. Dank der integrierten Keras-API lässt sich das KI-Modell mit nur wenigen Codezeilen programmieren und ermöglicht so einen schnellen Einstieg. TensorFlow unterstützt diesen Lernprozess umfassend durch eine Vielzahl an Dokumentationen, Tutorials und praktischen Tools.
Für die Modellerstellung und das Training wird beispielsweise ein Python-Skript verwendet, das die Daten aus den Datasets einliest, ein Modell definiert und dieses anschließend mit den eingelesenen Daten trainiert. Das folgende Bild zeigt den Aufbau des Modells in Python:
model = tf.keras.Sequential([
tf.keras.layers.Conv1D(16, kernel_size=3, activation='relu', input_shape=(16, 1), padding="same"),
tf.keras.layers.MaxPooling1D(pool_size=2),
tf.keras.layers.Conv1D(32, kernel_size=3, activation='relu', padding="same"),
tf.keras.layers.MaxPooling1D(pool_size=4),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
Die folgende Abbildung zeigt die Konsolenausgabe der letzten Trainingsdurchläufe sowie den anschließenden Test des Modells mit einem regulären und fünf irregulären Signalen.

Nach dem Training erfolgt die Bereitstellung des Modells. Grundsätzlich sind je nach Entwicklungswerkzeug folgende Varianten möglich:

Die Integration des KI- Modells oder der KI Modell- Pipeline erfolgt über die erzeugte statische Bibliothek und das Header File, den generierten Source- Code oder die tflite Modell Datei. Die Integration der tflite- Modell Datei erfolgt über die Tensor Flow Lite Micro Runtime, welche von allen betrachteten Herstellern unterstützt wird, oder durch eine herstellereigene Runtime.
Die Implementation in die Applikation erfolgt bei den drei geprüften Lösungsansätzen grundsätzlich im gleichen Schema. Die auszuwertenden Signale werden über den Analog- Digital- Wandler eingelesen und gleich aufbereitet wie bei der Erstellung des Datasets. In unserem Beispiel sind dies 16 Werte mit einer Abtastrate von 500Hz. Die Daten werden über eine Funktion eingelesen und von der KI Klassifiziert. Als Rückgabewert wird ein klassifizierter Wert gemäss den trainierten Labels zurückgegeben. In unserem Fall ein Wert zwischen 0 und 1 bzw. 0 und 100.
Der folgende Ausschnitt zeigt die Implementation in der Beispielapplikation bei Verwendung der statischen Bibliothek mit Nano Edge AI Studio. Mit fill_buffer werden 16 Werte aus dem ADC in den Buffer input_user_buffer gespeichert. Die darauffolgende Funktion prüft die Werte mit dem Modell auf Anomalien und gibt die Gleichheit mit dem Sollwert mit einem Wert zwischen 0 bis 100 in der Variable similarity zurück.
fill_buffer(input_user_buffer); error_code = neai_anomalydetection_detect(input_user_buffer, &similarity)
Die folgende Grafik zeigt die Vorhersage des KI- Modells, welches mit Tensor Flow entwickelt worden ist. Die Vorhersagewerte des Modells liegen zwischen 0 und 1, weshalb diese zwecks besserer Lesbarkeit mit 100 multipliziert wurden.

Die folgende Tabelle zeigt die Detektierbarkeit einer Anomalie im Sinussignal der unterschiedlichen Lösungsbeispiele. Die Annahme für die Detektierbarkeit ist, dass der Vorhersagewert unter 50 (bzw. 0.5) fällt.
| Detektierbarkeit | |||
| Entwicklungsumgebung | Frequenz [Hz] | Amplitude [mV] | Offset [mV] |
| Nano Edge AI Studio | +/- 3 | +/- 30 | +/- 30 |
| Edge Impulse | +/- 3 | +/- 20 | +/- 30 |
| Tensor Flow | +/- 3 | +/- 20 | +60 / -70 |
Fazit
Die Entwicklungsumgebungen der Microcontrollerhersteller unterstützen einem beim Einstieg in die Welt der KI erheblich. Es sind auch ohne vertiefte Kenntnisse über die Modellerstellung KI- Modelle für Sensoranwendungen möglich, da dies in vielen Fällen durch Templates und Model- Builder automatisiert umgesetzt werden kann.
Jedoch muss man auch nicht davor zurückschrecken, ein Werkzeug wie Tensor-Flow einzusetzen. Mit etwas Einarbeitung und den zur Verfügung stehenden Dokumentationen und LLMs wie zum Beispiel ChatGPT gelingt die Modellerstellung schnell und es ist eine grosse Lernkurve vorhanden. Die Verwendung von Tensor Flow hilft zudem beim Lernen und die Modelle können auch Plattformunabhängig erstellt werden.
Die ausgewerteten Resultate zeigen bereits gute Ergebnisse, welche durch ein KI- Modell, mit wenig Code-Zeilen, realisiert werden können.
Die Herausforderung in der Praxis wird bei solchen Anwendungen primär in der Erstellung eines aussagekräftigen Datensets liegen. Es ist wichtig, sich darüber frühzeitig in der Entwicklung Gedanken zu machen und frühzeitig mit dem Erstellen des Datasets zu beginnen.
Schreiben Sie einen Kommentar