Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Equipment >> Robô industrial

Como implementar o reconhecimento de dígitos com TensorFlow Lite usando um MCU i.MX RT1060 Crossover

Este artigo analisa a detecção e o reconhecimento de dígitos usando MNIST eIQ como exemplo, que consiste em várias partes - o reconhecimento de dígitos é realizado por um modelo TensorFlow Lite , e uma GUI é usada para aumentar a usabilidade do dispositivo i.MX RT1060.


O crossover MCU i.MX RT1060 é igualmente adequado para aplicações industriais econômicas e produtos de alto desempenho e de consumo intensivo de dados que requerem funcionalidades de exibição. Este artigo demonstra os recursos deste MCU baseado em Arm® Cortex®-M7, explicando como implementar um aplicativo de aprendizado de máquina incorporado que pode detectar e classificar a entrada escrita à mão de um usuário.

Para esse propósito, este artigo se concentra no popular exemplo MNIST eIQ, que consiste em várias partes - o reconhecimento de dígitos é realizado por um modelo TensorFlow Lite e uma GUI é usada para aumentar a usabilidade do dispositivo i.MX RT1060.


Uma olhada no modelo e conjunto de dados MNIST


O conjunto de dados usado ao longo deste artigo consiste em 60.000 exemplos de treinamento e 10.000 testes de imagens centralizadas em tons de cinza de dígitos manuscritos. Cada amostra tem uma resolução de 28x28 pixels:




Figura 1. Exemplo de conjunto de dados MNIST



As amostras foram coletadas de alunos do ensino médio e funcionários do Census Bureau nos Estados Unidos. Portanto, o conjunto de dados contém principalmente exemplos de números escritos na América do Norte. Para números de estilo europeu, por exemplo, um conjunto de dados diferente deve ser usado. As redes neurais convolucionais geralmente fornecem o melhor resultado quando usadas com esse conjunto de dados, e até mesmo redes simples podem atingir alta precisão. Portanto, o TensorFlow Lite era uma opção adequada para essa tarefa.

A implementação do modelo MNIST escolhida para este artigo está disponível no GitHub como um dos modelos oficiais do TensorFlow e foi escrita em Python. O script usa a biblioteca Keras e a API tf.data, tf.estimator.Estimator e tf.layers e constrói uma rede neural convolucional que pode atingir alta precisão nas amostras de teste:




Figura 2. Uma visualização do modelo usado.



A definição do modelo correspondente é mostrada abaixo na Figura 3.




Figura 3. A definição do modelo que corresponde à visualização do modelo.


O que é TensorFlow Lite e como ele é usado neste exemplo?


O TensorFlow é uma estrutura de aprendizado profundo bem conhecida, amplamente usada na produção por grandes empresas. É uma biblioteca de aprendizado profundo de código aberto e multiplataforma desenvolvida e mantida pelo Google. Uma API Python de baixo nível, que é útil para desenvolvedores experientes e bibliotecas de alto nível como as usadas neste caso, estão disponíveis. Além disso, o TensorFlow é apoiado por uma grande comunidade e excelente documentação online, recursos de aprendizagem, guias e exemplos do Google.

Para dar a máquinas restritas computacionalmente, como dispositivos móveis e soluções incorporadas, a capacidade de executar aplicativos TensorFlow, o Google desenvolveu a estrutura TensorFlow Lite, que não oferece suporte a todo o conjunto de operações da estrutura TensorFlow. Ele permite que tais dispositivos executem inferências em modelos pré-treinados do TensorFlow que foram convertidos para o TensorFlow Lite. Como recompensa, esses modelos convertidos não podem ser treinados mais, mas podem ser otimizados por meio de técnicas como quantização e poda.


Convertendo o modelo para TensorFlow Lite


O modelo treinado do TensorFlow discutido acima deve ser convertido para TensorFlow Lite antes de ser usado no MCU i.MX RT1060. Para isso, ele foi convertido usando tflite_convert e, por motivos de compatibilidade, a versão 1.13.2 do TensorFlow foi usada para treinar e converter o modelo:

tflite_convert

--saved_model_dir =

--output_file =converted_model.tflite

--input_shape =1,28,28

--input_array =Espaço reservado

