## 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="500"/> --- ### Mas precisamos mesmo de IA? Comportamento do motorista em frenagens bruscas <img class="round-border" src="https://imgur.com/RAGhGTv.png" height="500"/> --- ### 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"/> --- ### Rede neural ![image](https://imgur.com/cQeufg3.png) - 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 ![Diagrama sem nome.drawio(3)](https://hackmd.io/_uploads/rkW_vbpNa.png) --- <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 https://taffarel55.github.io/perceptron/ --- ### Aprendizado de máquina em sistemas embarcados --- ### O que é um sistema embarcado? - Sistema embutido ou incorporado - Controlar ou monitorar uma determinada função - Limitação de processamento e/ou armazenamento --- ## 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 <img src="https://imgur.com/f8MHPWA.png"> --- ### 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 | |:--------------------------------------------------:|:--------------------------------------------------:|:--------------------------------------------------:| | ![image](https://hackmd.io/_uploads/HkwiSBuD6.png) | ![image](https://hackmd.io/_uploads/Byl0rrOP6.png) | ![image](https://hackmd.io/_uploads/S1J-UrOP6.png) | --- <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 Light --- ```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"/> $\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. --- ### Edge Impulse Plataforma de desenvolvimento para soluções de machine learning em sistemas embarcados. --- Exemplo acelerômetro <img class="round-border" src="https://hackmd.io/_uploads/SJWB6ATrT.png" /> --- ### 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="500"/> --- #### 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. --- <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"/> 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="450"/> Para processamento do reconhecimento da frase “Olá mundo --- #### Resultados <img class="round-border" src="https://imgur.com/opBwb7T.png" height="620"/> --- #### 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="600"/> --- ### 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"> --- Microfone <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":" TinyML","description":" TinyML","slideOptions":"{\"transition\":\"slide\",\"theme\":\"serif\",\"controls\":false,\"slideNumber\":\"c/t\",\"previewLinks\":true,\"autoSlide\":false}","contributors":"[{\"id\":\"09cd127c-faed-47a5-8f63-7a0843045d46\",\"add\":19043,\"del\":7969},{\"id\":\"a637f2b8-735a-4fea-b426-0aea5a3b3002\",\"add\":4577,\"del\":2770}]"}
    368 views
   Owned this note