Fachbeitrag

Implementierung eines Workflows zur Bereitstellung und Integration von Deep-Learning-Netzwerken auf SPSen für die Industrieautomation

Von Dr. Fabian Bause und Nicolas Camargo Torres, Beckhoff Automation GmbH & Co. KG


„Ein wesentlicher Vorteil des hier beschriebenen Workflows besteht darin, dass er es Teams ermöglicht, Abwägungen zwischen Alternativen durch schnelle Iterationen zu bewerten. Beispielsweise haben wir bei unseren Qualitätskontrollanwendungen einen Teil der Klassifizierungsgenauigkeit gegen eine Reduzierung der Netzwerkgröße und der Ausführungszeiten eingetauscht.“

In der Industrieautomation hat Machine Learning viele potenzielle Anwendungsmöglichkeiten. Ein auf Bildverarbeitung basierender Klassifikator kann beispielsweise die Qualität fertiger Produkte beurteilen, potenziell fehlerhafte Komponenten identifizieren, bevor sie einer Baugruppe hinzugefügt werden, oder Obst und Gemüse sortieren, das zu erheblichen natürlichen Schwankungen neigt. Obwohl die Erstellung einiger dieser Anwendungen mit herkömmlichen Computer-Vision-Techniken möglich sein könnte, treibt die Entwicklung künstlicher Intelligenz (KI), wie beispielsweise Deep Learning, die Automatisierung der visuellen Inspektion voran.

Allerdings stoßen Entwicklungsteams häufig auf Schwierigkeiten bei der Bereitstellung von KI-Modellen auf einer SPS oder einem Industrie-PC. Anstatt Steuerungs- und Deep-Learning-Algorithmen in einem einzigen System zu integrieren, verwenden sie daher separate Systeme, was zu höheren Latenzen sowie Bereitstellungs- und Wartungskosten führt. Eine weitere Herausforderung für die Teams liegt in den unterschiedlichen erforderlichen Fähigkeiten: Bislang gibt es zwischen den Arbeitsabläufen der Datenwissenschaft und der industriellen Steuerung relativ wenig Gemeinsamkeiten.

Unser Team bei Beckhoff Automation hat einen neuen Workflow implementiert, der MATLAB®-Tools und Produkte von Beckhoff Automation kombiniert, um Low-Code-Design und KI-Modelltraining zu ermöglichen – und die Bereitstellung und Integration dieser Modelle auf industriellen Zielen zu vereinfachen. In Zusammenarbeit mit den Ingenieuren von MathWorks haben wir diesen Workflow entwickelt und anhand einer Beispielanwendung zur Qualitätskontrolle demonstriert, bei der es um die Sichtprüfung von Sechskantmuttern ging (Abbildung 1). Diese einfache Anwendung klassifiziert Sechskantmuttern als defekt oder nicht defekt und stellt somit einen unkomplizierten Anwendungsfall dar. Die Schritte im Workflow können jedoch auch angewendet werden, um die Entwicklung und Bereitstellung weitaus anspruchsvollerer und komplexerer Anwendungen zu beschleunigen.

Dauer des Videos 0:22

Abbildung 1. Eine Anwendung der Qualitätskontrolle, bei der KI-Modelle zur Überprüfung der Qualität von Sechskantmuttern verwendet werden. 

Diese Schritte sind:

  1. Entwerfen, trainieren und optimieren Sie ein Deep-Learning-Modell in MATLAB mit der Deep Learning Toolbox™ – oder importieren Sie eines aus einem anderen Machine-Learning-Framework wie PyTorch® oder TensorFlow™.
  2. Erstellen eines kompilierten TwinCAT®-Objekts aus dem Modell mit MATLAB Coder™ und TwinCAT Target for MATLAB (das kompilierte TwinCAT-Objekt kann neben dem Deep-Learning-Modell sowohl Vor- als auch Nachverarbeitungs-Code enthalten).
  3. Rufen Sie das TwinCAT Objekt in TwinCAT 3 Engineering auf, um Klassifizierungen vorzunehmen oder Vorhersagen zu treffen. Integrieren Sie es mit anderen Funktionen oder Komponenten, die auf derselben SPS ausgeführt werden.

Zusätzlich zu diesen Kernschritten umfasste unser Demonstrations-Workflow zwei weitere ergänzende Schritte:

  1. Entwerfen Sie einen Steuerungsalgorithmus in Simulink® und Stateflow®. Erstellen Sie aus diesem Steuerungsmodell mit Simulink Coder™ und TwinCAT 3 Target for Simulink ein TwinCAT-Objekt.
  2. Verwenden Sie MATLAB App Designer, um eine Mensch-Maschine-Schnittstelle (HMI) zu entwerfen, die TwinCAT 3 Interface for MATLAB und Simulink zum Datenaustausch zwischen MATLAB und der TwinCAT-Laufzeitumgebung nutzt.

Transferlernen mit einem vortrainierten Netzwerk

Nach dem Sammeln und Vorbereiten der Daten für die Verwendung in einer Deep-Learning-Anwendung besteht der erste Schritt des Workflows darin, ein Deep-Learning-Modell zu trainieren. Mit MATLAB und Deep Learning Toolbox gibt es hierfür mehrere Möglichkeiten, darunter das Trainieren eines Netzwerks von Grund auf mit der App "Deep Network Designer", das Definieren eines Deep-Learning-Modells als Funktion und die Verwendung einer benutzerdefinierten Trainingsschleife oder das erneute Trainieren eines vortrainierten Modells mit neuen Daten, auch als Transfer Learning bezeichnet. Bei einer geringen Menge abnormaler Daten sind auch Methoden zur Anomalieerkennung wie FCDD und PatchCore, die in der Automated Visual Inspection Library for Computer Vision Toolbox™ enthalten sind, wirksam.

Für die Beispielanwendung von Sechskantmuttern haben wir uns für die Verwendung von Transfer Learning entschieden, indem wir Convolutional Neural Networks zur Klassifizierung einer Reihe von Sechskantmutterbildern neu trainieren. Konkret haben wir vortrainierte ResNet-18- und SqueezeNet-Netzwerke in MATLAB geladen und sie dann neu trainiert, um Bilder von Sechskantmuttern zu klassifizieren (Abbildung 2).

Dauer des Videos 1:33

Abbildung 2. Trainieren eines Deep-Learning-Netzwerks zur Klassifizierung neuer Bilder mit der Deep Learning Toolbox.

Obwohl das ResNet-18-Netz eine hohe Genauigkeit aufwies, war es um eine Größenordnung größer und langsamer als das SqueezeNet-Netz, das zwar etwas weniger genau, für den vorliegenden Anwendungsfall jedoch immer noch genau genug war. Darüber hinaus sahen wir, dass ResNet-18 angesichts des SPS-Zeitbudgets von 300 ms unsere Anforderungen nicht erfüllen würde, daher sind wir auf SqueezeNet umgestiegen. Wir haben die Leistung dieses Netzwerks weiter verbessert – und seine Größe reduziert – indem wir die Filter der Faltungsschichten beschnitten haben. Durch dieses Beschneiden (Pruning) verringerte sich die Genauigkeit lediglich um 7%, die Geschwindigkeit stieg jedoch auf das Zweifache. Die Möglichkeit, verschiedene Netzwerke und Netzkomprimierungsoptionen schnell zu bewerten, ist ein erheblicher Vorteil für Teams, die Kompromissentscheidungen hinsichtlich Genauigkeit, Geschwindigkeit und Größe treffen müssen.

Erstellen eines kompilierten TwinCAT-Objekts und Integrieren in TwinCAT 3 Engineering

Das Erstellen eines TwinCAT-Objekts aus einer MATLAB-Funktion (in diesem Fall eine Funktion, die ein Deep-Learning-Modell aufruft) ist ein zweistufiger Prozess. Der erste Schritt besteht darin, mit MATLAB Coder C/C++ Code für die Funktion zu generieren. Der zweite Schritt besteht darin, TwinCAT Target for MATLAB zu verwenden, um den generierten Code in ein TwinCAT-Objekt zu kompilieren. Durch das Schreiben eines Skripts zur Ausführung dieser beiden Schritte kann dieser Teil des Workflows automatisiert werden (Abbildung 3). Wenn Änderungen am Deep-Learning-Netzwerk vorgenommen werden, kann das Team dieses Skript einfach erneut ausführen und sofort ein aktualisiertes TwinCAT-Objekt generieren.

Dauer des Videos 0:20

Abbildung 3. Generieren von C/C++ Code, der zum Erstellen eines TwinCAT-Objekts verwendet wird.

Es ist hier wichtig zu beachten, dass es eine andere Möglichkeit gibt, ein Deep-Learning-Netzwerk in MATLAB auf einer Beckhoff-SPS bereitzustellen. Bei diesem Ansatz exportiert ein Team eine ONNX-Datei aus MATLAB und lädt diese Datei in TwinCAT 3, wo sie mit einer Inferenz-Engine verwendet werden kann (TwinCAT Machine Learning Server), um Klassifizierungs- oder Regressionsaufgaben durchzuführen – sogar mit der Option, das Modell auf einer GPU zu berechnen. Ein Vorteil des Ansatzes in unserem Workflow (basierend auf MATLAB Coder und TwinCAT Target for MATLAB) gegenüber der Alternative besteht darin, dass er verwendet werden kann, um zusätzliche in MATLAB implementierte Vorverarbeitungs- und Nachverarbeitungsfunktionen einzubinden. Beim ONNX-Exportansatz wird nur das Netzwerk selbst bereitgestellt.

Nachdem das TwinCAT-Objekt kompiliert wurde, kann es wie jedes andere Objekt in TwinCAT Engineering verwendet werden. Ein Automatisierungsingenieur kann das Deep-Learning-Modell, das jetzt als TwinCAT-Objekt implementiert ist, in anderen SPS-Code, einschließlich strukturiertem Text, integrieren. In unserer Beispielanwendung haben wir beispielsweise Code geschrieben, der das kompilierte Objekt aufrief und ihm ein von einer Kamera aufgenommenes Bild (in der Größe angepasst und in eine Pixelmatrix konvertiert) übergab. Anschließend verarbeitete der Code die Ausgabe des Klassifikators, die sowohl das Vorhersageergebnis (die Sechskantmutter ist in Ordnung oder defekt) als auch einen Wahrscheinlichkeitswert enthält, der die Zuverlässigkeit des Ergebnisses widerspiegelt (Abbildung 4).

Ein Screenshot, der die Systemintegration eines Deep-Learning-Modells mit TwinCAT Vision zeigt.

Abbildung 4. Systemintegration eines Deep Learning-Modells mit TwinCAT Vision.

Entwurf und Einsatz von Bewegungssteuerungen

Um den Entwurf unseres Beispiels für eine Qualitätskontrollanwendung zu vervollständigen, benötigten wir ein Steuerungssystem für einen Servomotor, mit dem Sechskantmuttern im Sichtfeld einer Kamera positioniert werden. Obwohl wir dieses Steuerungssystem direkt in TwinCAT Engineering hätten implementieren können, haben wir die Gelegenheit genutzt, Model-Based Design zu verwenden und dabei dieselbe Beckhoff-SPS als Ziel zu wählen, die wir bei der Bereitstellung unseres Klassifikators verwendet haben. Wir begannen mit der Modellierung des Bewegungsreglers in Simulink mit Stateflow. Nachdem wir Simulationen zur Überprüfung des Designs ausgeführt hatten, verwendeten wir Simulink Coder, um aus unserem Modell C/C++ Code zu generieren, und kompilierten den Code anschließend mit TwinCAT 3 Target for Simulink in ein TwinCAT-Objekt. Wir konnten dieses Objekt dann in TwinCAT Engineering visualisieren und es mit anderen Elementen unseres Designs integrieren (Abbildung 5).

Ein Simulink-Modell, das ein Bewegungssteuerungssystem mit Eingängen, Logikgattern und Ausgängen zur Antriebssteuerung und Positionsrückmeldung zeigt.

Abbildung 5. Ein Simulink-Modell zur Bewegungssteuerung.

HMI-Design mit MATLAB App Designer und TwinCAT Interface for MATLAB

In den meisten Anwendungsfällen der Industrieautomation wird eine HMI bereitgestellt, damit Bediener Geräte überwachen und steuern, Echtzeitdaten anzeigen, Warnungen empfangen und Produktionsprozesse verwalten können. Um die HMI für unsere Beispielanwendung zur Qualitätskontrolle zu erstellen, haben wir zunächst das Design der Benutzeroberfläche mit MATLAB App Designer entworfen. Der Bediener kann sowohl die Bewegung der Sechskantmuttern über die Bedienoberfläche steuern, die aktuell unter der Kamera positionierte Sechskantmutter anzeigen, die Ergebnisse des Deep-Learning-Netzwerks (einschließlich der Klassifizierung und des Wahrscheinlichkeitswerts) einsehen und Benchmarks, einschließlich der Ausführungszeit des Klassifikators, überwachen (Abbildung 6). Der gesamte Datenaustausch zwischen der Benutzeroberfläche und der SPS-Laufzeitumgebung erfolgt über TwinCAT 3 Interface for MATLAB und Simulink, das dabei das Kommunikationsprotokoll Automation Device Specification (ADS) verwendet.

Ein Screenshot, der das HMI zur Qualitätskontrolle von Sechskantmuttern zeigt.

Abbildung 6. Das HMI zur Qualitätskontrolle von Sechskantmuttern, erstellt mit MATLAB App Designer und dem TwinCAT 3 Interface for MATLAB und Simulink.

Zukünftige Iterationen

Ein wesentlicher Vorteil des hier beschriebenen Workflows besteht darin, dass er es Teams ermöglicht, Kompromissentscheidungen durch schnelle Iterationen zu bewerten. Beispielsweise haben wir bei unseren Qualitätskontrollanwendungen einen Teil der Klassifizierungsgenauigkeit gegen eine Reduzierung der Netzwerkgröße und kürzerer Ausführungszeiten eingetauscht. Hätten die Designanforderungen noch geringere Latenzzeiten erfordert, hätten wir durch Netzmodifikationen weitere Verbesserungen anstreben oder uns beispielsweise für eine SPS mit Komponenten und Prozessoren einer höheren Leistungsklasse entscheiden können.

Es ist außerdem möglich, diesen Workflow zu erweitern, um spezifische Projektanforderungen zu erfüllen. Eine mögliche Erweiterung wäre, das Klassifikationsergebnis des tiefen neuronalen Netzwerks zu nutzen, um das Steuerungssystem zu beeinflussen. Die Fähigkeit eines Kontrollsystems, auf der Grundlage des Klassifikationsergebnisses unmittelbare Maßnahmen zu ergreifen, ist zwar in dem von uns entwickelten Qualitätskontroll-Demonstrator nicht erforderlich. Sie lässt sich jedoch auf ein breites Spektrum von Anwendungsfällen in der Industrieautomation anwenden und wäre für viele Teams, die diesen Workflow einführen, ein natürlicher nächster Schritt.

Veröffentlicht 2024

Artikel für ähnliche Einsatzgebiete anzeigen