TinyML: Machine learning para microcontroladores

Introdução 

Precisamos falar sobre AIoT (Inteligência Artificial das Coisas), e mais precisamente, sobre TinyML. De algum tempo para cá os requisitos nos diferentes projetos envolvendo objetos conectados deixaram de ser apenas baixo consumo, capacidade de conectividade de diferentes formas e tamanho reduzido. Com o vasto número de aplicações nos diferentes setores, os objetos conectados agora também demandam inteligência a partir de decisões baseadas em sua própria unidade de processamento. 

Em uma comparação com tradicionais arquiteturas de IoT dividida em camadas de sensoriamento, fog/edge computing e a nuvem, a necessidade da inteligência no próprio dispositivo é ocasionada em muitos casos pela conectividade restrita e/ou limitada e  latência na decisão computacional. Apesar da iminente chegada da conectividade 5G, que pode eliminar algumas dessas barreiras e limitações, muitas aplicações e projetos envolvendo objetos conectados já possuem esta demanda. 

Assim, o TinyML é um framework que une algumas técnicas tradicionais de machine learning com as ferramentas para sua otimização e compatibilidade para microcontroladores de 32-bits. Note que a principal diferença do TinyML para os frameworks, e bibliotecas, tradicionais, é a compatibilidade com processadores que possuem menos requisitos computacionais (ex: clock e memória).

Começando com TinyML: as ferramentas necessárias

Assim como C/C++ são as linguagens mais utilizadas para sistemas embarcados, os projetos que envolvem machine learning e data science são predominantemente em Python. Uma das ferramentas que acelerou a adoção da mesma foi o uso e compartilhamento de Jupyter Notebooks. Para aqueles que não estão acostumados com o uso destes, é mais fácil do que você imagina. Basta uma simples conta Google para o uso do Google Collaboratory, popularmente chamado de Colab. Outra alternativa é a instalação do Anaconda com o Jupyter notebooks. 

Na parte referente às placas de desenvolvimento de hardware, seria estranho não pensar na plataforma Arduino. É importante frisar que apesar do TinyML (incluindo os pacotes do TensorFlow lite) democratizar o uso de algumas técnicas de aprendizado nos diferentes microcontroladores (MCU), a plataforma não possui como objetivo principal o suporte para os MCUs de 8-bits. Até em tutorial próprio do Arduino a recomendação inicial é o uso de uma placa Arduino Nano 33 BLE sense, confira mais sobre ela neste artigo

image 12
Figura 1 – etapas e ferramentas ao usar TinyML e TensorFlow Lite

A fim de esclarecer quais placas são compatíveis, a lista a seguir detalha placas compatíveis:

  • SparkFun Edge (32-bit ARM Cortex-M4F);
  • Arduino Nano 33 BLE Sense (nRF52840);
  • STM32F746G Discovery Kit;
  • Raspberry Pi Pico;
  • ESP32 e placas derivadas.

Outras placas disponíveis podem ser encontradas aqui, com atualização periódica.  Visto que o ESP32 é compatível, muitas placas customizadas também são compatíveis, isso engloba a Franzininho Wi-Fi. As placas compatíveis com TensorFlow Lite são listadas aqui. 

Qual o primeiro passo que todo desenvolvedor realiza assim que adquire uma nova placa de desenvolvimento? O famoso blink, o código em que um LED é acionado e controlado a partir da função de delay. De maneira diferente, o hello world de um projeto envolvendo TinyML é a construção de um modelo simples, seu treinamento e deploy no MCU. 

Etapa I – construção do modelo (realizada em computador) 

A construção do modelo é apenas uma das partes de uma aplicação de machine learning, sendo ela embarcada ou não. No nosso caso, torna-se necessário também definir as entradas e saídas do sistema, isto é, qual dado é fornecido como entrada para meu modelo (um dado de sensor, leitura de porta analógica) e a partir da saída do modelo (decisão) qual ação deve ser executada (acionamento de atuador, envio de mensagem através de transceiver de comunicação). 

Esta etapa necessita uma base de dados com as entradas necessárias para a construção do modelo proposto. Além dos dados, diferentes técnicas podem ser avaliadas, escolhendo a com melhor acurácia/precisão (ou a métrica definida) para a construção do modelo. 

A figura abaixo, adaptada do livro Tiny ML: Machine Learning with Tensorflow Lite on Arduino and Ultra-Low-Power Microcontrollers, cujo recomendo fortemente para o acompanhamento dos conceitos envolvendo TinyML e exemplos básicos, mostra a arquitetura de uma aplicação com TinyML. 

TinyML
Figura 2 – arquitetura de uma aplicação utilizando TinyML.
Fonte: adaptada de Tiny ML: Machine Learning with Tensorflow Lite on Arduino and Ultra-Low-Power Microcontrollers

A fim de ilustrar as etapas com um problema do mundo real, o livro apresenta exemplos práticos em:

  • Wake-Word (hot-word) detection: detectar uma palavra dita por um usuário (exemplos: OK Google, Hi Alexa). Confira o exemplo a partir de Arduino aqui;
  • Detecção de pessoas a partir de imagens. Confira exemplo a partir de placa baseada no Raspberry PI Pico; 
  • Varinha Mágica: a partir do movimento realizado por uma pessoa e dados de acelerômetro/giroscópio, definir qual movimento foi realizado. 

Etapa II – realizando o deploy no MCU

O deploy do modelo é a ação de exportar o modelo treinado/construído no computador para o MCU. Em geral, os modelos muitas vezes apresentam tamanho maior que o suportado, o que pode necessitar uma otimização por parte do desenvolvedor. Em uma comparação com a Figura 2, a Figura 3 mostra em detalhes a etapa para o exemplo de detecção de hot-word. A exportação acontece através de uma chamada de arquivo de cabeçalho .h (header file). 

TinyML
Figura 3 – arquitetura de uma aplicação utilizando TinyML para hot-word detection.        
Fonte: adaptada de Tiny ML: Machine Learning with Tensorflow Lite on Arduino and Ultra-Low-Power Microcontrollers

O mundo real: como utilizar no seu projeto 

O maior objetivo deste artigo é abrir a mente para que problemas e decisões que antes não podiam ser tomadas no seu sistema embarcado baseado em MCU de 32-bits, hoje podem ser facilitadas através do deploy de um modelo de machine learning embarcado. Talvez o leitor lembre-se ao revisitar a frase acima de que um if-else já resolveu uma tomada de decisão de um protótipo, correto? Porém nem sempre as decisões do nosso sistema poderão ser baseadas em estruturas if-else, por mais que muitas pessoas falam que Inteligência Artificial é resumida nestas estruturas. 

Brincadeiras a parte, a ferramenta TinyML junto com frameworks feito o TensorFlow Lite permitem a construção de modelos complexos, seja para análise de sinais analógicos, sensores ou até mesmo operação de data fusion. O exemplo do hot-word detection mesmo é baseado a partir de um modelo aplicado a sinal analógico. 

TinyML
Figura 4 – ilustração de hot-word detection com TinyML e Arduino
Fonte: Arduino

Apesar de não estar indicado nos exemplos, cabe ao desenvolvedor a coleta dos dados necessários para a consequente construção do modelo para o seu problema em específico em questão. As outras etapas, serão baseadas nos exemplos, porém específicas a seu problema em questão, isto é, a construção do seu modelo particular. Mais detalhes técnicos sobre estas etapas podem ser encontrados aqui

Além de exemplos baseado na construção de diferentes modelos, já existem empresas que facilitam o desenvolvimento de aplicações completas utilizando TinyML. Um exemplo é a Edge Impulse. A empresa é a plataforma de desenvolvimento líder para embedded machine learning, sendo usada por mais de 1.000 empresas em 10.000 diferentes projetos de ML em todo o mundo. O objetivo da plataforma é facilitar as etapas do processo, desde a criação do dataset, treinamento, construção do modelo, deploy no embarcado e aplicação final. 

TinyML
Figura 5 – etapas fornecidas pela plataforma da Edge Impulse
Fonte: Edge Impulse

Para todos aqueles curiosos pelo tema, existe bastante material gratuito disponível para aprendizado na internet. Segue uma lista de recomendações de Livro/Cursos. 

  • Livro: Tiny ML: Machine Learning with Tensorflow Lite on Arduino and Ultra-Low-Power Microcontrollers

Espero que possamos ir desbravando este conhecimento juntos a partir desta e as futuras publicações no portal Embarcados sobre o tema. 

Próximos Passos 

No próximo artigo irei detalhar o Arduino Tiny Machine Learning Kit, um kit inicial para quem está aprendendo TinyML baseado em exemplos e na especialização da Edx. Além do overview do kit, espero mostrar as etapas do treinamento, construção e deploy de modelo. 

TinyML
Figura 6 – Arduino tiny machine learning kit
Fonte: Arduino

Referências

  • Warden, Pete, and Daniel Situnayake. Tinyml: Machine learning with tensorflow lite on arduino and ultra-low-power microcontrollers. ” O’Reilly Media, Inc.”, 2019.
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Djan Rosário
Djan
19/04/2021 11:03

Muito bom, parabéns pela iniciativa de esclarecer sobre o tema.

Silvio Fernandes
Silvio Fernandes
15/04/2021 17:54

Excelente artigo, é uma boa introdução para todos que queiram começar a “brincar” com as coisas sérias que ficarão mais presentes no mundo do IoT.

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H