--output_array =Softmax

--inference_type =FLOAT

--input_data_type =FLOAT

--post_training_quantize

--target_ops TFLITE_BUILTINS

Por último, o utilitário xdd foi usado para converter o modelo TensorFlow Lite em uma matriz binária a ser carregada pelo aplicativo:

xxd -i converted_model.tflite> converted_model.h

xdd é um utilitário hex dump que pode ser utilizado para converter a forma binária de um arquivo para a representação hex dump correspondente e vice-versa. Nesse caso, o arquivo binário do TensorFlow Lite é convertido em um arquivo de cabeçalho C / C ++ que pode ser adicionado a um projeto eIQ. O processo de conversão e o utilitário tflite_convert são descritos nos guias do usuário eIQ com mais detalhes. O utilitário também é descrito na documentação oficial do Google.


Uma introdução rápida ao Embedded Wizard Studio


Para fazer uso dos recursos gráficos do MIMXRT1060-EVK, uma GUI foi incluída neste projeto. Para tanto, foi utilizado o Embedded Wizard Studio, um IDE para desenvolvimento de GUIs para aplicações que rodarão em dispositivos embarcados. Embora uma versão de avaliação gratuita do IDE esteja disponível, esta versão limita a complexidade máxima da interface gráfica do usuário e também adiciona uma marca d'água sobre a GUI.

Uma das vantagens do Embedded Wizard Studio é a capacidade de gerar projetos MCUXpresso e IAR com base no SDK do XNP, o que significa que, após criar a interface do usuário no IDE, o desenvolvedor pode testá-la imediatamente em seu dispositivo.

O IDE oferece objetos e ferramentas como botões, áreas sensíveis ao toque, formas e muito mais, que são colocados em uma tela. Suas propriedades são então definidas para atender às necessidades e expectativas do desenvolvedor. Tudo isso funciona de maneira intuitiva e amigável e acelera muito o processo de desenvolvimento da GUI.

No entanto, várias etapas de conversão devem mesclar o projeto de GUI com o projeto de aplicativo eIQ existente, uma vez que o projeto de GUI gerado está em C e os exemplos de qIQ estão em C / C ++. Portanto, alguns arquivos de cabeçalho devem ter seu conteúdo circundado por:

#ifdef __cplusplus

extern "C" {

#endif

/ * código C * /

#ifdef __cplusplus

}

#endif

Além disso, a maioria dos arquivos de origem e de cabeçalho foram movidos para uma nova pasta na pasta de middleware do SDK e novos caminhos de inclusão foram adicionados para refletir essas alterações. Por último, alguns arquivos de configuração específicos do dispositivo foram comparados e devidamente mesclados.


O aplicativo concluído e seus recursos


A GUI do aplicativo é exibida em um LCD sensível ao toque. Ele contém uma área de entrada para escrever dígitos e outra que exibe o resultado da classificação. O botão executar inferência executa a inferência e o botão limpar limpa os campos de entrada e saída. O aplicativo envia o resultado e a confiança da previsão para a saída padrão.




Figura 4. A GUI do aplicativo de exemplo contém um campo de entrada, um campo de saída e dois botões. O resultado e a confiança também são impressos na saída padrão.


Precisão do modelo TensorFlow Lite


Conforme mencionado acima, o modelo pode atingir alta precisão nos dados de treinamento e teste ao classificar um número escrito à mão no estilo americano. No entanto, este não é o caso quando usado neste aplicativo, principalmente porque os dígitos escritos em um LCD com um dedo nunca são iguais aos dígitos escritos em um papel com uma caneta. Isso destaca a importância de treinar modelos de produção em dados reais de produção.

Para melhores resultados, um novo conjunto de dados deve ser coletado. Além disso, os meios deveriam ser os mesmos. Neste caso, as amostras devem ser coletadas usando uma entrada de tela de toque para desenhar os números. Existem outras técnicas para aumentar a precisão das previsões. O site da Comunidade NXP contém instruções sobre como usar a técnica de aprendizagem por transferência.


Detalhes de implementação


O Embedded Wizard usa slots como gatilhos para reagir às interações da GUI, por exemplo, quando um usuário arrasta o dedo sobre a área de entrada. Nesse caso, o slot desenha continuamente uma linha de pixels de largura sob o dedo. A cor dessa linha é definida pela constante de cor principal.

