Utiliser un module économique et MicroPython pour créer rapidement des appareils auditifs et de vision basés sur l'IA

Par Stephen Evanczuk

Avec la contribution de Rédacteurs nord-américains de DigiKey

Pour répondre aux besoins croissants en produits intelligents connectés, les développeurs se tournent de plus en plus vers des méthodes d'intelligence artificielle (IA), comme l'apprentissage automatique. Toutefois, les développeurs sont souvent confrontés à un choix matériel complexe. Ils peuvent baser leurs conceptions sur des processeurs à usage général économiques, mais qui ne présentent pas les performances nécessaires en cas d'algorithmes complexes, ou ils peuvent utiliser des solutions spéciales qui fournissent de hautes performances, mais qui augmentent le coût et la complexité de la conception.

Il existe désormais de nouvelles options. Cet article décrit une alternative plus simple et plus économique proposée par Seeed Technology, qui permet aux développeurs de déployer des solutions hautes performances basées sur l'IA à l'aide du langage de programmation populaire, MicroPython.

Approches de l'apprentissage automatique

Le succès des algorithmes d'apprentissage automatique a attiré l'attention des développeurs à la recherche d'approches plus efficaces en matière de détection d'objets et de reconnaissance vocale dans une vaste gamme d'applications. Parmi ces algorithmes, les réseaux de neurones convolutifs (CNN) ont démontré le type de reconnaissance haute précision requis dans les applications auditives et de vision artificielle. Cela s'est traduit par une utilisation plus importante des réseaux de neurones convolutifs et des réseaux de neurones profonds (DNN) dans les conceptions d'électronique personnelle, de dispositifs corporels et Internet des objets (IoT).

Pour les applications avec des exigences d'inférences CNN modestes, les développeurs peuvent implémenter des solutions efficaces grâce à des bibliothèques logicielles de réseaux neuronaux s'exécutant sur des processeurs à usage général avec des architectures SIMD (instruction simple pour données multiples) et des extensions DSP (traitement numérique des signaux) (voir l'article relatif à la conception d'une application d'apprentissage automatique avec Raspberry Pi).

Pour des exigences plus élevées, les développeurs peuvent créer des conceptions basées sur CNN plus puissantes à l'aide de réseaux de portes programmables par l'utilisateur (FPGA) qui intègrent des blocs DSP hautes performances capables d'accélérer les algorithmes d'apprentissage automatique (voir l'article relatif à l'utilisation de FPGA pour créer des applications de vision embarquées hautes performances avec l'apprentissage automatique).

Les conceptions d'apprentissage automatique basées sur processeur sont généralement plus simples à implémenter que celles basées sur FPGA, mais la complexité mathématique des modèles CNN ralentit habituellement l'inférence des solutions basées sur processeur. Les solutions basées sur FPGA peuvent utiliser l'implémentation matérielle d'étapes de traitement clés pour accélérer les performances d'inférence, mais les exigences de développement peuvent compliquer l'implémentation rapide de solutions optimisées.

Le module Sipeed MAIX-I 114991684 de Seeed Technology offre aux développeurs une alternative pour accélérer le déploiement de solutions d'inférence de CNN hautes performances dans les produits intelligents et les dispositifs d'edge computing.

Module de traitement CNN hautes performances

Le module MAIX-I combine un processeur double cœur hautes performances, un microcontrôleur Wi-Fi ESP8285 d'Espressif Systems, une mémoire Flash série de 128 mégabits (Mbit) W25Q128FW de Winbond, un régulateur de tension et un connecteur d'antenne IPEX. Une version sans fil, le module Sipeed MAIX-I 114991695, est fournie sans le microcontrôleur ESP8285. Conçu pour accélérer une large gamme de de charges de travail applicatives, le processeur double cœur intègre une paire de processeurs RISC-V 64 bits avec des unités en virgule flottante (FPU) et des accélérateurs pour les modèles CNN, le traitement audio, la cryptographie et les calculs de transformation de Fourier rapide (FFT) (Figure 1).

Schéma du module MAIX-I de Seeed TechnologyFigure 1 : Le module MAIX-I de Seeed Technology associe un microcontrôleur sans fil, une mémoire Flash, un régulateur de tension CC et un connecteur d'antenne IPEX avec un processeur double cœur hautes performances et des accélérateurs pour le traitement du réseau de neurones convolutif (CNN) et d'autres fonctions. (Source de l'image : Seeed Technology)

Offrant également 8 méga-octets (Mo) de mémoire vive statique (SRAM) et 128 kilobits (kbit) de mémoire OTP (One-Time Programmable), le processeur double cœur intègre un ensemble complet d'interfaces, notamment un port LCD et un port vidéo numérique (DVP) pour les caméras vidéo. Les développeurs peuvent utiliser le multiplexeur FPIOA du processeur pour mapper 255 fonctions internes aux 48 ports E/S à usage général (GPIO) disponibles.

Les fonctionnalités intégrées et les accélérateurs du processeur prennent en charge un éventail d'exigences pour les conceptions des produits intelligents typiques. Par exemple, l'unité de traitement audio (APU) prend en charge jusqu'à huit microphones et inclut son propre accélérateur FFT 512 points dédié. En utilisant uniquement ces capacités APU, les développeurs peuvent utiliser efficacement les réseaux de microphones pour implémenter la réponse directionnelle de la formation de faisceau audio utilisée dans les interfaces vocales pour les produits intelligents. Pour les fonctions d'interface vocale, comme l'activation de phrases clés, les développeurs peuvent utiliser la sortie audio pré-traitée de l'unité de traitement audio pour commander l'accélérateur CNN intégré du processeur.

Accélérateur CNN

En plus de toutes ses capacités, le module Sipeed MAIX-I se distingue par l'accélérateur CNN intégré au processeur double cœur du module. Conçu pour accélérer le traitement des fonctions noyau individuelles sous-jacentes aux CNN, le processeur de réseau neuronal, appelé ici « KPU » (unité de traitement de noyau), fournit les implémentations matérielles de convolution, de normalisation par lot, d'activation et de regroupement des fonctions noyau qui comprennent les différentes couches des modèles CNN (voir l'article relatif aux premiers pas avec l'apprentissage automatique grâce à du matériel et à des logiciels rapidement disponibles).

Ces capacités permettent aux développeurs d'implémenter des conceptions basse consommation qui utilisent des CNN pour reconnaître des phrases d'activation vocale dans les interfaces audio, ou détecter et classer des objets dans les applications basées sur la vision. En réalité, l'unité KPU peut utiliser la mémoire SRAM intégrée du processeur pour réaliser une inférence en temps réel à l'aide de modèles d'inférence CNN à point fixe de 5,9 Mo ou de modèles en virgule flottante pré-quantifiés de 11,8 Mo. Dans les applications de vision artificielle, par exemple, l'unité KPU effectue une inférence supérieure à 30 images par seconde en utilisant des trames d'images relativement petites, utilisées pour la détection des objets ou la reconnaissance faciale dans les produits intelligents. Pour les applications qui ne sont pas en temps réel, les développeurs peuvent utiliser une mémoire Flash externe pour gérer les formats de modèle, uniquement limités par la capacité de la mémoire Flash.

En interne, l'unité KPU exécute des modèles d'inférence qui utilisent un tampon de type premier entré/premier sorti (FIFO) pour traiter de façon séquentielle chaque couche d'un modèle CNN typique (Figure 2, en haut). Pour chaque couche, l'unité KPU lit les données et les paramètres du modèle à partir de la mémoire SRAM intégrée ou de la mémoire Flash externe, et exécute la fonction noyau de la couche en question à l'aide de la fonction noyau accélérée associée (Figure 2, en bas). Intégré à ce pipeline de traitement des couches, un mécanisme de rappel permet aux développeurs d'exécuter leurs propres routines à mesure que le matériel KPU termine chaque séquence de traitement.

Schéma de réalisation d'une inférence, la tâche KPU entière comprend plusieurs couchesFigure 2 : Lors de la réalisation d'une inférence, la tâche KPU complète (en haut) comprend plusieurs couches, chacune impliquant l'exécution des fonctions noyau adaptées (en bas). (Source de l'image : Seeed Technology)

Plateformes de développement

L'unité KPU cache la complexité de l'exécution de l'algorithme CNN derrière son matériel dédié. Pour les développeurs, Seeed simplifie le développement basé sur CNN grâce à une combinaison d'offres matérielles et de packs logiciels. En plus du module MAIX-I, les développeurs peuvent rapidement évaluer et développer des conceptions basées sur MAIX-I à l'aide des produits de niveau carte offerts par Seeed qui fournissent davantage de fonctionnalités.

Au niveau de base, le kit de développement 110991188 de Seeed associe un module MAIX-I monté sur une carte de base avec un LCD de 2,4 pouces et la caméra fisheye 114991881 OV2640 de Seeed. Le kit 110991189 de Seeed fournit les mêmes fonctionnalités avec la version sans Wi-Fi du module MAIX-I.

Pour le développement de prototype, la carte d'évaluation Bit 102991150 de Seeed monte un module MAIX-I sur une carte spécialement conçue pour le montage d'essai. Le kit MAIX-I Bit 110991190 de Seeed Technology combine la carte d'évaluation Bit, un affichage de 2,4 pouces, une caméra OV2640 et une paire d'embases pour connecter la carte Bit à un montage d'essai.

Pour développer des applications plus complexes, le kit de carte Sipeed MAIX Go 110991191 de Seeed associe le module MAIX-I à un microcontrôleur STM32F103C8 de STMicroelectronics, à une caméra, à un microphone I2S, à un haut-parleur, à un système de gestion de batterie au lithium, à un emplacement MicroSD et à plusieurs connecteurs d'interface (Figure 3). En fixant l'écran LCD de 2,8 pouces inclus à l'arrière de la carte, les développeurs peuvent se servir du kit comme d'une plateforme efficace pour les systèmes vidéo numériques commandés par IA.

Image de la carte Sipeed MAIX Go de Seeed TechnologyFigure 3 : L'une des séries de cartes MAIX de Seeed Technology, la carte Sipeed MAIX Go, associe le module MAIX-I à un microcontrôleur STM32F103C8 de STMicroelectronics, à une caméra, à un écran et à plusieurs interfaces pour fournir un système d'imagerie autonome pour la reconnaissance d'objets. (Source de l'image : Seeed Technology)

Les cartes offrent une solution autonome répondant à de nombreuses exigences de produits intelligents, et leur prise en charge de MicroPython facilite leur utilisation. En combinant les cartes Sipeed de Seeed à MicroPython, les développeurs peuvent tirer parti d'une approche plus simple pour le développement de produits intelligents basés sur IA.

Un développement rapide avec MicroPython

MicroPython a été créé pour fournir un sous-ensemble optimisé du langage de programmation Python pour les microcontrôleurs à ressources limitées. Grâce à sa prise en charge directe de l'accès matériel, MicroPython étend la simplicité relative du développement basé sur Python au développement de logiciels système embarqués.

Au lieu des bibliothèques C, les développeurs utilisent le mécanisme d'importation Python pour charger les bibliothèques requises. Par exemple, il suffit aux développeurs d'importer le module machine MicroPython pour avoir accès à l'interface I2C d'un microcontrôleur, à ses temporisateurs et plus. Pour les conceptions utilisant des capteurs d'images, les développeurs peuvent capturer une image en important le module de capteur et en appelant la fonction sensor.snapshot(), qui renvoie une trame du capteur d'images.

Le projet MaixPy de Seeed étend MicroPython avec la prise en charge du processeur à double cœur K210 au centre du module MAIX-I et des cartes de développement associées. S'exécutant sur le processeur K210 du module MAIX-I, l'interpréteur MaixPy MicroPython utilise les fonctionnalités MicroPython et les modules spécialisés MaixPy, comme le module KPU MaixPy, qui encapsule les fonctionnalités KPU du processeur.

Les développeurs peuvent utiliser MaixPy et le module KPU pour déployer facilement une inférence de CNN. En fait, la bibliothèque de modèles MaixHub de Seeed offre de nombreux modèles CNN pré-qualifiés pour aider les développeurs à démarrer avec le module MAIX-I. Pour télécharger ces modèles, les développeurs doivent fournir un identifiant machine, accessible en exécutant un utilitaire de générateur d'identifiant sur la carte MAIX.

Par exemple, en utilisant le kit Sipeed MAIX Go de Seeed avec l'écran LCD connecté, les développeurs peuvent charger un modèle pré-qualifié pour la reconnaissance faciale. La réalisation d'une inférence avec le modèle ne requiert que quelques lignes de code Python (Liste 1).

Copier import sensor import image import lcd import KPU as kpu lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000 # task = kpu.load("/sd/face.kmodel") anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor) while(True): img = sensor.snapshot() code = kpu.run_yolo2(task, img) if code: for i in code: print(i) a = img.draw_rectangle(i.rect()) a = lcd.display(img) a = kpu.deinit(task) 

Liste 1 : Les développeurs ont uniquement besoin de quelques lignes de code MicroPython pour implémenter l'inférence à l'aide d'un modèle de réseau neuronal résidant en mémoire Flash. (Source du code : Seeed Technology)

Le modèle pré-qualifié implémente un type de CNN appelé modèle « Yolo » (You Only Look Once), qui accélère l'inférence en utilisant une image entière pendant l'apprentissage et l'interférence, plutôt qu'une série de fenêtres défilantes sous-jacentes aux algorithmes CNN précédents. D'autres optimisations de Yolo sont intégrées au modèle « Tiny Yolo2 » fourni dans la bibliothèque de modèles MaixHub. Il en résulte un modèle hautes performances qui permet une reconnaissance faciale en temps réel sur la carte MAIX Go (Figure 4).

Image de reconnaissance faciale en temps réelFigure 4 : Grâce à la carte Sipeed MAIX Go, les développeurs peuvent rapidement explorer une solution de reconnaissance faciale en temps réel conçue avec un modèle d'inférence CNN pré-qualifié spécial. (Source de l'image : Seeed Technology)

Bien évidemment, l'inférence ne constitue que l'étape de déploiement du processus complexe de développement du modèle DNN, et l'apparente simplicité de cet exemple peut masquer les défis liés à l'implémentation d'un modèle efficace.

Pour développer un modèle personnalisé, les développeurs doivent acquérir un ensemble suffisamment large d'échantillons pour l'apprentissage du modèle. Pour cela, les développeurs utilisent une infrastructure d'apprentissage profond, comme TensorFlow, pour configurer un modèle et procéder à l'apprentissage à l'aide des données d'apprentissage.

Ces étapes peuvent sembler pénibles, mais l'écosystème MAIX-I permet un déploiement d'inférence plutôt simple.

Seeed offre des convertisseurs qui permettent aux développeurs de convertir des modèles développés dans TensorFlow, Keras ou Darknet en un format de modèle spécial pour l'unité KPU. Comme avec les modèles pré-qualifiés téléchargés à partir de la bibliothèque de modèles MaixHub, les développeurs peuvent importer leurs modèles personnalisés dans le module MAIX-I et évaluer leurs performances avec MicroPython, comme indiqué ci-dessus.

Seeed fournit également des kits de développement logiciel (SDK) pour créer des applications logicielles personnalisées en langage de programmation C. Les différents SDK prennent en charge les applications C autonomes ou les applications C intégrées au système d'exploitation en temps réel RTOS.

Conclusion

L'acceptation rapide des interfaces basées sur la voix et les images pour les produits intelligents continue à favoriser l'utilisation d'algorithmes d'apprentissage automatique dans les conceptions à ressources limitées sous-jacentes à ces produits. Par le passé, les développeurs n'avaient à leur disposition que peu d'options efficaces pour obtenir des solutions simples à implémenter et assez puissantes pour fournir des fonctionnalités d'apprentissage automatique en temps réel.

Comme indiqué, l'utilisation du module MAIX-I et des cartes associées de Seeed Technology permet aux développeurs de rapidement déployer des modèles d'inférence sur une plateforme matérielle capable de fournir une reconnaissance vocale ou d'objets en temps réel à partir de données de diffusion vidéo ou audio.

DigiKey logo

Avertissement : les opinions, convictions et points de vue exprimés par les divers auteurs et/ou participants au forum sur ce site Web ne reflètent pas nécessairement ceux de DigiKey ni les politiques officielles de la société.

À propos de l'auteur

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk affiche plus de 20 ans d'expérience dans la rédaction de contenu pour et sur l'industrie électronique, couvrant un large éventail de sujets, notamment le matériel, les logiciels, les systèmes et les applications, y compris l'IoT. Il a obtenu son doctorat (Ph.D.) en neurosciences sur les réseaux neuronaux et a travaillé dans l'industrie aérospatiale sur les systèmes sécurisés massivement distribués et les méthodes d'accélération par algorithmes. Actuellement, lorsqu'il n'écrit pas d'articles techniques, il travaille sur l'application de l'apprentissage approfondi pour les systèmes de reconnaissance et de recommandation.

À propos de l'éditeur

Rédacteurs nord-américains de DigiKey