Maschinelles Lernen Sensordaten für die ML-Trainingsphase

Mit KI lassen sich Sensordaten effektiv auswerten. Allerdings werden dazu gelabelte Trainingsdaten zur Modellbildung von den KI-Algorithmen benötigt. Mit PyDSlog steht ein Softwarebaukasten zur Verfügung, der den Entwicklungs-Workflow deutlich erleichtert.

In Sensorsystemen wird üblicherweise eine in Hochsprachen erstellte Firmware genutzt, die den jeweils gewünschten Zusammenhang zwischen Ein- und Ausgangssignalen anhand von statischen Regeln herstellt, die auf lexikalischem Wissen basieren. Ein typischer Anwendungsfall wäre beispielsweise eine komplexe Sensorikapplikation zur Zustandsüberwachung der elektrischen Antriebe einer Maschine mit Hilfe einer Stromsensorik: Die Embedded-System-Firmware im Sensorsystem verarbeitet die analogen Rohdaten der einzelnen Sensor-Elemente und liefert anhand eines programmierten Regelkreises (beispielsweise welche Frequenzen und Amplituden sind jeweils zulässig?) das gewünschte digitale Ausgangssignal.

Klassische Firmware-Entwicklungen sind in der Regel recht aufwändig und über die gesamte Produktlebensdauer betrachtet, relativ unflexibel. Jede noch so kleine Änderung der Anforderungen löst einen neuen Entwicklungszyklus aus. Durch die zahlreichen Weiterentwicklungen im Bereich der künstlichen Intelligenz (KI) und des maschinellen Lernens (ML) ist nun ein weiterer Lösungsansatz möglich: Zwischen die Ein- und Ausgangsdaten eines Mikrorechners wird ein lernfähiger Algorithmus geschaltet und mittels spezieller Trainingsdaten für eine bestimmte Aufgabenstellung konfiguriert. Dabei entsteht ein mathematisches Modell, das den jeweiligen Zusammenhang der Ein- und Ausgänge abbildet (Bild 1). Anforderungsänderungen werden durch eine erneute Trainingsphase und mit Hilfe zusätzlicher Referenzdaten umgesetzt. Grundsätzlich lässt sich mit dieser Vorgehensweise jedes Problem lösen, dessen Zusammenhang zwischen Ein- und Ausgängen durch ein mathematisches Modell beschreibbar ist.

Varianten des maschinellen Lernens

Da die wesentlichen Grundlagen der künstlichen Intelligenz und des maschinellen Lernens aus den 50er Jahren stammen, gibt es mittlerweile eine schwer überschaubare Algorithmenvielfalt. Insgesamt lässt sich das maschinelle Lernen in drei Bereiche gliedern:

Supervised-Learning: Überwachtes maschinelles Lernen. Die meisten der gegenwärtig in der Praxis genutzten ML-Algorithmen, wie zum Beispiel CNNs (Convolutional Neural Networks) gehören zu dieser Kategorie. Bei diesem Verfahren ist der Zusammenhang zwischen den Eingangs- und Ausgangsgrößen anhand von Historiendaten im Vorfeld bekannt. Insofern stellt dies ein Mapping der Eingangsdaten auf den Ausgang dar, wie es auch bei unzähligen klassischen Automatisierungs-Programmieraufgaben der Fall ist. Der jeweils zum Einsatz kommende Algorithmus muss zunächst trainiert werden.

Dabei entsteht ein Modell. Für die Trainingsphase werden klassifizierte (Historien-) Daten benötigt. Bei einer sinnvollen Abstimmung zwischen den Daten und dem jeweils gewählten Algorithmus sowie einer ausreichenden Trainingsdatenmenge von guter Qualität lassen sich anschließend mit Hilfe bisher unbekannter Datenwerte relativ genaue diskrete Klassifizierungs- oder kontinuierliche Regressionswerte vorhersagen. Typische Anwendungsbeispiele für überwachtes Lernen sind die Objekterkennung in Bilddaten (Mustererkennung) und die Vorhersage des Energiebedarfs einer Maschine. Die in der Trainingsphase des Supervised-Machine-Learnings entstehenden Modelle sind statisch und müssen bei Bedarf durch ein erneutes Training an veränderte Bedingungen angepasst werden.

