Intégrer le Machine Learning dans les contrôleurs PLCnext
Tout le monde a entendu parler du Machine Learning et de la façon dont il va tout changer. Mais très peu savent comment commencer à changer les choses. J'espère qu'en essayant les étapes de ce blog, ou même en le lisant, vous comprendrez comment démarrer avec votre contrôleur PLCnext. Dans ce blog, j'aborde l'entraînement de votre premier modèle ML, sa conversion au standard ONNX et l'inférence du modèle sur un contrôleur PLCnext. Pour ne pas compliquer les choses, j'utiliserai le célèbre jeu de données Iris pour construire notre modèle.
Avant de commencer, il doit être très clair ce que nous essayons d'atteindre. Voici une brève explication des sujets traités. Mes références se trouvent à la fin du blog.
Introduction au Machine Learning
Qu'est-ce que le Machine Learning ?
Commençons par expliquer ce qu'est le Machine Learning. L'essence du ML est de chercher des motifs dans des jeux de données en utilisant des statistiques et des algorithmes. On distingue trois types principaux : l'apprentissage supervisé, non supervisé et par renforcement. L'apprentissage supervisé est le plus utilisé aujourd'hui et c'est celui que nous utiliserons. En apprentissage supervisé, nous étiquetons les données et disons à la machine exactement quels motifs rechercher.
En apprentissage non supervisé, nous n'étiquetons pas nos données et laissons la machine trouver ses propres motifs. Cette technique ayant des applications moins évidentes, elle est moins populaire.
Enfin, en apprentissage par renforcement, un algorithme apprend par essais et erreurs pour atteindre un objectif énoncé. Il essaie beaucoup de choses et reçoit une récompense ou une pénalité selon que l'action était bonne ou mauvaise. AlphaGo de Google est un exemple célèbre.
Le jeu de données Iris
Selon Wikipédia, le jeu de données Iris flower dataset est... Ok, mais à quoi ressemble-t-il ?
Dans le jeu de données Iris, il y a 5 champs : longueur du sépale, largeur du sépale, longueur du pétale, largeur du pétale et variété de fleur d'iris. Notre objectif est de trouver le type de fleur d'iris quand on connaît les 4 mesures. Nous allons entraîner le modèle à classifier le type de fleur. Ce type de ML est la classification.
Le ML peut aussi prédire une valeur dans le jeu de données. Cette procédure s'appelle la régression et utilise des algorithmes différents de la classification.
L'algorithme : Decision Tree Classifier
Aujourd'hui, nous utilisons le "Decision Tree Classifier" non pas parce qu'il est parfait pour la tâche, mais parce qu'il est très intuitif et compréhensible sans mathématiques complexes. Voici un exemple d'arbre de décision pour notre jeu de données Iris.
ONNX (Open Neural Network Exchange)
Les modèles ML peuvent venir dans une grande variété de formats et doivent s'exécuter sur beaucoup de matériel différent avec différentes méthodes d'accélération. ONNX tente de résoudre ce problème. Il est utilisé dans Open Office, Azure et d'innombrables autres applications dans le monde. Il est presque certainement utilisé sur l'appareil sur lequel vous lisez ce blog.
Pour exécuter des modèles ONNX, nous avons besoin du runtime ONNX, ce qui présente des défis, surtout sur les processeurs ARM. Mais avec les images Docker fournies, vous devriez être tranquille !
Parcours technique
Prérequis
J'utilise un contrôleur AXC F 2152 avec le firmware 2021.0 LTS installé et une VM Ubuntu 20.04 pour entraîner le modèle. Les scripts d'entraînement et d'inférence sont fournis, mais la configuration de la VM Ubuntu est hors sujet. Vous trouverez de bonnes explications sur l'installation des packages Python nécessaires et tous les packages utilisés devraient s'installer correctement avec pip3.
Sur le contrôleur PLCnext, nous aurons besoin d'un moteur de conteneurs installé. Vous trouverez une bonne explication de la procédure ici.
Une procédure similaire avec l'AXC F 3152 est également possible.
Vous aurez besoin d'au moins une expérience minimale avec Python et les conteneurs pour ce blog.
Entraînement du modèle
Téléchargez le contenu de ce dépôt GitHub et assurez-vous que tous les packages nécessaires sont installés.
Le premier script à exécuter est le script d'entraînement où nous allons ajuster notre modèle au jeu de données Iris. Ci-dessous, un extrait de ce script d'entraînement. Ce script créera un fichier ".onnx" contenant notre modèle entraîné.
# Division du jeu de données en ensemble d'entraînement et de test
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, Y_test = train_test_split(X, y)
# Définition du modèle et ajustement avec les données d'entraînement
clr = DecisionTreeClassifier()
clr.fit(X_train, y_train)
print(clr)
# Conversion du modèle du format sklearn vers ONNX
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())
Inférence sur Ubuntu
Vérifiez votre modèle en l'exécutant sur votre machine de développement. Lorsque vous lancez le script d'inférence, vous devriez obtenir 2 entiers correspondant à un type de fleur d'Iris.
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]
Inférence sur PLCnext
Ouvrez votre client sFTP préféré et déposez le fichier ".onnx" et "inference.py" du dépôt dans /opt/plcnext/onnx sur votre contrôleur PLCnext. Exécutez ensuite la commande suivante en root :
balena-engine run -it --name onnx -v /opt/plcnext/onnx/:/app pxcbe/onnx-runtime-arm32v7
Exécutez le script Python d'inférence avec :
cd /app
python3 /app/inference.py
Si tout s'est bien passé, vous obtenez la même sortie qu'avec l'inférence sur votre VM Ubuntu ! Félicitations, vous y êtes arrivé. Maintenant, allez changer les choses !
Comment l'implémenter dans une application ?
En fait, nous n'avons pas encore fini. Classifier des fleurs d'iris est amusant, mais je ne vois pas d'applications multiples pour cela sur un contrôleur logique. Vous devrez créer votre propre modèle et une API pour ce modèle afin de pouvoir faire de l'inférence. Vous pouvez choisir de fournir des données au modèle via OPC UA ou construire un endpoint REST personnalisé. Quoi qu'il en soit, vous devrez écrire plus de code que ce que je fournis.
Compte tenu que la construction des images m'a littéralement pris des jours et une nuit blanche, je vous suggère de construire votre image sur celle fournie. Dans les références, vous trouverez une bonne ressource pour construire une application Python en conteneur.
Références :
- What is Machine Learning
- Iris flower dataset
- Arbre de décision Iris
- ONNX
- Docker Getting Started PLCnext
- Containerize Python App
- Modèles ONNX
Technologie industrielle
- Maîtriser le Machine Learning sur AWS : Guide Complet
- L'évolution et la fabrication des machines à coudre : de l'innovation du 19e siècle à l'automatisation moderne
- Exploiter le Machine Learning pour Optimiser la Gestion de la Supply Chain MRO
- Adopter l'IA et le machine learning dans les achats : opportunités, défis et meilleures pratiques
- Le Machine Learning accélère la sécurité des pipelines : Détection de défauts en temps réel économise 10M$
- Révolutionner la fiabilité des actifs : le Machine Learning pour la maintenance prédictive
- Comment l'IA et l'apprentissage automatique révolutionnent l'usinage CNC
- Top 4 industries révolutionnées par le Machine Learning
- 9 applications essentielles du Machine Learning à connaître