Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Equipment >> Robot industriel

Comment implémenter la reconnaissance des chiffres avec TensorFlow Lite à l'aide d'un MCU croisé i.MX RT1060

Cet article examine la détection et la reconnaissance des chiffres à l'aide de MNIST eIQ comme exemple, qui se compose de plusieurs parties :la reconnaissance des chiffres est effectuée par un modèle TensorFlow Lite , et une interface graphique est utilisée pour augmenter la convivialité de l'appareil i.MX RT1060.

Le MCU croisé i.MX RT1060 convient aussi bien aux applications industrielles économiques qu'aux produits grand public hautes performances et gourmands en données qui nécessitent des fonctionnalités d'affichage. Cet article démontre les capacités de ce MCU basé sur Arm® Cortex®-M7 en expliquant comment mettre en œuvre une application d'apprentissage automatique intégrée capable de détecter et de classer les entrées manuscrites d'un utilisateur.

À cette fin, cet article se concentre sur l'exemple populaire MNIST eIQ, qui se compose de plusieurs parties :la reconnaissance des chiffres est effectuée par un modèle TensorFlow Lite et une interface graphique est utilisée pour augmenter la convivialité de l'appareil i.MX RT1060.

Un regard sur l'ensemble de données et le modèle MNIST

L'ensemble de données utilisé tout au long de cet article se compose de 60 000 exemples de formation et de 10 000 tests d'images centrées en niveaux de gris de chiffres manuscrits. Chaque échantillon a une résolution de 28x28 pixels :

Figure 1. Exemple de jeu de données MNIST

Les échantillons ont été collectés auprès d'élèves du secondaire et d'employés du Census Bureau aux États-Unis. Par conséquent, l'ensemble de données contient principalement des exemples de nombres tels qu'ils sont écrits en Amérique du Nord. Pour les nombres de style européen, par exemple, un jeu de données différent doit être utilisé. Les réseaux de neurones convolutifs donnent généralement les meilleurs résultats lorsqu'ils sont utilisés avec cet ensemble de données, et même les réseaux simples peuvent atteindre une précision élevée. Par conséquent, TensorFlow Lite était une option appropriée pour cette tâche.

L'implémentation du modèle MNIST choisie pour cet article est disponible sur GitHub en tant que l'un des modèles officiels de TensorFlow, et elle est écrite en Python. Le script utilise la bibliothèque Keras et les API tf.data, tf.estimator.Estimator et tf.layers, et il construit un réseau neuronal convolutif qui peut atteindre une grande précision sur les échantillons de test :

Figure 2. Une visualisation du modèle utilisé.

La définition du modèle correspondant est illustrée ci-dessous dans la figure 3.

Figure 3. La définition du modèle qui correspond à la visualisation du modèle.

Qu'est-ce que TensorFlow Lite et comment est-il utilisé dans cet exemple ?

TensorFlow est un framework d'apprentissage en profondeur bien connu qui est largement utilisé en production par les grandes entreprises. Il s'agit d'une bibliothèque d'apprentissage en profondeur open source et multiplateforme développée et maintenue par Google. Une API Python de bas niveau, utile pour les développeurs expérimentés, et des bibliothèques de haut niveau comme celles utilisées dans ce cas, sont disponibles. De plus, TensorFlow est pris en charge par une vaste communauté et une excellente documentation en ligne, des ressources d'apprentissage, des guides et des exemples de Google.

Pour donner aux machines limitées en termes de calcul, telles que les appareils mobiles et les solutions intégrées, la possibilité d'exécuter des applications TensorFlow, Google a développé le framework TensorFlow Lite, qui ne prend pas en charge l'ensemble des opérations du framework TensorFlow. Il permet à ces appareils d'effectuer des inférences sur des modèles TensorFlow pré-entraînés qui ont été convertis en TensorFlow Lite. En guise de récompense, ces modèles convertis ne peuvent plus être entraînés, mais peuvent être optimisés grâce à des techniques telles que la quantification et l'élagage.

Conversion du modèle en TensorFlow Lite

Le modèle TensorFlow entraîné décrit ci-dessus doit être converti en TensorFlow Lite avant de pouvoir être utilisé sur le MCU i.MX RT1060. À cette fin, il a été converti à l'aide de tflite_convert et, pour des raisons de compatibilité, la version 1.13.2 de TensorFlow a été utilisée pour l'entraînement et la conversion du modèle :

tflite_convert

--saved_model_dir=

--output_file=converted_model.tflite

--input_shape=1,28,28

--input_array=Espace réservé

--output_array=Softmax

