banner

Chip de $23 com Inteligência Artificial


Hoje quero falar com vocês sobre o K210, um chip que considero muito especial porque tem um coprocessador de rede neural, ou seja, ele consegue processar uma rede neural de maneira muito eficaz e bem mais rápida que o ESP32. Além de ter um processador NPU, tem dois núcleos que 64 bits, processador de FFT, mais um coprocessador de áudio, sem contar uma câmera muito boa. Tudo isso, pessoal, por U$23.
Neste vídeo, então, vamos fizemos uma aplicação com o MaixPy e treinamos um modelo customizado de Rede Neural Convolucional. Tratamos do Setup MaixPy, Setup Ambiente, executamos um teste do modelo obtendo imagens do google para realizar o treinamento. Ainda, trabalhamos o código do script de treino para converter o modelo para o MaixPy e rodamos o modelo no Sipeed Maix Bit.







RECURSOS USADOS


  • Sipeed Maix BiT
  • Cabo USB tipo C
  • Cartão SD






SETUP MAIXPY

Primeiro é necessário atualizar o firmware do MaixPy.
Baixe o KFlash que pode ser encontrado aqui para gravar o firmware no MaixPy. 
Baixe o Firmware do MaixPy aqui
Conecte o Sipeed Maix Bit na USB do computador.






ATUALIZAÇÃO DO FIRMWARE








SETUP AMBIENTE

O ambiente de trabalho utilizado foi o Ubuntu 18.04. Você pode usar a máquina virtual para executar uma imagem do Ubuntu pois não iremos utilizar GPU para treinar o modelo.
Com algumas modificações, é possível executar o script de treinamento no Windows, mas para converter o modelo para o MaixPy é necessário usar o sistema Linux. Portanto, o ambiente preferível é o Ubuntu nativo ou executando em máquina virtual.

Começar instalando o Miniconda, que é um gerenciador de ambiente do Python. Vamos Criar um ambiente isolado, para que não alterar nada do ambiente python do sistema.


Após a instalação, crie um novo ambiente e instale os pacotes necessários:

Ative o novo ambiente e instale mais alguns pacotes:

Um prefixo vai aparecer com o nome do ambiente, indicando que você está utilizando ele agora:

Clone o projeto do githube entre nele:

Agora o ambiente está pronto, vamos testar!





TESTE DO MODELO

Dentro do diretório SipeedCustomModel vamos verificar se o modelo MobileNet padrão que veio do repositório está bom.
Execute o script test.py, ele fará o download do modelo pré-treinado MobileNet da internet e executará a inferência nas três imagens fornecidas.

Imagens para teste do modelo:







CÓDIGO TEST.PY

Importações



Prepara Imagem



Predict Image







TESTE MODELO - RESULTADO

Podemos ver que ele pode identificar um cachorro pastor alemão corretamente por estar com uma alta pontuação de confiança. Mas identificou o Papai Noel como Bearskin e o Arduino Uno como um modem podemos dizer que o modelo não foi treinando e/ou não têm noção do que têm na imagem.








OBTENDO IMAGENS DO GOOGLE PARA O TREINO DO MODELO

Dentro do diretório SipeedCustomModel clone o diretório PickImagesFromGoogle do github e entre nele:

Crie um diretório chamado Imagens e dentro desse diretório crie um diretório para cada objeto que deseja reconhecer. Nesse exemplo vamos criar 3 (Papai Noel, Teclado, Uno).

Abra o GoogleImages no GoogleChrome, digite na pesquisa o que deseja reconhecer como por exemplo Arduino Uno. 

Clique com o botão direito na página e clique em “Inspecionar”.

Vai abrir uma tela lateral, nessa tela lateral click em “Console”

Abra o arquivo js_console.js no diretório PickImagesFromGoogle e copie e de rode linha por linha no Console do Chrome






CÓDIGO OBTER URLS JS

Preparação e pegar as URLs


Escreve as URLs no arquivo e baixa




OBTENDO IMAGENS DO GOOGLE

Após ter rodado todas as linhas, irá baixar um arquivo urls.txt contendo todas as urls das imagens, jogue esse arquivo no diretório PickImagesFromGoogle.
No diretório PickImagesFromGoogle rode o comando abaixo alterando o diretório “Imangens/PapaiNoel” para o diretório referente ao que você quer reconhecer e criou as pastas. Exemplo: “Imagens/Uno”







CÓDIGO BAIXAR IMAGENS.PY

Imports e pegar or argumentos










OBTENDO IMAGENS DO GOOGLE

Aguarde o download de todas as imagens, vai levar alguns minutos dependo da sua conexão com a internet.

Após terminar vasculhe na pasta arquivos que possam ter sido baixados errados e exclua-os (Exemplo imagem 50.jpg).

Repita os passos para os outros objetos lembrando de mudar o nome do diretório para qual elas vão no comando.
*A quantidade de imagens é de acordo quantas imagens apareceram na hora da pesquisa, então se quiser mais imagens, basta rolar para baixo na pesquisa do google para aparecer mais e fazer os passos novamente.

Após repetir com todos, o banco de imagens está pronto!




TREINAMENTO

Treino

Dentro do diretório SipeedCustomModel rode o script de treino:
Espere concluir as épocas de treino

Convertendo o Modelo

Após concluir  é criado o arquivo “my_model.h5” que é o nosso modelo criado.
Agora é necessário converter esse modelo.
Não é possível converter ele diretamente para o MaixPy então primeiro convertemos ele para tflite(TensorFlow Lite) primeiro com o comando:

Depois basta converter de tflite para o modelo utilizado no MaixPy:

Crie um arquivo chamado labels.txt com o nome na ordem dos objetos treinados. Exemplo:

  • Uno
  • PapaiNoel
  • Teclado
Copie os arquivos labels.txt e model.kmodel para o cartão SD e  coloque o cartão SD no Sipeed Maix Bit.
Ligue o MaixPy conectado com o computador.





RODAR MODELO NO SIPEED MAIX BIT

MaixPy IDE

Baixe e rode o MaixPy IDE 



No MaixPy IDE vá em “File”
     Clique em “Open”
     Selecione o arquivo “mobilenet.py” dentro da pasta “SipeedCustomModel/maixpy_run/”
     Clique em Start para executar o Script






EXEMPLOS DE INFERÊNCIA

MaixPy IDE



Papai Noel



Arduino UNO






SCRIPT MICROPYTHON

Importações e Setup



Ler Arquivo de labels e carregar modelo



Loop Infinito










Um comentário:

Tecnologia do Blogger.