O slot do botão limpar define a cor de cada pixel em ambos os campos para a cor de fundo, e o botão de inferência de execução salva referências à área de entrada, o bitmap subjacente e a largura e altura da área, e então as passa para um nativo Programa C que os processa.

Como os bitmaps do modelo de aprendizado de máquina têm apenas 28x28 pixels de largura e a área de entrada foi criada como um quadrado de 112x112 para tornar o uso do aplicativo mais confortável, o pré-processamento adicional é necessário ao reduzir a imagem. Caso contrário, esse processo distorceria muito a imagem.

Primeiro, uma matriz de inteiros de 8 bits com as dimensões da área de entrada é criada e preenchida com zeros. Em seguida, a imagem e a matriz são iteradas e cada pixel desenhado na imagem é armazenado como 0xFF na matriz. Ao processar a entrada, os pixels da cor principal são considerados brancos e todo o resto, preto. Além disso, cada pixel é expandido em um quadrado de 3x3 para engrossar a linha, o que tornará a redução da escala da imagem muito mais segura. Antes de dimensionar a imagem para a resolução exigida de 28 x 28, o desenho é cortado e centralizado para se parecer com as imagens MNIST:




Figura 5. Uma visualização da matriz que contém os dados de entrada pré-processados.



O modelo de aprendizado de máquina é alocado, carregado e preparado quando o aplicativo é iniciado. A cada solicitação de inferência, o tensor de entrada do modelo é carregado com a entrada de pré-processamento e passado para o modelo. A entrada deve ser copiada no tensor pixel por pixel e os valores inteiros devem ser convertidos em valores de ponto flutuante no processo. Esta nota de aplicação NXP contém uma pegada de memória detalhada do código.


TensorFlow Lite:uma solução viável


O reconhecimento de dígitos manuscritos usando aprendizado de máquina pode representar problemas para sistemas incorporados, e o TensorFlow Lite oferece uma solução viável. Com essa solução, casos de uso mais complexos, como um campo de entrada de pino em uma fechadura digital, podem ser implementados. Conforme discutido neste artigo, o treinamento de modelos de produção em dados reais de produção é crucial. Os dados de treinamento usados ​​neste artigo consistiam em números que foram escritos com uma caneta em um pedaço de papel. Isso, por sua vez, reduz a precisão geral do modelo quando usado para detectar números desenhados em uma tela de toque. Além disso, diferenças regionais devem ser levadas em consideração.

A série de crossover MCU i.MX RT pode ser implementada em uma variedade de aplicativos incorporados, como o exemplo fornecido neste artigo. A NXP tem ampla informação sobre a série de crossover MCU i.MX RT que pode ajudar a preencher a lacuna entre desempenho e usabilidade.

Para obter mais informações sobre i.MX RT Crossover MCUs, visite a página do produto i.MX RT.

Artigos do setor são uma forma de conteúdo que permite aos parceiros do setor compartilhar notícias, mensagens e tecnologia úteis com os leitores do All About Circuits de uma forma que o conteúdo editorial não é adequado. Todos os artigos da indústria estão sujeitos a diretrizes editoriais rígidas com a intenção de oferecer aos leitores notícias úteis, conhecimentos técnicos ou histórias. Os pontos de vista e opiniões expressos nos Artigos da Indústria são do parceiro e não necessariamente da All About Circuits ou de seus redatores.

Robô industrial

  1. Como reduzir o desperdício com robôs autônomos
  2. Reconhecimento de dígitos AI com PiCamera
  3. Otimização do gerenciamento de energia com i.MX RT500 Crossover MCU da NXP
  4. Compreendendo a ativação de DSP usando o MCU i.MX RT500 Crossover da NXP
  5. Como construir um codificador automático variacional com TensorFlow
  6. Usando resina epóxi com arte
  7. Cuidando de máquinas CNC? Veja como fazer isso com um cobot
  8. Como começar com a programação de robôs Yaskawa
  9. Como começar com o RoboDK para Raspberry Pi
  10. Como chamar um Bloco Funcional de um Cliente OPC UA usando um Modelo de Informação