Índice:
- Etapa 1: CNN e transferência de aprendizagem: algumas teorias
- Etapa 2: Prepare seu ambiente
- Etapa 3: Instale AXeleRate e execute os testes
- Etapa 4: treine novamente o modelo, converta o modelo Keras em.kmodel
- Etapa 5: execute o modelo no bit Sipeed Maix
- Etapa 6: Conclusões
Vídeo: Reconhecimento de imagem com placas K210 e Arduino IDE / Micropython: 6 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
Já escrevi um artigo sobre como executar demos OpenMV no Sipeed Maix Bit e também fiz um vídeo de demonstração de detecção de objetos com esta placa. Uma das muitas perguntas que as pessoas fizeram é - como posso reconhecer um objeto para o qual a rede neural não foi treinada? Em outras palavras, como fazer seu próprio classificador de imagens e executá-lo com aceleração de hardware.
Esta é uma pergunta compreensível, já que para o seu projeto você provavelmente não precisa reconhecer alguns objetos genéricos, como cães e gatos e aviões. Você deseja reconhecer algo específico, por exemplo, uma raça de cachorro para aquela porta automática para animais de estimação, ou uma espécie de planta para classificação, ou qualquer outro aplicativo existente que você possa imaginar!
Te peguei! Neste artigo, vou ensiná-lo a criar seu próprio classificador de imagem personalizado com aprendizagem por transferência em Keras, converter o modelo treinado para o formato.kmodel e executá-lo na placa Sipeed (pode ser qualquer placa, Bit / Dock ou Go) usando Micropython ou IDE Arduino. E apenas sua imaginação será o limite para as tarefas que você pode realizar com esse conhecimento.
ATUALIZAÇÃO DE MAIO DE 2020: Vendo como meu artigo e vídeo sobre reconhecimento de imagem com placas K210 ainda são muito populares e entre os principais resultados no YouTube e Google, decidi atualizar o artigo para incluir as informações sobre aXeleRate, estrutura baseada em Keras para IA no Edge eu desenvolvo.
AXeleRate, essencialmente, é baseado na coleção de scripts que usei para treinar modelos de reconhecimento de imagem / detecção de objetos - combinados em uma única estrutura e otimizados para fluxo de trabalho no Google Colab. É mais conveniente de usar e mais atualizado.
Para a versão antiga do artigo, você ainda pode vê-lo em steemit.com.
Etapa 1: CNN e transferência de aprendizagem: algumas teorias
Redes neurais convolucionais ou CNN é uma classe de redes neurais profundas, mais comumente aplicada à análise de imagens visuais. Existe muita literatura na internet sobre o assunto e darei alguns links na última parte do artigo. Em suma, você pode pensar na CNN como uma série de filtros, aplicados à imagem, cada filtro procurando por um recurso específico na imagem - nas camadas convolucionais inferiores, os recursos são geralmente linhas e formas simples e nas camadas superiores os recursos pode ser mais específico, por exemplo partes do corpo, texturas específicas, partes de animais ou plantas, etc. A presença de certo conjunto de características pode nos dar uma pista do que o objeto na imagem pode ser. Bigodes, dois olhos e um nariz preto? Deve ser um gato! Folhas verdes, um tronco de árvore? Parece uma árvore!
Espero que você tenha uma ideia sobre o princípio de funcionamento da CNN agora. Normalmente, uma rede neural profunda precisa de milhares de imagens e horas de treinamento (depende do hardware que você está usando para o treinamento) para "desenvolver" filtros úteis para reconhecer os tipos de objetos que você deseja. Mas existe um atalho.
Um modelo treinado para reconhecer muitos objetos comuns diferentes (gatos, cachorros, eletrodomésticos, transporte, etc.) já tem muitos desses filtros úteis "desenvolvidos", então não precisamos dele para aprender a reconhecer as formas e peças básicas dos objetos novamente. Podemos apenas treinar novamente as últimas camadas da rede para reconhecer classes específicas de objetos, que são importantes para nós. Isso é chamado de "aprendizagem por transferência". Você precisa de muito menos dados de treinamento e tempo de computação com o aprendizado de transferência, uma vez que você está treinando apenas as últimas camadas da rede, compostas talvez por algumas centenas de neurônios.
Parece incrível, certo? Vamos ver como implementá-lo.
Etapa 2: Prepare seu ambiente
Existem duas maneiras de usar aXeleRate: executando localmente na máquina Ubuntu ou no Google Colab. Para executar no Google Colab, dê uma olhada neste exemplo:
Classificação de imagens Colab Notebook
Treinar seu modelo localmente e exportá-lo para ser usado com aceleração de hardware também é muito mais fácil agora.
Meu ambiente de trabalho é Ubuntu 16.04, 64bit. Você pode usar a máquina virtual para executar a imagem do Ubuntu, pois não usaremos GPU para treinamento. Com algumas modificações, você também pode executar o script de treinamento no Windows, mas para a conversão do modelo você precisará usar o sistema Linux. Portanto, o ambiente preferível para você executar este tutorial é o Ubuntu 16.04, rodando nativamente ou em máquina virtual.
Vamos começar instalando o Miniconda, que é o gerenciador de ambiente do Python. Criaremos um ambiente isolado, portanto, não alteraremos acidentalmente nada no ambiente Python de seu sistema.
Baixe o instalador aqui
Após a conclusão da instalação, crie um novo ambiente:
conda criar -n ml python = 3.7
Vamos ativar o novo ambiente
conda ativar ml
Um prefixo antes de seu shell bash aparecerá com o nome do ambiente, indicando que você agora trabalha naquele ambiente.
Etapa 3: Instale AXeleRate e execute os testes
Instale aXeleRate em sua máquina local com
pip install git +
Para baixar os exemplos, execute:
git clone
Você pode executar testes rápidos com tests_training.py na pasta aXeleRate. Ele executará o treinamento e a inferência para cada tipo de modelo, salvará e converterá os modelos treinados. Como ele está treinando apenas para 5 épocas e o conjunto de dados é muito pequeno, você não poderá obter modelos úteis, mas este script serve apenas para verificar a ausência de erros.
Etapa 4: treine novamente o modelo, converta o modelo Keras em.kmodel
Para este exemplo de brinquedo, iremos treinar o modelo para reconhecer o Papai Noel e o Arduino Uno. Obviamente, você pode escolher outras classes. Baixe o conjunto de dados aqui. Crie uma cópia do arquivo classifier.json na pasta de configuração e, em seguida, altere-o de acordo, semelhante ao arquivo de configuração na captura de tela - certifique-se de que o caminho para as pastas de treinamento e validação esteja correto!
Execute o seguinte comando da pasta aXeleRate:
python axelerate / train.py - c configs / santa_uno.json
O treinamento vai começar. Se a precisão da validação (nossa métrica de validação) não melhorar por 20 épocas, o treinamento será interrompido prematuramente. Cada vez que a precisão da validação melhora, o modelo é salvo na pasta do projeto. Após o término do treinamento, aXeleRate converte automaticamente o melhor modelo para os formatos especificados - você pode escolher "tflite", "k210" ou "edgetpu" a partir de agora.
Etapa 5: execute o modelo no bit Sipeed Maix
Existem duas maneiras de executar o modelo que você tem agora no hardware Sipeed Maix: firmware micropython e Arduino IDE. O hardware Micropython é mais fácil de usar, mas ocupa uma parte significativa da memória disponível, portanto, sobra menos espaço para o modelo. Arduino IDE é basicamente código C, que é muito mais eficiente e ocupa menos memória. Meu modelo tem apenas 1,9 Mb, então ambas as opções funcionam para ele. Você pode usar modelos de até 2,9 Mb com Micropython; para qualquer coisa maior, você precisa considerar o uso do IDE do Arduino.
Baixe o IDE OpenMV aqui e o firmware mínimo de micropython aqui.
Grave o firmware com a ferramenta kflash_gui. Você também pode optar por gravar o modelo treinado em flash também, como mostrado na imagem. Ou copie-o para o cartão SD (nesse caso, copie.kmodel para a raiz de um cartão SD e insira o cartão SD no Sipeed Maix Bit)
Abra OpenMV IDE e pressione o botão de conexão. Abra o script santa_uno.py da pasta example_scripts e pressione o botão Iniciar. Você deve estar vendo uma transmissão ao vivo da câmera e, se abrir o Terminal Serial, terá o melhor resultado de reconhecimento de imagem com a pontuação de confiança!
Para usar com o Arduino IDE, primeiro você precisa seguir o procedimento para adicionar placas Sipeed ao Arduino IDE, que está documentado aqui. Sua versão do Arduino IDE precisa ser pelo menos 1.8.12. Depois de adicionar as placas, abra o esboço mobilenet_v1_transfer_learning.ino e carregue-o no Sipeed Maix Bit. Mude o nome do modelo no cartão SD para "modelo" (ou faça uma cópia com este nome). Você pode alterar os nomes dos rótulos em names.cpp. Ele mostrará a transmissão da câmera ao vivo na tela do Sipeed Maix junto com o resultado do reconhecimento da imagem principal.
Etapa 6: Conclusões
Aqui estão mais alguns materiais para ler sobre o tópico CNNs e transferência de aprendizagem:
Aprendizagem por transferência usando Mobilenet e Keras Uma ótima explicação da aprendizagem por transferência, este tutorial usa uma versão modificada do código daquele artigo.
Cães e gatos e redes neurais convolucionais Explica os fundamentos das CNNs e visualiza alguns dos filtros. Com gatos!
Treine, converta, execute o MobileNet no Sipeed MaixPy e MaixDuino! Um tutorial da equipe Sipeed sobre como treinar classes Mobilenet 1000 do zero (sem aprendizagem por transferência). Você pode baixar o modelo pré-treinado e experimentá-lo!
Espero que você possa usar o conhecimento que tem agora para construir alguns projetos incríveis com visão de máquina! Você pode comprar placas Sipeed aqui, elas estão entre as opções mais baratas disponíveis para ML em sistemas embarcados.
Recomendado:
Detecção de objetos com placas Sipeed MaiX (Kendryte K210): 6 etapas
Detecção de objetos com placas Sipeed MaiX (Kendryte K210): Como continuação do meu artigo anterior sobre reconhecimento de imagem com placas Sipeed MaiX, decidi escrever outro tutorial, com foco na detecção de objetos. Houve algum hardware interessante surgindo recentemente com o chip Kendryte K210, incluindo S
Inteligência artificial e reconhecimento de imagem usando HuskyLens: 6 etapas (com fotos)
Inteligência Artificial e Reconhecimento de Imagem Usando HuskyLens: Ei, e aí, pessoal! Akarsh aqui da CETech. Neste projeto, vamos dar uma olhada nas HuskyLens da DFRobot. É um módulo de câmera alimentado por IA capaz de realizar várias operações de Inteligência Artificial, como Reconhecimento de Face
Sistema de reconhecimento e extintor de incêndio baseado em processamento de imagem: 3 etapas
Sistema de reconhecimento e extintor de incêndio baseado em processamento de imagem: Olá amigos, este é um sistema de detecção e extintor de incêndio baseado em processamento de imagem usando Arduino
Processamento de imagem com o Raspberry Pi: Instalando OpenCV e separação de cores de imagem: 4 etapas
Processamento de imagem com o Raspberry Pi: Instalando o OpenCV e a separação de cores da imagem: Esta postagem é o primeiro de vários tutoriais de processamento de imagem que estão por vir. Damos uma olhada mais de perto nos pixels que compõem uma imagem, aprendemos como instalar o OpenCV no Raspberry Pi e também escrevemos scripts de teste para capturar uma imagem e também c
Reconhecimento de imagem com TensorFlow no Raspberry Pi: 6 etapas
Reconhecimento de imagem com TensorFlow no Raspberry Pi: Google TensorFlow é uma biblioteca de software de código aberto para computação numérica que usa gráficos de fluxo de dados. Ele é usado pelo Google em seus vários campos de aprendizado de máquina e tecnologias de aprendizado profundo. TensorFlow foi originalmente desenvolvido pelo Google Brai