Table des matières:

Reconnaissance d'images avec les cartes K210 et Arduino IDE/Micropython : 6 étapes (avec photos)
Reconnaissance d'images avec les cartes K210 et Arduino IDE/Micropython : 6 étapes (avec photos)

Vidéo: Reconnaissance d'images avec les cartes K210 et Arduino IDE/Micropython : 6 étapes (avec photos)

Vidéo: Reconnaissance d'images avec les cartes K210 et Arduino IDE/Micropython : 6 étapes (avec photos)
Vidéo: La reconnaissance faciale avec Arduino et la camera SEN0305 1/2 2024, Novembre
Anonim
Image
Image

J'ai déjà écrit un article sur la façon d'exécuter des démos OpenMV sur Sipeed Maix Bit et j'ai également réalisé une vidéo de démonstration de détection d'objets avec cette carte. L'une des nombreuses questions que les gens se sont posées est la suivante: comment puis-je reconnaître un objet pour lequel le réseau de neurones n'est pas formé ? En d'autres termes, comment créer votre propre classificateur d'images et l'exécuter avec l'accélération matérielle.

C'est une question compréhensible, car pour votre projet, vous n'avez probablement pas besoin de reconnaître certains objets génériques, comme les chats, les chiens et les avions. Vous voulez reconnaître quelque chose de spécifique, par exemple, une race de chien pour cette chatière automatique, ou une espèce végétale pour le tri, ou toute autre application intéressante à laquelle vous pouvez penser !

Je t'ai eu! Dans cet article, je vais vous apprendre à créer votre propre classificateur d'images personnalisé avec apprentissage par transfert dans Keras, convertir le modèle entraîné au format.kmodel et l'exécuter sur une carte Sipeed (peut être n'importe quelle carte, Bit/Dock ou Go) à l'aide de Micropython ou IDE Arduino. Et seule votre imagination sera la limite aux tâches que vous pouvez faire avec cette connaissance.

MISE À JOUR MAI 2020: Voyant comment mon article et ma vidéo sur la reconnaissance d'images avec les cartes K210 sont toujours très populaires et parmi les meilleurs résultats sur YouTube et Google, j'ai décidé de mettre à jour l'article pour inclure les informations sur aXeleRate, framework basé sur Keras pour l'IA sur le Bord je développe.

aXeleRate, essentiellement, est basé sur la collection de scripts que j'ai utilisés pour former des modèles de reconnaissance d'images/détection d'objets - combinés dans un cadre unique et optimisés pour le flux de travail sur Google Colab. Il est plus pratique à utiliser et plus à jour.

Pour l'ancienne version de l'article, vous pouvez toujours la voir sur steemit.com.

Étape 1: CNN et apprentissage par transfert: un peu de théorie

CNN et l'apprentissage par transfert: un peu de théorie
CNN et l'apprentissage par transfert: un peu de théorie

Les réseaux de neurones convolutifs ou CNN sont une classe de réseaux de neurones profonds, le plus souvent appliqué à l'analyse de l'imagerie visuelle. Il y a beaucoup de littérature sur internet sur le sujet et je donnerai quelques liens dans la dernière partie de l'article. En bref, vous pouvez considérer CNN comme une série de filtres, appliqués à l'image, chaque filtre recherchant une caractéristique spécifique dans l'image - sur les couches convolutives inférieures, les caractéristiques sont généralement des lignes et des formes simples et sur les couches supérieures les caractéristiques peut être plus précis, par exemple parties du corps, textures spécifiques, parties d'animaux ou de plantes, etc. La présence de certains ensembles de caractéristiques peut nous donner une idée de ce que pourrait être l'objet dans l'image. Des moustaches, deux yeux et un nez noir ? Ça doit être un chat ! Des feuilles vertes, un tronc d'arbre ? On dirait un arbre !

J'espère que vous avez maintenant une idée du principe de fonctionnement de CNN. Normalement, un réseau de neurones profonds a besoin de milliers d'images et d'heures de formation (en fonction du matériel que vous utilisez pour la formation) pour "développer" des filtres utiles pour reconnaître les types d'objets que vous souhaitez. Mais il y a un raccourci.

