Inteligência Artificial Embarcada da Renesas - Embarcados
Renesas Electronics Brasil
Inteligência Artificial Embarcada da Renesas
Desde 2016, com o investimento de diversas empresas de tecnologia, entre elas, Amazon (GPUs sob demanda), Google (TensorFlow) e NVIDIA (GPUs disponíveis pro mercado com alta capacidade de processamento), hardware e ferramentas para a criação e utilização de inteligência artificial estão disponíveis em massa. As aplicações de AI então passaram a ser encontradas em smartphones e diversas empresas investiram pesado em fazer com que fosse possível baixar o consumo de tais algoritmos. E trazer esses algoritmos para a ponta, pensando em dispositivos IoT que têm restrição de processamento e consumo de energia, ainda é um desafio maior, pois exige também um balanço entre o hardware disponível no dispositivo, que implica em custo e disponibilidade do dispositivo online (e, claro, possibilidade e tolerância a falha).
Bom, vamos começar apresentando alguns conceitos até chegarmos na apresentação da solução para IA Embarcada presente neste artigo. Apresentaremos um exemplo prático de uso do TensorFlow com uma placa de desenvolvimento da Renesas com processador ARM Cortex-A9, com detalhe de toda implementação.
Redes Neurais e Redes Neurais Profundas (DNN)
Redes Neurais são um conjunto de algoritmos, modelados e construídos inspirados em como o cérebro humano funciona, desenhados para reconhecerem padrões previamente treinados. Eles podem interpretar dados utilizando modelos através de classificação e interpretação de entradas de dados crus. Os padrões que os algoritmos reconhecem geralmente são padrões numéricos e vetoriais, nos quais os dados do mundo real têm que ser convertidos previamente, como imagens, sons e textos, por exemplo.
Então esse algoritmos nos ajudam a separar os dados de acordo com similaridades de acordo com seus modelos previamente treinados, e classificam dados quando possuem dados conhecidos prontos para passarem por um treinamento.
As redes neurais também podem extrair características que podem servir de entrada para outros algoritmos para separação e classificação (clustering and classification), então pode-se pensar em Deep Neural Networks (DNN) como componentes de aplicações maiores de machine-learning envolvendo algoritmos de reforço de aprendizado, classificação e regressão.
O DNN melhorou muito a precisão da estimativa feita pelas redes neurais pois possui um algoritmo que consegue aprender informações de entrada que é rotulado a fim de que os resultados da estimativa aparecendo na saída coincidam uns com os outros. Ela também conseguiu uma melhor precisão de estimativa graças às técnicas de processamento em multicamadas e extração de recursos automatizados.
DNN possui uma grande vantagem para implementação de sistemas embarcados devido a menor quantidade de computação necessária para a execução de aprendizagem e inferência, e essa é uma característica ainda mais importante para que esse algoritmo possa ser executado com menos poder de computação na fase de inferência (no caso de um projeto onde se usa reconhecimento de imagens, a tarefa de reconhecer as imagens em tempo real demanda menos poder de processamento).
Figura: Aprendizado e funcionamento de uma DNN
O cálculo dos coeficientes desconhecidos demanda uma enorme energia computacional, que acontece durante a fase de aprendizado da rede neural.
Figura: Rede Neural treinada
No entanto, após o aprendizado, os coeficientes da rede são todos conhecidos e constantes e poderiam ser armazenados em uma ROM, para o uso em um microcontrolador em um sistema embarcados. A saída então para uma determinada entrada pode ser determinada através de uma operação com matrizes e coeficientes fixos. Esse cálculo é mais simples e pode ser usado em sistemas de pouca RAM, como microcontrolador.
Dessa forma, um sistema inteligente com Rede Neural para operar em um sistema com recursos computacionais limitados deve permitir que se use coeficientes de uma rede neural já treinada e possua a fórmula para resolver as matrizes para verificação de reconhecimento de padrões, por exemplo.
A Renesas Electronics, pensando em fornecer essas ferramentas ao mercado IoT, para uso de inteligência nos sistemas embarcados de baixo consumo, foi uma das primeiras empresas do mundo a disponibilizar uma solução embedded AI (embarcada com Inteligência Artificial) que permite com que os usuários traduzam uma rede treinada de TensorFlow para Caffe para código que pode ser utilizada em seus microcontroladores. A ferramenta integrada no ambiente de desenvolvimento e2Studio transforma a rede neural em código C utilizável pela ferramenta dos microcontroladores (e-AI Translator) e também possui um verificador e-AI (e-AI Checker) que prevê a performance da rede traduzida.
Figura: Solução e-AI da Renesas (embarcada com Inteligência Artificial), integrada no e2Studio, para os microcontroladores da linha RZ, RX e RL78 e Synergy
A seguir vamos demonstrar como fazer com que o e-AI funcione com a placa de desenvolvimento GR-Peach e o e2Studio na prática.
Parte Prática – Como fizemos com que o e-AI da Renesas funcionasse com a placa GR-PEACH
Este tutorial irá demonstrar como utilizar o e-AI translator para "traduzir" a saída do TensorFlow para ser utilizado na ponta.
Neste caso será utilizada a GR-PEACH (mBed enabled):
Figura: Placa GR-Peach – https://os.mbed.com/platforms/Renesas-GR-PEACH/
Este kit é equipado com o RZ/A1H que é nada menos que um ARM Cortex-A9 @ 400MHz com 10 MB de RAM integrada. Este processador entrega 1000 DMIPS de processamento o que o torna um kit bem promissor para realizar processamento de eAI na ponta. Além disso, ele já foi alvo de alguns posts da nossa amiga Gedeane para o Embarcados, confira nos link abaixo.
Primeiros passos com a GR-Peach Renesas – Renesas Web Compiler
Primeiros passos com a GR-Peach Renesas – MBED
Este tutorial de e-AI utiliza o MNIST database para o aprendizado. Este processo está bem descrito no tutorial abaixo.
https://datascienceplus.com/mnist-for-machine-learning-beginners-with-softmax-regression/
Em resumo iremos utilizar um banco de dados de números escritos à mão para treinar nosso modelo e, após este processo, utilizar o e-AI translator para traduzir o modelo gerado para rodar compilado na GR-PEACH.
https://en.wikipedia.org/wiki/MNIST_database
O eAI-Translator já está disponível no Renesas Web Compiler ou pode ser baixado e instalado na IDE e² studio.
https://www.renesas.com/br/en/solutions/key-technology/e-ai/tool.html
Neste ponto iremos gerar o modelo, para isso utilizaremos como base o mnist_softmax_for_e-ai.py que foi adaptado de um exemplo do próprio TensorFlow.
Para gerar o modelo serão necessários:
Python 3.6.6 de 64 bits (Até o momento deste tutorial não havia suporte para o Python 3.7);
Pip 18.0;
TensorFlow 1.10.0.
Após instalar o TensorFlow via o pip execute o comando:
python mnist_softmax_for_e-ai.py
O modelo irá estar disponível em:
No Renesas Web Compiler, crie um novo projeto com o template GR-PEACH_Sketch_V2.03.zip
Figura: Renesas Web Compiler
Neste novo projeto entre no e-AI Translator e faça o upload do modelo:
Figura: e-AI Translator
Após este procedimento será sugerida uma aplicação minimalista para realizar os teste. Este conteúdo deverá ser inserido no arquivo principal gr_sketch.cpp:
// Sample code for e-AI #include <Arduino.h> #ifdef __cplusplus extern "C" { #endif #include "eAI_translated/Typedef.h" #include "eAI_translated/input_image_9.h" #include "eAI_translated/layer_graph.h" TPrecision* dnn_compute(TPrecision* input_img); #ifdef __cplusplus } #endif void setup() { Serial.begin(9600); TPrecision *prediction; TPrecision *input_img; TsInt i; long time_start = millis(); input_img = data_in; prediction = (TPrecision*) (intptr_t) dnn_compute( input_img); Serial.print("Dnn Compute time(ms):"); Serial.println(millis() - time_start); for(i = 0;i < 10;i++){ Serial.print(i); Serial.print(":"); Serial.println(prediction[i]); } } void loop() { }
// Sample code for e-AI
#include "eAI_translated/Typedef.h"
#include "eAI_translated/input_image_9.h"
#include "eAI_translated/layer_graph.h"
TPrecision* dnn_compute(TPrecision* input_img);
TPrecision *prediction;
TPrecision *input_img;
TsInt i;
long time_start = millis();
input_img = data_in;
prediction = (TPrecision*) (intptr_t) dnn_compute( input_img);
Serial.print("Dnn Compute time(ms):");
Serial.println(millis() - time_start);
for(i = 0;i < 10;i++){
Serial.print(i); Serial.print(":");
Serial.println(prediction[i]);
Após executar o Build, um arquivo de saída binário estará disponível na árvore do projeto:
Faça o download deste arquivo e adicione no drive mBed que a GR-PEACH irá gerar após inserir o cabo USB:
https://os.mbed.com/teams/Renesas/wiki/GR-PEACH-Getting-Started
Driver da GR-PEACH
Este procedimento irá regravar a aplicação e dar o novo comportamento de e-AI para a GR-PEACH
Para testar o algoritmo serão utilizadas algumas imagens de números escritos à mão.
Nos links das imagens acima a matriz de 28×28 já está num formato .h para que o usuário apenas troque o header para realizar o teste:
A saída é exibida através de um terminal virtual serial USB-CDC (https://os.mbed.com/teams/Renesas/wiki/GR-PEACH-Getting-Started) e é dada em percentual. Por exemplo, ao utilizar a imagem do "2" acima, a saída foi:
Figura: Terminal Virtual
Sendo assim, o algoritmo tem 82% de certeza que a imagem se refere ao número 2.
*Este tutorial foi adaptado do tutorial do link [5] e executado novamente na Renesas Brasil para detalhamento nesse texto.
[1] http://www.embedded-computing.com/guest-blogs/the-internet-of-learning-things
[2] https://www.renesas.com/us/en/solutions/key-technology/e-ai.html
[3] https://en.wikipedia.org/wiki/Artificial_neural_network
[4] Udacity – Fundamentos de Inteligência Artificial e Machine Learning
[5] http://gadget.renesas.com/en/product/e-ai/mnist_tutorial.html
* Este post foi patrocinado pela Renesas Electronics Brasil
A Renesas Electronics Corporation (TSE: 6723), o Maior Fornecedor Global de Microcontroladores, é um líder no fornecimento de soluções avançadas de semicondutores, incluindo microcontroladores, soluções SoC e uma ampla gama de dispositivos analógicos e de potência. Suas operações começaram como Renesas Electronics em abril de 2010, através da integração da NEC Electronics Corporation (TSE: 6723) e Renesas Technology Corp., com operações abrangendo pesquisa, desenvolvimento, design e fabricação para uma ampla gama de aplicações. Com sede no Japão, a Renesas Electronics tem subsidiárias em cerca de 20 países do mundo. Mais informações podem ser encontradas em www.renesas.com.
Inteligência Artificial, Patrocinados
Home » Software » Inteligência Artificial Embarcada da Renesas
Jordana Caires Carvalho (@jordana)
15/10/2018 17:03
Olá! Felicitações por essa tecnologia tão útil! Quais outras placas de desenvolvimento essa IA funciona? Grata!