Unsupervised-Learning: Unüberwachtes maschinelles Lernen. Dieses Verfahren wird bei Bedarf auf Daten mit unbekannten Zusammenhängen angewendet, um in den Eingangsdaten mit Rechnerunterstützung nach Mustern (Clustern) und den Grenzen zwischen den gefundenen Clustern zu suchen. Insofern spricht man bei dieser Kategorie des maschinellen Lernens auch häufig von Cluster-Analysen, also die Zuordnung der vorliegenden Datenpunkte zu bestimmten Gruppen (den Clustern). Die in der Mathematik zur Verfügung stehenden Methoden nutzen unterschiedliche Ansätze, wie beispielsweise das prototypische Bilden von Cluster-Zentren in einem n-dimensionalen kontinuierlichen Raum (K-Means-Methodik) oder dichtebasierte Regionen als Zentrum eines möglichen Clusters (DBSCAN-Algorithmus). Darüber hinaus gibt es auch noch hierarchische Cluster-Verfahren. Die gefundenen Ähnlichkeitsstrukturen und die per Cluster-Analyse festgelegten Gruppen können in der Praxis als Vorlage zum Labeln der bisher unbekannten Daten für ein anschließendes Supervised-Machine-Learning dienen.

Reinforcement-Learning: Bestärkendes maschinelles Lernen. Beim Reinforcement-Learning (RL) steht die Interaktion eines lernenden Agenten mit seiner Umwelt im Mittelpunkt. Mit Hilfe des RL können Computer nicht nur Brettspiele wie Schach oder Go gewinnen. Diese Methodik des maschinellen Lernens spielt inzwischen auch für Embedded-Systeme in der Robotik und bei autonom agierenden Logistiksystemen, zum Beispiel vollautonome Flurförderzeuge wie Gabelstapler eine sehr wichtige Rolle. Des Weiteren nutzen Staubsaug- oder Rasenmähroboter im Haus oder Garten beispielsweise den zum RL gehörenden Q-Learning-Algorithmus, um ohne fremde Hilfe den Weg zur Ladestation zu finden usw. Die Zusammenhänge beim RL sind relativ einfach: Die Umwelt des Agenten, die von diesem beeinflusst werden kann, besitzt eine bestimmte Anzahl von Zuständen. Jede Aktion des Agenten führt zu einem anderen Umweltzustand, für den der Agent als »Reinforcement« eine Belohnung erhält – zum Beispiel einen Wert zwischen 0 und 100. Anhand der Belohnungsintensität kann der Algorithmus selbstständig eine Strategie mit der besten Abfolge von Schritten erlernen, die zum jeweiligen Ziel führt.

PyDSlog: Input für Datenwissenschaftler

Ein Supervised-Machine-Learning-Projekt in der industriellen Sensorik, also im Umfeld von Maschinen und Anlagen, ist ein relativ komplexes Vorhaben, für das umfangreiches Spezialwissen aus unterschiedlichen Disziplinen erforderlich ist. Zur Datenanalyse, Datenvorbereitung, Algorithmenauswahl, Modellbildung und Ergebnisverifikation wird vielfach ein Data-Scientist aus dem IT-Umfeld in das Projekt eingebunden. Der geht in der Regel davon aus, dass für seine Arbeit bereits ausreichend Daten in der erforderlichen Qualität zur Verfügung stehen. In der Automatisierung ist das aber sehr oft nicht der Fall – hier gibt es entweder überhaupt keine oder in Hinblick auf die zu lösende Aufgabe unbrauchbare Daten. Insofern werden dann schnell mal einige Sensoren oder ein auf den ersten Blick geeignetes Starterkit in einem Webshop bestellt und an einer Maschine installiert, um überhaupt ein paar Daten zu erfassen, mit denen der Datenwissenschaftler loslegen kann. Da sich in ML-Projektteams häufig keiner so richtig mit Sensormerkmalen und -eigenschaften, Signalaufbereitung, Abtasttheoremen, Störgrößen, Filterschaltungen, A-D-Wandlung usw. auskennt, bekommt der Data-Scientist meistens völlig »verrauschte« und bestenfalls bezüglich der Quantität geeignete Maschinendaten geliefert, mit denen er auch nicht so richtig weiterkommt. Viele Vorhaben bleiben derzeit an dieser Stelle »hängen« und warten auf den »richtigen« Sensor. Um genau diese Projektphase erfolgreich zu durchlaufen, wurde PyDSlog entwickelt.