Un modèle formé pour reconnaître de nombreux objets communs différents (chats, chiens, appareils ménagers, transports, etc.) a déjà beaucoup de ces filtres utiles "développés", nous n'en avons donc pas besoin pour apprendre à reconnaître les formes et les pièces de base des objets à nouveau. Nous pouvons simplement réentraîner les dernières couches du réseau à reconnaître des classes d'objets spécifiques, qui sont importantes pour nous. C'est ce qu'on appelle "l'apprentissage par transfert". Vous avez besoin de beaucoup moins de données d'entraînement et de temps de calcul avec l'apprentissage par transfert, puisque vous n'entraînez que les dernières couches du réseau, composées peut-être de quelques centaines de neurones.

Ça a l'air génial, non? Voyons comment le mettre en œuvre.

Étape 2: Préparez votre environnement

Préparez votre environnement
Préparez votre environnement

Il existe deux manières d'utiliser aXeleRate: en s'exécutant localement sur une machine Ubuntu ou dans Google Colab. Pour exécuter dans Google Colab, jetez un œil à cet exemple:

Classification des images Colab Notebook

Entraîner votre modèle localement et l'exporter pour qu'il soit utilisé avec l'accélération matérielle est également beaucoup plus facile maintenant.

Mon environnement de travail est Ubuntu 16.04, 64 bits. Vous pouvez utiliser la machine virtuelle pour exécuter l'image Ubuntu car nous n'utiliserons pas de GPU pour la formation. Avec quelques modifications, vous pouvez également exécuter le script de formation sur Windows, mais pour la conversion de modèle, vous devrez utiliser le système Linux. Ainsi, l'environnement préférable pour vous d'exécuter ce didacticiel est Ubuntu 16.04, exécuté en mode natif ou dans une machine virtuelle.

Commençons par installer Miniconda, qui est le gestionnaire d'environnement pour Python. Nous allons créer un environnement isolé, donc nous ne changerons rien accidentellement dans votre environnement Python système.

Téléchargez le programme d'installation ici

Une fois l'installation terminée, créez un nouvel environnement:

conda créer -n ml python=3.7

Activons le nouvel environnement

conda activer ml

Un préfixe avant votre shell bash apparaîtra avec le nom de l'environnement, indiquant que vous travaillez maintenant dans cet environnement.

Étape 3: Installer AXeleRate et exécuter des tests

Installer AXeleRate et exécuter des tests
Installer AXeleRate et exécuter des tests

Installez aXeleRate sur votre machine locale avec

pip installer git+https://github.com/AIWintermuteAI/aXeleRate

Pour télécharger des exemples, exécutez:

git clone

Vous pouvez exécuter des tests rapides avec tests_training.py dans le dossier aXeleRate. Il exécutera la formation et l'inférence pour chaque type de modèle, enregistrera et convertira les modèles formés. Comme il ne s'agit que d'un entraînement pour 5 époques et que l'ensemble de données est très petit, vous ne pourrez pas obtenir de modèles utiles, mais ce script est uniquement destiné à vérifier l'absence d'erreurs.

Étape 4: ré-entraîner le modèle, convertir le modèle Keras en.kmodel

Ré-entraîner le modèle, convertir le modèle Keras en.kmodel
Ré-entraîner le modèle, convertir le modèle Keras en.kmodel

Pour cet exemple de jouet, nous entraînerons le modèle à reconnaître le Père Noël et Arduino Uno. Évidemment, vous pouvez choisir d'autres classes. Téléchargez l'ensemble de données à partir d'ici. Créez une copie du fichier classifier.json dans le dossier de configuration, puis modifiez-le en conséquence, comme le fichier de configuration dans la capture d'écran - assurez-vous que le chemin d'accès aux dossiers de formation et de validation est correct !

Exécutez la commande suivante à partir du dossier aXeleRate:

python axelerate/train.py - c configs/santa_uno.json

