Integrando Machine Learning em Controladores PLCnext
Até agora todos ouviram falar sobre Machine Learning e como isso mudará tudo. Mas muito poucos têm uma ideia de como começar a mudar tudo. Espero que quando você tentar os passos neste blog, ou até mesmo ler sobre isso, ajude a entender como começar a mudar coisas com seu Controlador PLCnext. Neste blog, vou abordar o treinamento do seu primeiro modelo ML, convertê-lo para o padrão ONNX e fazer inferência do modelo em um controlador PLCnext. Para não tornar as coisas muito complexas, usarei o famoso dataset Iris para construir nosso modelo.
Antes de começar, deve ficar muito claro o que tentaremos alcançar. Por isso, darei uma pequena explicação sobre os tópicos tratados neste blog. Minhas referências podem ser encontradas no final.
Introdução ao Machine Learning
O que é Machine Learning
A essência do machine learning é tentar encontrar padrões em conjuntos de dados com o uso de estatísticas e algoritmos. Diferenciamos entre três tipos principais de machine learning: supervisionado, não supervisionado e por reforço. O aprendizado supervisionado é o "sabor" mais usado hoje e usaremos aprendizado supervisionado neste blog. No aprendizado supervisionado, rotulamos os dados e dizemos à máquina exatamente quais padrões estamos procurando.
No aprendizado não supervisionado, não rotulamos nossos dados e deixamos a máquina encontrar seus próprios padrões. Como esta técnica tem aplicações menos óbvias, o aprendizado não supervisionado é menos popular.
Por fim, no aprendizado por reforço, um algoritmo aprende por tentativa e erro para atingir um objetivo declarado. Ele apenas tenta muitas coisas e recebe uma recompensa ou penalização dependendo se foi uma ação boa ou ruim. O AlphaGo do Google é um exemplo famoso de aprendizado por reforço.
O Dataset de Flores Iris
Segundo a Wikipedia, o dataset de flores Iris é:
Ok, mas como ele se parece?
No dataset Iris existem 5 campos: comprimento da sépala, largura da sépala, comprimento da pétala, largura da pétala e a variedade da flor Iris. Nosso objetivo hoje é encontrar o tipo de flor Iris quando sabemos o comprimento da sépala, largura da sépala, comprimento da pétala e largura da pétala. Então treinaremos o modelo para classificar o tipo de flor. Como você pode ter adivinhado, este tipo de machine learning é classificação.
Machine learning também pode ser usado para prever um valor no dataset. Este procedimento é chamado de regressão e usa algoritmos diferentes da classificação.
O Algoritmo
Hoje usaremos o "Decision Tree Classifier" não porque seja perfeito para a tarefa, mas porque é muito intuitivo e pode ser facilmente entendido sem matemática complexa. Aqui você pode encontrar um exemplo de uma decision tree para nosso dataset de flores Iris.

ONNX
Como você pode imaginar, modelos de Machine Learning podem vir em uma grande variedade de formatos e precisam rodar em muitos hardwares diferentes com diferentes métodos de aceleração. O Open Neural Network Exchange (ONNX) tenta mitigar esse problema. Ele é usado no Open Office, Azure e incontáveis outras aplicações ao redor do mundo. Quase certamente é usado no dispositivo em que você está lendo este blog.
Para rodar modelos ONNX precisamos do ONNX Runtime, isso vem com seus desafios. Especialmente em processadores ARM, mas com as imagens Docker fornecidas, você deve ficar bem!
Passo a Passo Técnico
Pré-requisitos
Estou usando um controlador AXC F 2152 com firmware 2021.0 LTS instalado e uma VM Ubuntu 20.04 para treinar o modelo. Os scripts para treinamento e inferência do modelo são fornecidos, mas a configuração da VM Ubuntu está fora do escopo do blog. Você pode encontrar boas explicações sobre como instalar os pacotes Python necessários e todos os pacotes usados devem instalar corretamente com pip3.
No controlador PLCnext precisaremos de um container engine instalado. Você pode encontrar uma boa explicação do procedimento aqui.
Um procedimento semelhante com o AXC F 3152 também é possível.
Você precisará de pelo menos experiência mínima com Python e containers para este blog.
Treinando o Modelo
Baixe o conteúdo deste repositório GitHub e certifique-se de que todos os pacotes necessários estão instalados.
O primeiro script que vamos rodar é o script de treino onde vamos ajustar nosso modelo ao dataset iris. Abaixo você encontra um trecho de código deste script de treinamento. Este script criará um arquivo .onnx que contém nosso modelo treinado.
# Divide o dataset em treino e teste iris = load_iris() X, y = iris.data, iris.target X_train, X_test, y_train, Y_test = train_test_split(X, y)
# Define o modelo e ajusta com dados de treino e imprime informações sobre o modelo clr = DecisionTreeClassifier() clr.fit(X_train, y_train) print(clr)
# Converte o modelo do formato sklearn para 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())
Inferência no Ubuntu
Verifique seu modelo rodando-o na sua máquina de desenvolvimento. Quando você rodar o script de inferência, deve obter 2 inteiros correspondentes a um tipo de flor 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]
Inferência no PLCnext
Abra seu cliente sFTP favorito e solte o arquivo .onnx e inference.py do repositório em /opt/plcnext/onnx no seu controlador PLCnext. Prossiga executando o próximo comando como root:
balena-engine run -it --name onnx -v /opt/plcnext/onnx/:/app pxcbe/onnx-runtime-arm32v7
Execute o script python de inferência com
cd /app python3 /app/inference.py
Se tudo correu bem, você obtém a mesma saída que com a inferência na sua VM Ubuntu! Parabéns, você chegou ao fim. Agora vá mudar as coisas!
Como Implementar em uma Aplicação?
Na verdade, ainda não terminamos. Quer dizer, classificar flores Iris é divertido, mas não consigo imaginar múltiplas aplicações para isso em um controlador lógico. Você precisará criar seu próprio modelo e criar uma API para esse modelo para poder fazer inferência com ele. Você pode optar por entregar dados ao modelo com OPC UA ou construir um endpoint REST personalizado para ele. De qualquer forma, você precisará escrever mais código do que o fornecido por mim.
Considerando que a construção das imagens literalmente me levou dias e uma noite sem dormir, sugiro que você construa sua imagem sobre a imagem fornecida. Nas referências você pode encontrar um bom recurso para construir um container app Python.
Referências:
- What is Machine Learning?
- Iris flower dataset - Wikipedia
- Decision Tree para Iris dataset
- ONNX
- PLCnext Docker Getting Started
- Containerize Python App in 5 Minutes
- ONNX Models
Tecnologia industrial
- Dominando Machine Learning na AWS: Guia Abrangente
- A Evolução e Fabricação de Máquinas de Costura: Da Inovação do Século XIX à Automação Moderna
- Aproveitando Machine Learning para Otimizar Gestão da Cadeia de Suprimentos MRO
- Adotando IA e Machine Learning em Compras: Oportunidades, Desafios e Melhores Práticas
- Aprendizado de Máquina Acelera Segurança de Oleodutos: Detecção de Falhas em Tempo Real Economiza $10M
- Revolucionando a Confiabilidade de Ativos: Aprendizado de Máquina para Manutenção Preditiva
- Como IA e Aprendizado de Máquina Revolucionam a Usinagem CNC
- Top 4 Indústrias Revolucionadas pelo Machine Learning
- 9 Aplicações Essenciais de Machine Learning que Você Precisa Conhecer
- Previsão Precisa de Vida Útil de Baterias com IA – Estudo do DOE Argonne