PyDSlog ist ein Baukasten aus Wissens- und Software-Funktionsbausteinen zur Aufzeichnung von beliebigen Sensormesswerten in CSV-Dateien, um die Sensorrohdaten zum einen für explorative und deskriptive Datenanalysen sowie zum anderen für das Training von ML-Algorithmen zu nutzen. Mit Hilfe des durch die Trainingsphase entstandenen Machine-Learning-Modells kann anschließend eine Inferenzmaschine im Praxiseinsatz bestimmte Muster in Echtzeitmessdaten identifizieren und Ereignisse per Klassifizierung oder Regression vorhersagen. Für die CSV-Datei wird jede einzelne Sensormessung als Zahlenwert in einen Merkmalsvektor eingefügt. Ein solcher Vektor (Array aus diskreten Zahlenwerten) repräsentiert die Messwerte an den jeweiligen Sensorikeingängen zu einem bestimmten Zeitpunkt.

Mit anderen Worten: Der einzelne Merkmalsvektor beschreibt ein zeitpunktspezifisches Zustandsmuster der Sensormesswerte. Die per PyDSlog erzeugte CSV-Datei bildet somit ein Datenset aus gleichartigen Merkmalsvektoren, die zu unterschiedlichen Zeitpunkten erfasst wurden.

Vom Sensorwert zum Merkmalsvektor

Eine PyDSlog-Anwendung besteht grundsätzlich aus zwei elementaren Bausteinen, die über eine einfache Kommunikationsverbindung miteinander gekoppelt sind und jeweils folgende Merkmale aufweisen:

Datenerfassung: Pythonanwendung auf einem Edge-Gateway oder PC, um über die von den Sensoren erhaltenen Daten die erforderlichen Merkmalsvektoren zu erzeugen und in eine CSV-Datei zu schreiben (Logger für ML-Trainingsdaten). Zwischen der Datenerfassung und den Sensoren existiert eine hardware-agnostische Kommunikation über drei unterschiedliche Datagramme (siehe Tabelle 1). Jedes Datagramm ist einem bestimmten Zustand eines Sensor-Zustandsautomaten zugeordnet. Zum Speichern der CSV-Daten muss die Anwendung einen Schreibzugriff auf ein geeignetes Dateisystem besitzen.

Sensor: Funktionseinheit mit mindestens einem Sensorelement und einer digitalen Kommunikationsschnittstelle sowie einem Mikrocontroller, in dem sich die PyDSlog-Zustandsmaschine und Datagrammkommunikation implementieren lassen. Die Aufgabe des Sensors in einer PyDSlog-Anwendung ist es, die einzelnen Messwerte mit der von der Datenerfassung gewünschten Abtastfrequenz sf zu erfassen und als (Messdaten-) Datagramme an die Datenerfassung zu schicken.

Bild 2 illustriert an einem Beispiel die wesentlichen Zusammenhänge zwischen Datenerfassung und Sensor. Das Sensorelement ist in diesem Fall ein einfacher Stromsensor, zum Beispiel ein Shunt-Widerstand plus 1-Kanal-A-D-Wandler, der von einem 8-, 16- oder 32-Bit-Single-Chip-Mikrocontroller per I²C angesteuert wird. Über diesen Mikrocontroller wird auch die Datagrammkommunikation zur Datenerfassung gesteuert. Zum Start der CSV-Messdatenerfassung übermittelt die Pythonanwendung mit Hilfe der PyDSlog-Bibliotheksfunktionen ein Konfigura-tionsdatagramm mit der gewünschten Abtastfrequenz sf (z. B. 500 Hz) an den Sensor. Anschließend überträgt der Sensor fortlaufend mit der jeweiligen Frequenz (bei 500 Hz also alle 2 ms) 16-Bit-Integer-Strommesswerte als Messdaten-Datagramme an die Datenerfassung. Über die voreingestellte Merkmalsvektorgröße (zum Beispiel 500 Messwerte je Vektor) setzt die entsprechende Bibliotheksfunktion die einzelnen Vektoren zusammen und übergibt jeden vollständigen Vektor als Textzeile im CSV-Format an das Dateisystem, um es an eine Datei anzufügen. Bei sf = 500 Hz und 500 Messpunkten je Vektor repräsentiert jeder einzelne Merkmalsvektor in der CSV-Datei somit eine Zeitspanne von 1 s.

Der gesamte Datagrammdialog zwischen Datenerfassung und Sensor kann sowohl über einfache serielle Schnittstellen (UART, RS232, RS485) als auch per MQTT erfolgen. Für die PyDSlog-Datenerfassung wurde eine Pythonbibliothek entwickelt. Bezüglich der Sensorik existieren zurzeit verschiedene C/C++-Beispielcodes mit Zustandsmaschinen-Template und serieller Datagrammkommunikation, die bisher an Arduino und STM32-Nucleo-Boards angepasst wurden. Eine Adaption für das IoT-Betriebssystem RIOT befindet sich in der Entwicklung. Alle Software-Komponenten stehen über Open-Source-Lizenzen jedem interessierten Anwender kostenlos zur Verfügung.

