Détection de personnes légères sur microcontrôleurs à l’aide de réseaux de neurones personnalisés – Centre de données| Informatique en nuage | Centre de données

Les systèmes de vision par ordinateur basés sur l’IA font de plus en plus partie de notre vie quotidienne dans les applications industrielles et grand public. Le déploiement de modèles d’apprentissage automatique (ML) sur les appareils Edge gagne également du terrain en raison des avantages d’une amélioration des performances et de la sécurité des données, car les données ne sont pas envoyées vers le cloud pour être traitées.
Alors que la plupart des implémentations classiques de détection de personnes utilisent des processeurs d’application ou des périphériques GPU pour le calcul, il existe des applications très sensibles aux coûts pour lesquelles il est nécessaire d’obtenir des fonctionnalités similaires sur des périphériques de microcontrôleur (MCU) à faible coût. Un tel cas d’utilisation est celui où un appareil de bureau (par exemple, une imprimante, un scanner, un copieur) sort du mode d’économie d’énergie et se prépare à fonctionner à mesure que les gens s’en approchent.
Dans ce blog, nous décrivons l’application basée sur le ML qui analyse les séquences vidéo capturées par une caméra RVB basse résolution connectée à l’appareil et identifie la présence et l’approche des humains dans un rayon de 3 mètres.
Il existe de nombreuses méthodes de détection de personnes allant des techniques classiques de vision par ordinateur aux approches basées sur l’apprentissage en profondeur. Celles-ci incluent Haar Cascades disponible dans la bibliothèque OpenCV sur SSD Mobilenet, Posenet, Openpose, Openpifpaf, etc. Quelques bonnes ressources pour en savoir plus sur ces méthodes sont incluses à la fin de ce blog. Mais, en gardant à l’esprit les contraintes de RAM, de Flash et de calcul que nous avions sur notre MCU cible, nous avons développé notre propre réseau neuronal personnalisé qui était suffisamment léger. Les sections suivantes décrivent notre approche de développement.
Préparation du jeu de données
Un vaste corpus de données humaines dans le cadre a été collecté à partir de diverses sources – bases de données open source ainsi que via des exercices de collecte de données utilisant la caméra spécifique qui devait être utilisée dans l’appareil électronique cible. On a pris soin de collecter des données sous tous les angles d’approche possibles dans le champ de vision (FoV) de la caméra ciblée. Les données collectées ont été soigneusement séparées en utilisant une combinaison de binning manuel et basé sur le traitement d’images.
Étiquetage
L’ensemble de données nettoyé a été étiqueté par notre équipe d’étiquetage des données à l’aide de cadres d’annotation standard.
Réglage fin du modèle
Nous avons construit un réseau neuronal léger et personnalisé capable de détecter avec précision si la personne dans le cadre est proche ou éloignée.
La tâche la plus difficile consistait à créer un réseau neuronal personnalisé qui fonctionnerait dans les limites de notre stricte fréquence de processeur et de notre budget d’empreinte RAM. Voici plusieurs des configurations de réseau CNN que nous avons explorées avant de nous figer sur le modèle final :
- Déterminer la dimension idéale de l’image d’entrée – cela nécessitait de faire le bon compromis afin de ne pas perdre d’informations spatiales et en même temps de réduire la RAM consommée par les couches
- Explorer différentes échelles de couleurs
- Déterminer la taille du noyau et affiner le nombre de filtres à utiliser en entrée pour les couches convolutives
- Améliorer le modèle en visualisant les sorties de la couche intermédiaire
- Détermination du nombre de blocs répétitifs à réutiliser
Déploiement sur un périphérique matériel
Une fois le modèle prêt et validé pour la précision, l’étape suivante consistait à le déployer sur le matériel cible : l’appareil de classe Renesas Rx 64M MCU fonctionnant à une fréquence maximale de 120 MHz et avec une SRAM de 512 Ko. Le modèle TensorFlow a été traduit en C à l’aide d’une combinaison de la boîte à outils fournie par le fournisseur et de scripts manuels que nous avons développés pour implémenter des couches et des opérateurs personnalisés.
La sortie de la caméra est transférée vers le MCU à l’aide d’un protocole de capture de données parallèle (PDC) et les pixels d’entrée YUV sont convertis au format RVB. L’image RVB est ensuite fournie à notre algorithme de réseau neuronal de détection de personne.
La sortie de la caméra et le résultat de la détection de personnes sont visualisés via une page Web. Dans les scénarios d’application réels, les résultats de la détection déclencheront des signaux de réveil sur GPIO.
Instantanés d’application

Résultat
Nous avons pu générer un modèle d’apprentissage automatique personnalisé avec une empreinte mémoire de moins de 200 Ko (uint8) qui pourrait classer avec précision si une personne était présente à proximité ou non.
Métrique
Le modèle uint8 a pris environ 513 millisecondes (~2fps) pour traiter une image.
L’ensemble de l’application, y compris le tampon d’image, le prétraitement et le composant GUI, a consommé une empreinte d’environ 800 Ko. Étant donné que l’appareil ne disposait que d’environ 500 Ko de SRAM utilisable, le code a été soigneusement modularisé en segments persistants et non persistants avec les sections de code non persistantes chargées dynamiquement à partir de la ROM.
Conclusion
Les modèles légers basés sur un réseau neuronal peuvent être déployés efficacement sur des dispositifs de microcontrôleur à faible coût pour répondre à une multitude d’appareils grand public et d’applications industrielles qui nécessitent la détection des personnes qui s’approchent d’eux.
Ressources:
Les liens suivants seraient utiles pour en savoir plus sur certains d’entre eux :
Ce blog est apparu à l’origine sur la page Blog d’Ignitarium.com.