O Nicla Voice é uma placa versátil que pode ser usada em vários projetos e aplicações. Com sua Unidade de Medição Inercial (IMU) integrada e Tiny Machine Learning (TinyML), a placa Nicla Voice oferece um dispositivo ideal para a aplicação descrita neste tutorial: uma aplicação de detecção de movimento com Machine Learning e Nicla Voice.
A aplicação de detecção de movimento será baseada em um modelo TinyML desenvolvido com as Ferramentas de Aprendizado de Máquina da Arduino Cloud, alimentadas pela Edge Impulse, uma plataforma líder no desenvolvimento de dispositivos inteligentes e um facilitador poderoso para aplicações TinyML.
Com as Ferramentas de Aprendizado de Máquina, capturaremos dados do IMU integrado ao Nicla Voice, criaremos e treinaremos um modelo TinyML especificamente projetado para detecção de movimento, e o implantaremos na placa para testes e validação.
Ao final deste tutorial, você terá uma aplicação totalmente funcional de detecção de movimento em execução na sua placa Nicla Voice e uma base sólida na aplicação do TinyML a aplicações do mundo real.
Objetivos e Materiais Necessários de Machine Learning e Nicla Voice:
Os objetivos deste tutorial são:
- Compreender as principais características e capacidades da placa Nicla Voice.
- Configurar a placa Nicla Voice e prepará-la para o desenvolvimento de uma aplicação de detecção de movimento.
- Tornar-se familiarizado com a integração das Ferramentas de Aprendizado de Máquina da Arduino Cloud, sua interface e principais recursos.
- Coletar dados de movimento do IMU integrado à placa Nicla Voice usando as Ferramentas de Aprendizado de Máquina da Arduino Cloud.
- Desenvolver, treinar e validar um modelo TinyML projetado para detecção de movimento usando as Ferramentas de Aprendizado de Máquina.
- Implantar o modelo TinyML treinado na placa Nicla Voice e testar suas capacidades de detecção de movimento em tempo real.
- Ganhar experiência prática e conhecimento fundamental no desenvolvimento de aplicações TinyML para cenários do mundo real.
Para isso, vamos precisar do seguinte:
- 01 x Nicla Voice
- 01 x Cabo Micro-USB
- Arduino IDE 2.0+
- Para criar modelos personalizados de Aprendizado de Máquina, são necessárias as Ferramentas Integradas de Aprendizado de Máquina da Arduino Cloud. Caso você não tenha uma conta na Arduino Cloud, será necessário criar uma primeiro.
Detecção de Movimento e TinyML
A tecnologia de detecção de movimento, que identifica e mede o movimento físico, é vital em muitos campos. A precisão e o alcance da detecção de movimento podem ser significativamente aprimorados usando uma IMU, um dispositivo avançado projetado para capturar a força e a velocidade angular. Essa capacidade aprimorada é importante em aplicações do mundo real, como rastreadores de fitness vestíveis, sistemas de segurança e navegação veicular, e controles de movimento robótico.
Nesse contexto, o TinyML surge como uma nova força transformadora. Como um ramo especializado de Aprendizado de Máquina, o TinyML foi desenvolvido explicitamente para dispositivos com poder computacional limitado, como microcontroladores. Apesar de sua natureza compacta, o TinyML oferece capacidades robustas de Aprendizado de Máquina sem impor grandes ônus de energia ou computacionais. Sua essência está em converter dados brutos em insights acionáveis. Um modelo TinyML pode discernir movimentos específicos e irregularidades interpretando padrões dos dados da IMU, capacitando um dispositivo a interagir dinamicamente com seu ambiente.
Para o processo de desenvolvimento neste tutorial, utilizaremos as Ferramentas de Aprendizado de Máquina, uma plataforma excelente para o desenvolvimento de aplicações TinyML. Essa plataforma apresenta uma interessante variedade de ferramentas para aquisição de dados, design de modelo, treinamento de modelo e implantação de nosso modelo de detecção de movimento na placa Nicla Voice. Essa abordagem facilita o design e a implementação de modelos complexos diretamente na placa. Ao combinar as capacidades da placa Nicla Voice, as vantagens de um modelo de detecção de movimento baseado em IMU e a versatilidade de uma plataforma como a Arduino Cloud, este tutorial tem como objetivo fornecer uma perspectiva abrangente sobre a construção de aplicações tangíveis do mundo real.
Criando uma Conta na Arduino Cloud
Primeiramente, se você ainda não possui uma conta na nuvem, crie uma aqui. Em seguida, acesse a integração das Ferramentas de Aprendizado de Máquina por meio de sua conta na nuvem, como mostrado na imagem abaixo.
Com sua conta configurada e em execução, crie um novo projeto. Com o novo projeto criado, estamos prontos para capturar dados para o seu modelo de detecção de movimento.
Captura de Dados do IMU com as Ferramentas de Aprendizado de Máquina
Podemos capturar dados do IMU integrado à placa Nicla usando as Ferramentas de Aprendizado de Máquina. Para fazer isso, consulte o seguinte artigo na documentação da Edge Impulse. Siga as etapas descritas no artigo para conectar sua placa Nicla Voice às Ferramentas de Aprendizado de Máquina; quando sua placa estiver conectada, na guia Dispositivos à esquerda da janela, você deverá vê-la como mostrado na imagem abaixo (ponto verde):
Agora você pode começar a coletar dados do IMU com sua placa Nicla Voice conectada à sua conta na nuvem por meio da integração das Ferramentas de Aprendizado de Máquina. Nas Ferramentas de Aprendizado de Máquina, vá até a guia Aquisição de Dados à esquerda da janela. A aquisição de dados é a ferramenta nas Ferramentas de Aprendizado de Máquina onde os dados do IMU podem ser amostrados e armazenados. Para amostrar novos dados, vá para a janela Coleta de Dados.
Selecione sua placa Nicla Voice, defina o rótulo para esquerda-direita, o comprimento da amostra para 5000 ms, o sensor para Inercial e a frequência para 100 Hz. Essa configuração significa que os dados do IMU da sua placa Nicla Voice serão amostrados por cinco segundos (5000 ms) e armazenados com o rótulo esquerda-direita (os rótulos podem ser editados posteriormente, se necessário). Clique no botão Iniciar Amostragem e mova sua placa Nicla Voice da esquerda para a direita, conforme mostrado abaixo.
Após o processo de amostragem e armazenamento ser concluído, você deverá ver uma nova linha na janela de Dados Coletados; quando os dados são selecionados, os dados brutos amostrados são plotados como mostrado na imagem abaixo.
Repita o processo, mas para um tipo diferente de movimento. Defina o rótulo como cima-baixo, o comprimento da amostra para 5000 ms, o sensor para Inercial e a frequência para 100 Hz (mesmo que antes). Clique no botão Iniciar amostragem e mova sua placa Nicla Voice de cima para baixo, conforme mostrado abaixo.
Agora é hora de construir o conjunto de dados para a aplicação de detecção de movimento usando as seguintes três classes:
- esquerda-direita: movimentos horizontais, da esquerda para a direita.
- cima-baixo: movimentos verticais, começando de cima e indo para baixo.
- z-inativo: movimentos aleatórios que não são da esquerda para a direita ou de cima para baixo.
Importante! Os processadores Syntiant NDP requerem uma classe negativa na qual nenhuma previsão ocorrerá; em nossa aplicação, esta é a classe z-inativo. Certifique-se de que o nome da classe negativa esteja por último em ordem alfabética.
Divida seus dados em conjuntos de treinamento, teste e validação; uma divisão comum é 70% para treinamento, 15% para teste e 15% para validação. Para fins de demonstração, registre cerca de quatro minutos de dados por classe; nesse caso, você precisará alocar aproximadamente as seguintes quantidades de dados para cada conjunto:
- Treinamento: 2,8 minutos (70% de 4 minutos).
- Teste: 0,6 minutos (15% de 4 minutos).
- Validação: 0,6 minutos (15% de 4 minutos).
O número de amostras necessário para um modelo de detecção de movimento depende de vários fatores. Não há uma resposta única, mas algumas diretrizes gerais para determinar o tamanho adequado da amostra são as seguintes:
- Complexidade dos dados: Com padrões complexos, um tamanho de amostra maior.
- Tipo de técnica de detecção de movimento: Métodos supervisionados exigem mais amostras do que métodos não supervisionados.
- Desempenho do modelo: Mais dados são apenas às vezes melhores.
- Raridade dos movimentos: Um tamanho de amostra maior é necessário se as anomalias são eventos raros.
Como ponto de partida, considere que você precisará de mais amostras, pelo menos algumas centenas a alguns milhares, para um modelo mais robusto.
Design do Impulso
Com o conjunto de dados de treinamento capturado, você pode projetar um impulso; um impulso leva dados brutos, usa processamento de sinal para extrair características e depois usa um bloco de aprendizado para classificar novos dados. Os blocos de processamento de sinal sempre retornam os mesmos valores para a mesma entrada e são usados para tornar os dados brutos mais fáceis de processar, enquanto os blocos de aprendizado aprendem com experiências passadas.
Neste tutorial, vamos usar os seguintes blocos de processamento:
- Bloco de processamento Syntiant IMU: Este bloco pré-escala os dados brutos para valores de 8 bits para corresponder aos requisitos de entrada do processador NDP da Nicla’s Voice.
- Bloco de aprendizado de classificação: Este bloco pega as características geradas e aprende a distinguir entre diferentes classes (esquerda-direita, cima-baixo ou z-inativo).
Para configurar ambos os blocos, vá para a guia Criar impulso, selecione o tamanho da janela para 600 ms, aumente para 200, adicione os blocos IMU Syntiant e Classificação e clique no botão Salvar impulso. Seu impulso deve ser como mostrado abaixo:
Importante! O processador Syntiant NDP101 requer que o número de características geradas seja divisível por quatro. Em nosso exemplo, temos três eixos amostrados a 100 Hz com uma janela de 600 ms, resultando em 180 (60×3) características divisíveis por quatro.
Configuração do Bloco Syntiant IMU
Para configurar o bloco de processamento Syntiant IMU, vá para a guia Syntiant IMU. Você verá os dados brutos na parte superior da janela (você pode selecionar outros arquivos via menu suspenso) e as características processadas à direita.
Clique na opção Escalar 16 bits para 8 bits; isso converte seus dados brutos para 8 bits e os normaliza para a faixa [-1, 1]. Em seguida, clique no botão Salvar Parâmetros para ir para a janela de Geração de Características. Clique no botão Gerar Características nesta janela para iniciar o processo de geração de características.
Após algum tempo, a janela de Explorador de Características será carregada. Esta tela plota todas as características extraídas em relação a todas as janelas geradas, como mostrado na imagem acima; você pode usar este gráfico para comparar seu conjunto de dados completo. Uma boa regra prática é que se você puder separar visualmente os dados em vários eixos, então o modelo de Aprendizado de Máquina também será capaz de fazê-lo.
Configuração do Bloco de Classificação
Agora, é hora de começar a treinar uma rede neural. Redes neurais são algoritmos que podem aprender a reconhecer padrões em seus dados de treinamento, por exemplo, certos tipos de movimentos. A rede neural que você treinará receberá as características do bloco de processamento como entrada e tentará mapeá-las para uma das três classes do nosso modelo (esquerda-direita, cima-baixo ou z-inativo).
Clique na guia Classificador, você verá a seguinte janela:
Clique em Iniciar Treinamento. Quando estiver completo, você verá a janela de Desempenho do Modelo aparecer na parte inferior direita da janela:
A partir da janela de Desempenho do Modelo, podemos ver a precisão do modelo. A precisão refere-se à porcentagem de janelas de movimento que foram classificadas corretamente; quanto maior o número, melhor. No entanto, uma precisão de 100% é improvável e muitas vezes é um sinal de que seu modelo se ajustou demais aos dados de treinamento. Para a maioria das aplicações, uma precisão acima de 85% é muito boa. A matriz de confusão mostra o equilíbrio entre classificações corretas e incorretas.
Agora que você treinou uma rede neural com as Ferramentas de Aprendizado de Máquina, estamos prontos para implantar e testar no seu Nicla Voice!
Implantando e Executando um Impulso
É hora de testar seu modelo no seu Nicla Voice. Clique na guia Implantação e, em seguida, sob o botão Procurar Opções de Implantação, selecione a opção Arduino Nicla Voice, conforme mostrado abaixo:
Em seguida, configure os parâmetros posteriores para definir, por exemplo, limiares nos quais seu modelo será ativado; os parâmetros posteriores são usados para ajustar a precisão das ativações da rede neural para minimizar a Taxa de Rejeição Falsa e a Taxa de Ativação Falsa. Clique no botão Encontrar Parâmetros posteriores e selecione as classes que você deseja detectar; certifique-se de desmarcar a última classe, nesta aplicação, a classe z-inativa.
Importante! Você também pode implantar e executar seu impulso por meio de uma biblioteca gerada pelas Ferramentas de Aprendizado de Máquina para o processador Syntiant NDP101 da sua placa Nicla Voice. Essa biblioteca também pode ser construída na guia de Implantação.
Clique no botão Construir. Isso iniciará um processo em que um arquivo binário contendo seu impulso será construído; este arquivo pode então ser executado em sua placa Nicla Voice. Após a conclusão do processo de construção, você será solicitado a baixar um arquivo .zip contendo o arquivo binário e salvá-lo em seu computador.
Após descompactar o arquivo baixado, execute o script de gravação apropriado para o sistema operacional do seu computador (Linux, Mac ou Windows) para gravar sua placa Nicla Voice com o modelo de reconhecimento de movimento e o firmware associado.
Executando o Modelo
Com sua placa Nicla Voice gravada, abra uma nova janela de terminal e execute o seguinte comando:
edge-impulse-run-impulse |
Este comando amostrará dados do IMU a bordo do seu Nicla Voice, fará inferências e, em seguida, classificará o movimento feito na sua placa. Você deverá ver a seguinte saída na janela do terminal quando sua placa Nicla Voice for movida em movimentos horizontais, da esquerda para a direita.
Quando a placa é movida em movimentos verticais, começando de cima e indo para baixo, você deverá ver a seguinte saída na janela do terminal:
Conclusão
Neste tutorial, você aprendeu a usar sua placa Nicla Voice com a integração das Ferramentas de Aprendizado de Máquina da Arduino Cloud para desenvolver uma aplicação simples de detecção de movimento. Não apenas você criou uma aplicação simples de detecção de movimento, mas também estabeleceu as bases para explorar aplicações mais avançadas no futuro.
Este post é uma tradução adaptada do artigo escrito por José Bagur, Christopher Mendez e Benjamin Dannegård. O artigo original pode ser encontrado aqui.