--inference_type=FLOAT

--input_data_type=FLOAT

--post_training_quantize

--target_ops TFLITE_BUILTINS

Enfin, l'utilitaire xdd a été utilisé pour convertir le modèle TensorFlow Lite en un tableau binaire à charger par l'application :

xxd -i modèle_converti.tflite> modèle_converti.h

xdd est un utilitaire de vidage hexadécimal qui peut être utilisé pour convertir la forme binaire d'un fichier en la représentation de vidage hexadécimale correspondante et vice-versa. Dans ce cas, le fichier binaire TensorFlow Lite est converti en un fichier d'en-tête C/C++ qui peut être ajouté à un projet eIQ. Le processus de conversion et l'utilitaire tflite_convert sont décrits plus en détail dans les guides de l'utilisateur eIQ. L'utilitaire est également décrit dans la documentation officielle de Google.

Une introduction rapide à Embedded Wizard Studio

Pour utiliser les capacités graphiques du MIMXRT1060-EVK, une interface graphique a été incluse dans ce projet. À cette fin, Embedded Wizard Studio, un IDE pour le développement d'interfaces graphiques pour des applications qui s'exécuteront sur des appareils embarqués, a été utilisé. Bien qu'une version d'évaluation gratuite de l'IDE soit disponible, cette version limite la complexité maximale de l'interface utilisateur graphique et ajoute également un filigrane sur l'interface graphique.

L'un des avantages d'Embedded Wizard Studio est sa capacité à générer des projets MCUXpresso et IAR basés sur le SDK de XNP, ce qui signifie qu'après avoir créé l'interface utilisateur dans l'IDE, le développeur peut immédiatement la tester sur son appareil.

L'IDE propose des objets et des outils tels que des boutons, des zones tactiles, des formes et bien d'autres, qui sont placés sur un canevas. Leurs propriétés sont ensuite définies pour répondre aux besoins et aux attentes du développeur. Tout cela fonctionne de manière intuitive et conviviale, et accélère considérablement le processus de développement de l'interface graphique.

Cependant, plusieurs étapes de conversion doivent fusionner le projet GUI avec le projet d'application eIQ existant, puisque le projet GUI généré est en C et les exemples qIQ sont en C/C++. Par conséquent, certains fichiers d'en-tête doivent avoir leur contenu entouré par :

#ifdef __cplusplus

externe "C" {

#endif

/* code C */

#ifdef __cplusplus

}

#endif

De plus, la plupart des fichiers source et d'en-tête ont été déplacés vers un nouveau dossier dans le dossier middleware du SDK, et de nouveaux chemins d'inclusion ont été ajoutés pour refléter ces modifications. Enfin, certains fichiers de configuration spécifiques à l'appareil ont été comparés et correctement fusionnés.

L'application terminée et ses fonctionnalités

L'interface graphique de l'application est affichée sur un écran LCD tactile. Il contient une zone de saisie pour l'écriture des chiffres et une autre qui affiche le résultat de la classification. Le bouton Exécuter l'inférence exécute l'inférence et le bouton Effacer efface les champs d'entrée et de sortie. L'application affiche le résultat et la fiabilité de la prédiction sur la sortie standard.

Figure 4. L'interface graphique de l'exemple d'application contient un champ de saisie, un champ de sortie et deux boutons. Le résultat et la confiance sont également imprimés sur la sortie standard.

Précision du modèle TensorFlow Lite

Comme mentionné ci-dessus, le modèle peut atteindre une grande précision sur les données d'entraînement et de test lorsqu'il classe un nombre manuscrit de style américain. Ce n'est cependant pas le cas lorsqu'il est utilisé dans cette application, principalement parce que les chiffres écrits sur un écran LCD avec un doigt ne sont jamais les mêmes que les chiffres écrits sur du papier avec un stylo. Cela met en évidence l'importance de la formation des modèles de production sur des données de production réelles.

Pour de meilleurs résultats, un nouvel ensemble de données doit être collecté. De plus, les moyens devraient être les mêmes. Dans ce cas, les échantillons doivent être collectés à l'aide d'une entrée d'écran tactile pour tirer les nombres. D'autres techniques existent pour augmenter la précision des prédictions. Le site Web de la communauté NXP contient une présentation de l'utilisation de la technique d'apprentissage par transfert.

Détails de mise en œuvre

L'assistant intégré utilise des emplacements comme déclencheurs pour réagir aux interactions de l'interface graphique, par exemple, lorsqu'un utilisateur fait glisser son doigt sur la zone de saisie. Dans ce cas, la fente dessine continuellement une ligne large d'un pixel sous le doigt. La couleur de cette ligne est définie par la constante de couleur principale.