La formation va commencer. Si la précision de validation (notre métrique de validation) ne s'améliore pas pendant 20 époques, l'entraînement s'arrêtera prématurément. Chaque fois que la précision de la validation s'améliore, le modèle est enregistré dans le dossier du projet. Une fois la formation terminée, aXeleRate convertit automatiquement le meilleur modèle dans les formats spécifiés - vous pouvez désormais choisir "tflite", "k210" ou "edgepu".

Étape 5: Exécuter le modèle sur Sipeed Maix Bit

Exécuter le modèle sur Sipeed Maix Bit
Exécuter le modèle sur Sipeed Maix Bit
Exécuter le modèle sur Sipeed Maix Bit
Exécuter le modèle sur Sipeed Maix Bit
Exécuter le modèle sur Sipeed Maix Bit
Exécuter le modèle sur Sipeed Maix Bit

Il existe deux façons d'exécuter le modèle que vous avez actuellement sur le matériel Sipeed Maix: le micrologiciel micropython et l'IDE Arduino. Le matériel Micropython est plus facile à utiliser, mais il occupe une partie importante de la mémoire disponible, il reste donc moins d'espace pour le modèle. Arduino IDE est essentiellement du code C, qui est beaucoup plus efficace et a une empreinte mémoire plus petite. Mon modèle ne fait que 1,9 Mo, donc les deux options fonctionnent pour lui. Vous pouvez utiliser des modèles aussi grands que 2,9 Mo avec Micropython, pour tout ce qui est plus grand, vous devez envisager d'utiliser Arduino IDE.

Téléchargez OpenMV IDE à partir d'ici et le micrologiciel micropython minimal à partir d'ici.

Gravez le firmware avec l'outil kflash_gui. Vous pouvez également choisir de graver le modèle entraîné pour qu'il clignote également, comme indiqué dans la capture d'écran. Ou copiez-le sur la carte SD (dans ce cas, copiez.kmodel à la racine d'une carte SD et insérez la carte SD dans Sipeed Maix Bit)

Ouvrez OpenMV IDE et appuyez sur le bouton de connexion. Ouvrez le script santa_uno.py à partir du dossier example_scripts et appuyez sur le bouton Démarrer. Vous devriez voir un flux en direct de la caméra et si vous ouvrez le terminal série, vous obtiendrez le meilleur résultat de reconnaissance d'image avec le score de confiance !

Pour une utilisation avec Arduino IDE, vous devez d'abord suivre la procédure d'ajout de cartes Sipeed à Arduino IDE, qui est documentée ici. Votre version Arduino IDE doit être au moins 1.8.12. Après avoir ajouté les cartes, ouvrez le croquis mobilenet_v1_transfer_learning.ino et téléchargez-le sur Sipeed Maix Bit. Changez le nom du modèle sur la carte SD en "modèle" (ou faites une copie avec ce nom). Vous pouvez modifier les noms des étiquettes dans names.cpp. Il affichera le flux de caméra en direct sur l'écran Sipeed Maix avec le résultat de reconnaissance d'image supérieur.

Étape 6: Conclusions

Voici d'autres documents à lire sur le sujet des CNN et de l'apprentissage par transfert:

L'apprentissage par transfert à l'aide de Mobilenet et Keras Une excellente explication de l'apprentissage par transfert, ce didacticiel utilise une version modifiée du code de cet article.

Chats et chiens et réseaux de neurones convolutifs Explique les bases des CNN et visualise certains des filtres. avec des chats !

Entraînez, convertissez, exécutez MobileNet sur Sipeed MaixPy et MaixDuino ! Un tutoriel de l'équipe Sipeed sur la façon de former des classes Mobilenet 1000 à partir de zéro (pas d'apprentissage par transfert). Vous pouvez télécharger leur modèle pré-entraîné et l'essayer !

J'espère que vous pourrez utiliser les connaissances que vous avez maintenant pour créer des projets impressionnants avec la vision industrielle ! Vous pouvez acheter des cartes Sipeed ici, elles font partie des options les moins chères disponibles pour le ML sur les systèmes embarqués.

Conseillé: