## Inteligência artificial para IOT e EDGE
#### TinyML & Edge Impulse
:robot_face:
Felipe Vargas
Maurício Taffarel
---
### Inteligência artificial
---
<img class="round-border" src="https://imgur.com/XVazNiT.png" height="420"/>
Capacidade das máquinas, dos sistemas e dos computadores simularem ou até mesmo aprimorarem aspectos da inteligência humana.
---
### Mas precisamos mesmo de IA?
---
### Mas precisamos mesmo de IA?
Detecção de incêndios florestais usando taxas de variação de umidade
<img class="round-border" src="https://imgur.com/e3WkXAL.png" height="450"/>
---
### Mas precisamos mesmo de IA?
Comportamento do motorista em frenagens bruscas
<img class="round-border" src="https://imgur.com/DimQoV4.png" height="420"/>
---
### O que é Machine Learning?
<img class="round-border" src="https://imgur.com/UOiCEMj.png"/>
---
### As categorias de Machine Learning
---
#### Aprendizado supervisionado
- Regressão
- Classificação
<img class="round-border" src="https://imgur.com/3LhT5Yw.png"/>
---
#### Aprendizado não supervisionado
- Clustering
- Segmentação
<img class="round-border" src="https://imgur.com/VDb17b8.png"/>
---
#### Aprendizado por reforço
- Recompensas e penalidades
<img class="round-border" src="https://imgur.com/Zyv1O4K.png" height=400/>
---
### Rede neural

- Entradas
- Neurônios Artificiais
- Saídas
---
### Neurônio Biológico
<img class="round-border" src="https://imgur.com/yw4NkGO.png"/>
---
### Neurônio Artificial Perceptron
<img src="https://imgur.com/BYeA9DJ.png" style="filter: invert(1);"/>
---
### Equações do Perceptron
$$net'_{j}\left(t\right)=\sum_{i=1}^{n}w_{ij}(t)\cdot x_{i}\left(t\right)$$
$$o_j\left(t\right)=\varphi\left(net_{j}\left(t\right)\ ,\ \theta_j\left(t\right)\right)$$
---
#### Simplificação das equações...
$$net_{j}\left(t\right)=\theta_j(t) +\sum_{i=1}^{n}w_{ij}(t)\cdot x_{i}\left(t\right)$$
---
### Função de ativação (degrau bipolar)
$$o_j\left(t\right)=\varphi\left(net_{j}(t)\right)=
\begin{cases}
1, & \text{se $net_{j}(t)\ge0$} \\
-1, & \text{se $net_{j}(t)<0$}
\end{cases}$$
ReLu
Degrau bipolar
Tangente Hiperbólica
Softmax
Sigmoide
etc
---
### Fronteira de decisão
$$x_1(t)\cdot\omega_{1j}(t) + x_2(t)\cdot\omega_{2j}(t) + \theta_j(t) = 0$$
---
$$\omega_{1j}\cdot x_1(t) + \omega_{2j}\cdot x_2(t) + \theta_j = 0$$
$$Ax+By+C=0$$
<img class="round-border" src="https://imgur.com/988oRGs.png"/>
---
### Exemplo: Lavar o carro
$\rightarrow$ Sim ou não

---
<div class="left">
### Excitatórias:
- Se tá fazendo sol
- Disponibilidade de tempo
- Disponibilidade de água
- Vai sair hoje
### Inibitórias:
- Estado de limpeza do carro
- Não vai ter ajuda
- Previsão de usar o carro em pista de terra
- O quanto você não liga para a limpeza
</div>
---
### Exemplo
<iframe src="https://paulo-rozatto.github.io/perceptron-viewer/" height=500 width=800></iframe>
https://paulo-rozatto.github.io/perceptron-viewer/
---
### Aprendizado de máquina em sistemas embarcados
---
### O que é um sistema embarcado?
- Sistema com baixo poder computacional;
- Função de controlar pequenos sistemas de forma descentralizada;
- Limitações de armazenamento e banda de rede;
- Baixo consumo de energia;
- Baixa latência e processamento de dados em tempo real (rpm, temperatura, vibrações etc);
---
## TinyML
<div style="background: #ed0973; border-radius: 20px;">
TinyML pode ser definido como o conjunto de técnicas que permite a implementação de algoritmos em dispositivos que não tem tantos recursos computacionais e capacidade de memória.
</div>
---
### Benefícios do TinyML
- Privacidade de dados;
- Baixo consumo de energia;
- Baixa latência: não necessita conexão com redes para o processamento;
---
### Benefícios do TinyML
- Processamento em borda (local) evitando gargalos de redes. Como processar vibrações enviando stream de dados em redes móveis?
---
## Aplicações
---
### Vibração e movimento
- Acelerômetro
- Pressão
- Lidar/Radar
- Velocidade
- Vibração e choque
- Poluição, densidade e viscosidade
<br>
<img src="https://imgur.com/f8MHPWA.png" height=150>
---
### Voz e som
- Localização de palavras-chave
- Speech recognition
- NLP
- Speech synthesis
- Sound recognition
<img src="https://imgur.com/f8MHPWA.png">
---
### Visão
- Reconhecimento de objetos
- Desbloqueio facial
- Classificação de objetos
---
### Ferramentas clássicas
| Python | TensorFlow | Sci-Kit |
|:--------------------------------------------------:|:--------------------------------------------------:|:--------------------------------------------------:|
|  |  |  |
---
<img src="https://imgur.com/2N7L0Wu.png"/>
Biblioteca móvel que permite a execução de modelos TensorFlow em dispositivos móveis e embarcados.
Originalmente desenvolvida pelo Google.
---
### Fluxo de implementação
<img class="round-border" src="https://imgur.com/bwExOfG.png"/>
---
### Exemplo do uso do TensorFlow Lite
<img class="round-border" src="https://imgur.com/cMYM0pR.png" height="350"/>
Dados para treinamento usando **Keras**
60% | 20% | 20%
Ruído gaussiano de amplitude 0,1
---
### Arquitetura do modelo proposto
<img class="round-border" src="https://imgur.com/eNJeasa.png" />
---
```python=1
# Convert Keras model to a tflite model
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
```
```python=1
from tensorflow.lite.python.util \
import convert_bytes_to_c_source
source_text, header_text =
convert_bytes_to_c_source(tflite_model, "sine_model")
with open('sine_model.h', 'w') as file:
file.write(header_text)
with open('sine_model.cc', 'w') as file:
file.write(source_text)
```
Conversão e otimização de código com base no TensorFlow Lite
---
```c=1
// sine_model.h
#ifndef TENSORFLOW_LITE_UTIL_SINE_MODEL_DATA_H_
#define TENSORFLOW_LITE_UTIL_SINE_MODEL_DATA_H_
extern const unsigned char sine_model[];
extern const int sine_model_len;
#endif // TENSORFLOW_LITE_UTIL_SINE_MODEL_DATA_H_
```
```c=1
// sine_model.cc
const unsigned char sine_model[] DATA_ALIGN_ATTRIBUTE = {
0x1c, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33,
0x14, 0x00, 0x20, 0x00, 0x1c, 0x00, 0x18, 0x00,
0x14, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x08, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00,
0x1c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
... // Omitido outras linhas
}
const int sine_model_len = 3168;
```
---
### Inferência no device
<pre><code data-line-numbers="1-2|4-6|8-10|13-15|17-18|19-21|25-26">#include <EloquentTinyML.h>
#include "sine_model.h"
#define NUMBER_OF_INPUTS 1
#define NUMBER_OF_OUTPUTS 1
#define TENSOR_ARENA_SIZE 2*1024
Eloquent::TinyML::TfLite<NUMBER_OF_INPUTS,
NUMBER_OF_OUTPUTS,
TENSOR_ARENA_SIZE> ml;
void setup() {
Serial.begin(115200);
ml.begin(sine_model);
for(int i=0; i<100; i++) {
float x = 2*3.14159*i/100;
float y = sin(x);
float input[1] = { x };
float predicted = ml.predict(input);
Serial.printf("%.5f, %.5f", x, predicted);
}
}
void loop() {
}
</code></pre>
---
### Imagem do processamento
<img class="round-border" src="https://imgur.com/GtjVFk9.png" height=400/>
$\epsilon=0,1014$ | $\sigma = 0,0267$ | $\Delta = 136\mu s$ | $T=4,764kB$ | $R^2 = 0,9979 = 99,79\%$
---
### Limitações e Desafios da Inteligência Artificial
- Abordagem probabilística
- Explainable AI
- Ética
---
### Abordagem probabilística
Entender que aprendizado de máquina embarcado não é uma solução mágica para tudo!
Nem sempre é aceitável!
---
### Explainable AI
Tanto é que uma das linhas de pesquisa mais importantes dos dias de hoje é o Explainable AI: abrir um pouco da caixa, entender de alguma forma o que está acontecendo, mesclar o poder da rede neural com regras explícitas.
---
### Ética em IA
E outra linha de pesquisas é a Ética em IA: de quem será a culpa, no caso de um atropelamento?
- Do fabricante?
- Do usuário que confiou no veículo?
- Da caixa-preta que ninguém sabe interpretar?
- Do engenheiro que treinou o algoritmo?
- Haverá auditoria de algoritmos, por parte do governo?
São perguntas difíceis de responder.
---
#### Plataforma EDGE Impulse
<img class="round-border" src="https://imgur.com/oHgD7ko.png"/>
Plataforma online para criação de modelos, treinamento e otimização de recursos.
---
### Edge Impulse
Treinamento de estruturas e desenvolvimento diretamente do navegador. Exemplo: [Oura](https://assets-global.website-files.com/618cdeef45d18e4ef2fd85f3/628795dc61c12d55b0f4e769_Go-Deeper-On-Deep-Sleep-Oura.pdf)
<img class="round-border" src="https://imgur.com/1hj0S3l.png" height="400"/>
---
### Exemplo acelerômetro
<img class="round-border" src="https://hackmd.io/_uploads/SJWB6ATrT.png" height="400px"/>
Experimento interativo utilizando smartphones
---
<img class="round-border" src="https://imgur.com/5JiCwvZ.png" />
---
### Porquê eu usaria isso?
### Workflow de desenvolvimento
- Pipeline de desenvolvimento que pode ser automatizado.
- Redução drástica da equipe necessária.
- Redução de tempo de desenvolvimento do produto.
---
### Ciclo de vida de um produto
<img src="https://imgur.com/AKLWd8w.png"/>
---
#### Ciclo de desenvolvimento Edge Impulse
<img class="round-border" src="https://imgur.com/nTn1cks.png" height="500"/>
---
#### Ingestão de dados (coleta)
<img class="round-border" src="https://imgur.com/uyOQYwa.png"/>
<img style="width: 250px" src="https://imgur.com/f8MHPWA.png">
---
#### Criando um Impulse
<img class="round-border" src="https://imgur.com/vR2eFXl.png" height=300/>
Feature Extration:
MFE algoritmo otimizado para processamento de aúdio (Mel-filterbank energy)
Poderia ser FFT, IMU (Dados de acelerômetros) etc
---
#### Criando um Impulse
A plataforma entre o estado da arte dos algoritmos para cada aplicação!
Isso reduz o tempo de desenvolvimento drásticamente!
[Blocos disponíveis](https://docs.edgeimpulse.com/docs/edge-impulse-studio/processing-blocks)
---
#### Extração de características
<img class="round-border" src="https://imgur.com/1pYXulY.png" height="400"/>
Para processamento do reconhecimento da frase “Olá mundo"
---
#### Resultados
<img class="round-border" src="https://imgur.com/opBwb7T.png" height="540"/>
---
#### Classificação
<img class="round-border" src="https://imgur.com/DSn1g2f.png" height="600"/>
---
#### Arquitetura da Rede
Exemplo do "Olá mundo"
<img class="round-border" src="https://imgur.com/09vgnCv.png" height="520"/>
---
### Arquitetura da Rede
Exemplo do acelerômetro
<img class="round-border" src="https://imgur.com/oy2v6LY.png"/>
---
#### EON Tunning
<img class="round-border" src="https://imgur.com/FDNjDmx.png"/>
---
#### Retreinamento do Modelo
<img class="round-border" src="https://imgur.com/QWieoGn.png"/>
---
#### Classificação em tempo real
<img class="round-border" src="https://imgur.com/E1wfTna.png"/>
---
#### Model Testing
<img class="round-border" src="https://imgur.com/4Wt9QtC.png"/>
---
#### Data augmentation
<img class="round-border" src="https://imgur.com/TYz6muM.png"/>
---
### Deployment
<img class="round-border" src="https://imgur.com/71p2lwt.png"/>
---
### Exemplo para o Microcontrolador
Arduino Nano 33 BLE
<img src="https://imgur.com/f8MHPWA.png">
---
Diga "Olá DB Lab"
<img class="round-border" src="https://hackmd.io/_uploads/SkVSRR6Bp.png"/>
---
## Muito Obrigado!
| Felipe Vargas | Maurício Taffarel |
|:---------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------:|
| <img style="border-radius: 50%" width="300" src="https://imgur.com/DbtTyGT.png"/> | <img style="border-radius: 50%" width="300" src="https://imgur.com/gxNVWLT.png"/> |
<!-- Estilos customizados não editar -->
<style type="text/css">
:root {
--primary-color: #221f52;
--secondary-color: #ed0973;
}
/* Gerais */
.reveal .slide-background-content {
background-color: var(--primary-color);
}
.reveal .progress span {
background: var(--secondary-color);
}
.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5 {
color: var(--secondary-color);
}
.reveal p,
.reveal div,
.reveal a {
color: white;
}
.reveal a {
text-decoration: underline;
}
.round-border {
border-radius: 20px
}
.left {
text-align: left;
}
</style>
{"title":"[APRESENTACAO] Inteligência artificial para IOT e EDGE","description":"View the slide with \"Slide Mode\".","contributors":"[{\"id\":\"09cd127c-faed-47a5-8f63-7a0843045d46\",\"add\":13502,\"del\":490},{\"id\":\"a637f2b8-735a-4fea-b426-0aea5a3b3002\",\"add\":266,\"del\":124}]"}