L'emplacement du bouton d'effacement définit la couleur de chaque pixel dans les deux champs sur la couleur d'arrière-plan, et le bouton d'inférence d'exécution enregistre les références à la zone d'entrée, au bitmap sous-jacent, ainsi qu'à la largeur et à la hauteur de la zone, puis les transmet à un natif programme C qui les traite.

Étant donné que les bitmaps du modèle d'apprentissage automatique ne mesurent que 28 x 28 pixels et que la zone de saisie a été créée sous la forme d'un carré de 112 x 112 pour rendre l'utilisation de l'application plus confortable, un prétraitement supplémentaire est requis lors de la réduction d'échelle de l'image. Sinon, ce processus déformerait trop l'image.

Tout d'abord, un tableau d'entiers de 8 bits avec les dimensions de la zone d'entrée est créé et rempli de zéros. Ensuite, l'image et le tableau sont itérés et chaque pixel dessiné dans l'image est stocké sous la forme 0xFF dans le tableau. Lors du traitement de l'entrée, les pixels de la couleur principale sont considérés comme blancs et tout le reste noir. De plus, chaque pixel est agrandi en un carré de 3x3 pour épaissir la ligne, ce qui rendra la réduction d'échelle de l'image beaucoup plus sûre. Avant de mettre l'image à l'échelle à la résolution 28x28 requise, le dessin est recadré et centré pour ressembler aux images MNIST :

Figure 5. Une visualisation du tableau qui contient les données d'entrée prétraitées.

Le modèle d'apprentissage automatique est alloué, chargé et préparé au démarrage de l'application. À chaque demande d'inférence, le tenseur d'entrée du modèle est chargé avec l'entrée de prétraitement et transmis au modèle. L'entrée doit être copiée dans le tenseur pixel par pixel et les valeurs entières doivent être converties en valeurs à virgule flottante au cours du processus. Cette note d'application NXP contient une empreinte mémoire détaillée du code.

TensorFlow Lite :une solution viable

La reconnaissance des chiffres manuscrits à l'aide de l'apprentissage automatique peut poser des problèmes aux systèmes embarqués, et TensorFlow Lite offre une solution viable. Avec cette solution, des cas d'utilisation plus complexes, tels qu'un champ de saisie de broche sur une serrure numérique, pourraient être mis en œuvre. Comme discuté dans cet article, la formation de modèles de production sur des données de production réelles est cruciale. Les données d'entraînement utilisées dans cet article consistaient en des nombres écrits avec un stylo sur une feuille de papier. Ceci, à son tour, réduit la précision globale du modèle lorsqu'il est utilisé pour détecter des nombres qui ont été dessinés sur un écran tactile. De plus, les différences régionales doivent être prises en considération.

La série de MCU croisés i.MX RT peut être implémentée dans une variété d'applications embarquées, comme l'exemple fourni dans cet article. NXP dispose de nombreuses informations sur la série de MCU croisés i.MX RT qui peuvent aider à combler le fossé entre les performances et la convivialité.

Pour plus d'informations sur les microcontrôleurs croisés i.MX RT, visitez la page produit i.MX RT.

Les articles de l'industrie sont une forme de contenu qui permet aux partenaires de l'industrie de partager des nouvelles, des messages et des technologies utiles avec les lecteurs d'All About Circuits d'une manière qui ne convient pas au contenu éditorial. Tous les articles de l'industrie sont soumis à des directives éditoriales strictes dans le but d'offrir aux lecteurs des informations utiles, une expertise technique ou des histoires. Les points de vue et opinions exprimés dans les articles de l'industrie sont ceux du partenaire et pas nécessairement ceux d'All About Circuits ou de ses rédacteurs.


Robot industriel

  1. Comment réduire les déchets avec des robots autonomes
  2. Reconnaissance des chiffres AI avec PiCamera
  3. Optimisation de la gestion de l'alimentation avec le MCU croisé i.MX RT500 de NXP
  4. Comprendre l'activation du DSP à l'aide du MCU croisé i.MX RT500 de NXP
  5. Comment créer un encodeur variationnel avec TensorFlow
  6. Vous vous occupez de machines CNC ? Voici comment le faire avec un cobot
  7. Comment démarrer avec la programmation du robot Yaskawa
  8. Comment démarrer avec RoboDK pour Raspberry Pi
  9. Comment appeler un bloc fonction depuis un client OPC UA à l'aide d'un modèle d'information