Datagramm-TypSensorzustandBeschreibung
Konfiguration (Start)IdleWird von der PyDSlog-Datenerfassung an den Sensor übermittelt. Dieses Datagramm erzeugt im Sensor einen Zustandsübergang von Idle nach Measuring und startet eine Datenerfassung. In einem Konfigurationsdatagramm werden Parameter für die gewünschte Abtastfrequenz sf und eine Liste der jeweils zu aktivierenden Kanalnummern cn[] (nur bei Sensoren mit mehr als einem Sensorelement) übertragen.
MessdatenMeasuringWerden mit der Abtastfrequenz sf vom Sensor fortlaufend an die Datenerfassung übertragen. In jedem Messdatendatagramm ist jeweils ein Messwert für jeden aktiven Kanal enthalten.
StoppMeasuringDieses Datagramm erzeugt im Sensor einen Zustandsübergang von Measuring nach Idle und beendet eine laufende Datenerfassung.

 

Tabelle 1: Zwischen dem Sensor und der Datenerfassung einer PyDSlog-Anwendung existiert eine hardware-agnostische Kommunikationsverbindung zur Übermittlung von einfachen Datagrammen. Die gesamte Kommunikation basiert auf drei unterschiedlichen Datagrammtypen, die jeweils zwei verschiedenen Sensorik-Systemzuständen zugeordnet sind.

Fernsteuerschnittstelle unterstützt Labeling

Soll ein Supervised-Machine-Learning-Algorithmus in den Echtzeitmessdaten eines Stromsensors automatisch unterschiedliche Betriebszustände erkennen, werden für die Trainingsphase entsprechend gekennzeichnete Merkmalsvektoren benötigt. Dafür muss an alle Messdatenvektoren vor dem Training in einem zusätzlichen Arbeitsschritt ein entsprechendes Zustandskennzeichen (Label) angefügt werden. Dieses Label klassifiziert den jeweiligen Betriebszustand, zu dem im Beispiel die diskreten Strommessdaten des jeweiligen Vektors gehören (Bild 2).

Das Labeling von Zustandsdaten ist in der Praxis häufig mit dem Problem behaftet, dass in vielen Projekten lediglich Daten existieren, die einen einzigen Betriebszustand beschreiben. Damit lässt sich dann beispielsweise ein sogenannter One-Class-Classification-Algorithmus trainieren, der zur Anomalieerkennung dienen kann. Dafür sind zunächst einmal keine zusätzlichen Zustandskennzeichen in den Merkmalsvektoren erforderlich. Da jede Anomalie in diesem Fall aber auch ein spezieller Betriebszustand sein kann, wäre ein Werkzeug zur automatischen Zustandsdatenerfassung im Anomaliefall hilfreich.

Um die Zustandskennzeichnungsaufgaben für die zu erfassenden Merkmalsvektoren zu automatisieren, wurde PyDSlog mit einer Fernsteuerschnittstelle ausgestattet. Dieses Interface besteht im Wesentlichen aus vier Nachrichten mit den Namen Start, Stop, End und Label, die über zwei MQTT-Topics verschickt werden. Damit sind folgende Funktionen möglich:

Start: Eine neue Datenerfassung mit einer bestimmten CSV-Datei starten oder die zuvor über Stop angehaltene Datenerfassung weiter fortsetzen.

Stop: Die laufende Datenerfassung für die jeweilige CSV-Datei nach dem vollständigen Schreibzugriff für den (letzten) aktuellen Merkmalsvektor sofort anhalten.

End: Eine laufende Datenerfassung beenden. Die jeweilige CSV-Datei mit bisher erfassten Merkmalsvektoren wird final geschlossen.

Label: Vorgabe eines numerischen Werts (Label Value), der als Zustandskennzeichen an das Ende jedes Merkmalsvektors angefügt wird.

Bild 3 zeigt die Anwendungsmöglichkeiten der Fernsteuerschnittstelle am Beispiel der Stromdaten eines Antriebselements, das durch externe Ereignisse in verschiedene Zustände gesetzt wird. Zunächst werden eine Zeit lang Merkmalsvektoren im Zustand 1 gesammelt. Dann wird die Datenerfassung angehalten und auf einen anderen Zustand gewartet, um zum Beispiel Messdatenmerkmalsvektoren für den Antriebszustand 2 zu erfassen.