Maschinelles Lernen auf PLCnext
Mittlerweile hat jeder von Machine Learning gehört und wie es alles verändern wird. Aber die wenigsten haben eine Idee, wie man anfangen kann, alles zu ändern. Ich hoffe, wenn Sie die Schritte in diesem Blog ausprobieren oder sogar darüber lesen, werden Sie verstehen, wie Sie beginnen, Dinge mit Ihrer PLCnext-Steuerung zu ändern. In diesem Blog gehe ich darauf ein, Ihr erstes ML-Modell zu trainieren, es in den ONNX-Standard zu konvertieren und das Modell auf einer PLCnext-Steuerung zu inferieren. Um die Dinge nicht zu überwältigen, werde ich den berühmten Iris-Datensatz verwenden, um unser Modell zu erstellen.
Bevor wir beginnen, sollte klar sein, was wir erreichen wollen. Daher werde ich eine kleine Erklärung zu den in diesem Blog behandelten Themen geben. Meine Referenzen finden Sie am Ende dieses Blogs.
Einführung in maschinelles Lernen
Was ist maschinelles Lernen
Ich denke, wir sollten damit beginnen, zu erklären, was maschinelles Lernen ist. Das Wesen des maschinellen Lernens besteht darin, dass wir versuchen, mithilfe von Statistiken und Algorithmen Muster in Datensätzen zu finden. Wir unterscheiden drei Haupttypen des maschinellen Lernens:überwachtes maschinelles Lernen, unüberwachtes maschinelles Lernen und Verstärkungslernen. Überwachtes Lernen ist heute die am häufigsten verwendete „Geschmacksrichtung“, und wir werden in diesem Blog überwachtes Lernen verwenden. Beim überwachten Lernen kennzeichnen wir Daten und sagen der Maschine genau, nach welchen Mustern wir suchen.
Beim unüberwachten Lernen kennzeichnen wir unsere Daten nicht und lassen die Maschine ihre eigenen Muster finden, da diese Technik weniger offensichtliche Anwendungen hat und unüberwachtes Lernen weniger beliebt ist.
Beim bestärkenden Lernen schließlich lernt ein Algorithmus durch Versuch und Irrtum, um ein festgelegtes Ziel zu erreichen. Es probiert einfach eine Menge Dinge aus und wird belohnt oder bestraft, je nachdem, ob es eine gute oder eine schlechte Aktion war. Googles AlphaGo ist ein berühmtes Beispiel für Reinforcement Learning.
Der Irisblüten-Datensatz
Laut Wikipedia ist der Irisblüten-Datensatz:
Ok, gut, aber wie sieht es aus?
Im Iris-Datensatz gibt es 5 Felder:Kelchblattlänge, Kelchblattbreite, Blütenblattlänge, Blütenblattbreite und die Sorte der Irisblüte. Unser heutiges Ziel ist es, die Art der Irisblüte zu finden, wenn wir die Kelchblattlänge, Kelchblattbreite, Blütenblattlänge und Blütenblattbreite kennen. Also trainieren wir das Modell, um die Art der Blume zu klassifizieren. Wie Sie sich denken können, handelt es sich bei dieser Art des maschinellen Lernens um die Klassifizierung.
Machine Learning kann auch verwendet werden, um einen Wert im Datensatz vorherzusagen. Dieses Verfahren heißt Regression und verwendet andere Algorithmen als die Klassifizierung.
Der Algorithmus
Heute verwenden wir den „Decision Tree Classifier“, nicht weil er perfekt für die Aufgabe ist, sondern weil er sehr intuitiv ist und ohne komplizierte Mathematik leicht verständlich ist. Hier finden Sie ein Beispiel für einen Entscheidungsbaum für unseren Irisblüten-Datensatz.
ONNX
Wie Sie sich vorstellen können, können Modelle für maschinelles Lernen in einer Vielzahl von Formaten vorliegen und müssen auf vielen unterschiedlichen Hardwarekomponenten mit unterschiedlichen Beschleunigungsmethoden ausgeführt werden. Der Open Neural Network Exchange versucht, dieses Problem zu entschärfen. Es wird in Open Office, Azure und unzähligen anderen Anwendungen auf der ganzen Welt eingesetzt. Es wird mit ziemlicher Sicherheit auf dem Gerät verwendet, auf dem Sie diesen Blog lesen.
Um Onnx-Modelle auszuführen, benötigen wir die Onnx-Laufzeit, dies bringt Herausforderungen mit sich. Besonders auf Arm-Prozessoren, aber mit den bereitgestellten Docker-Images sollte es Ihnen gut gehen!
Technische Komplettlösung
Voraussetzungen
Ich verwende einen AXC F 2152-Controller mit installierter Firmware 2021.0 LTS und einer Ubuntu 20.04-VM, um das Modell zu trainieren. Die Skripts zum Trainieren und Ableiten des Modells werden bereitgestellt, aber die Einrichtung der Ubuntu-VM ist nicht Gegenstand des Blogs. Sie finden gute Erklärungen zur Installation der benötigten Python-Pakete und alle verwendeten Pakete sollten korrekt mit pip3 installiert werden.
Auf dem PLCnext-Controller muss eine Container-Engine installiert sein. Eine gute Erklärung der Vorgehensweise finden Sie hier.
Ein ähnliches Vorgehen ist auch mit dem AXC F 3152 möglich.
Für diesen Blog benötigen Sie mindestens eine minimale Erfahrung mit Python und Containern.
Modell trainieren
Laden Sie den Inhalt dieses GitHub-Repositorys herunter und stellen Sie sicher, dass alle erforderlichen Pakete installiert sind.
Das erste Skript, das wir ausführen werden, ist das Train-Skript, mit dem wir unser Modell an den Iris-Datensatz anpassen.
Unten finden Sie einen Codeausschnitt aus diesem Trainingsskript. Dieses Skript erstellt eine „.onnx“-Datei, die ein trainiertes Modell enthält.
# Slit the dataset in a training and testing dataset
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, Y_test = train_test_split(X, y)
# Define the model and fit the model with training data and print information about the model
clr = DecisionTreeClassifier()
clr.fit(X_train, y_train)
print(clr)
#Convert the model from sklearn format to ONNX (Open Neural Network Exchange)
initial_type = [('float_input', FloatTensorType([None, 4]))]
onx = convert_sklearn(clr, initial_types=initial_type)
with open("decision_tree_iris.onnx", "wb") as f:
f.write(onx.SerializeToString())
Inferenz auf Ubuntu
Überprüfen Sie Ihr Modell, indem Sie es auf Ihrem Entwicklungscomputer ausführen. Wenn Sie das Inferenzskript ausführen, sollten Sie 2 Ganzzahlen erhalten, die einer Art von Iris-Blüte entsprechen.
import numpy as np
import onnxruntime as rt
X_test = np.array([[5.8,4.0,1.2,0.2],[7.7,3.8,6.7,2.2,]])
sess = rt.InferenceSession("decision_tree_iris.onnx")
input_name = sess.get_inputs()[0].name
label_name = sess.get_outputs()[0].name
pred_onx = sess.run(
[label_name], {input_name: X_test.astype(np.float32)})[0]
print(pred_onx)
output : [0 2]
Inferenz auf PLCnext
Öffnen Sie Ihren bevorzugten sFTP-Client und legen Sie die Repositorys „.onnx“ und „inference.py“ in /opt/plcnext/onnx auf Ihrem PLCnext-Controller ab. Fahren Sie mit der Ausführung des nächsten Befehls als root fort:
balena-engine run -it --name onnx -v /opt/plcnext/onnx/:/app pxcbe/onnx-runtime-arm32v7
Führen Sie das Python-Inferenzskript mit
auscd /app
python3 /app/inference.py
Wenn alles gut gegangen ist, erhalten Sie die gleiche Ausgabe wie bei der Inferenz auf Ihrer Ubuntu-VM! Herzlichen Glückwunsch, Sie haben es bis zum Ende geschafft. Jetzt geh und ändere die Dinge!
Wie in einer Anwendung implementieren?
Eigentlich sind wir noch nicht fertig. Ich meine, das Klassifizieren von Irisblumen macht Spaß, aber ich kann mir nicht mehrere Anwendungen dafür auf einem logischen Controller vorstellen. Sie müssen sich Ihr eigenes Modell ausdenken und eine API für dieses Modell erstellen, damit Sie daraus Rückschlüsse ziehen können. Sie können wählen, ob Sie Daten mit OPC UA an das Modell liefern oder einen benutzerdefinierten REST-Endpunkt dafür erstellen. Auf jeden Fall müssen Sie etwas mehr Code schreiben, als von mir bereitgestellt.
In Anbetracht dessen, dass das Erstellen der Bilder buchstäblich Tage und schlaflose Nächte gekostet hat, schlage ich vor, dass Sie Ihr Bild auf dem bereitgestellten Bild aufbauen. In der Referenz finden Sie eine gute Ressource zum Erstellen einer Python-Container-App.
Referenzen:
https://www.technologyreview.com/2018/11/17/103781/what-is-machine-learning-we-drew-you-another-flowchart/https://en.wikipedia.org/wiki/Iris_flower_data_setBitte akzeptieren Sie Marketing-Cookies, um dieses Video anzusehen.
https://www.researchgate.net/figure/Decision-tree-for-Iris-dataset_fig1_293194222https://onnx.ai/
https://github.com/PLCnext/Docker_GettingStarted
https://www.wintellect.com/containerize-python-app-5-minutes/
Industrietechnik
- Maschinelles Lernen auf AWS; Alles wissen
- Nähmaschine
- Die Lieferkette und maschinelles Lernen
- Sollte die Beschaffung KI und maschinelles Lernen fürchten oder begrüßen?
- Maschinelles Lernen im Feld
- Maschinelles Lernen in der vorausschauenden Wartung
- Wie sich KI und maschinelles Lernen auf die CNC-Bearbeitung auswirken
- Die 4 Branchen, die am meisten vom maschinellen Lernen profitieren
- Die 9 maschinellen Lernanwendungen, die Sie kennen sollten
- Akkulebensdauer mit maschinellem Lernen vorhersagen