Détection de mots-clés TinyML pour contrôler les lumières RVB
Composants et fournitures
| × | 1 |
Applications et services en ligne
|
À propos de ce projet
La Prémisse
L'apprentissage automatique à la périphérie est extrêmement utile pour créer des appareils capables d'accomplir des tâches « intelligentes » avec beaucoup moins de programmation et d'organigrammes logiques par rapport au code traditionnel. C'est pourquoi je voulais incorporer une détection de mots clés à la pointe qui puisse reconnaître certains mots, puis effectuer une tâche en fonction de ce qui a été dit.
Matériel
Ce projet n'a qu'un seul composant :un Arduino Nano 33 BLE Sense. La magie réelle se produit dans le modèle d'apprentissage automatique. L'Arduino Nano 33 BLE Sense regorge de capteurs, notamment un microphone, une IMU à 9 axes, un capteur environnemental et un capteur de geste/proximité/couleur/lumière ambiante (APDS-9960). Le microcontrôleur est un nRF52840 qui fonctionne à 64 MHz et contient 1 Mo de mémoire flash et 256 Ko de RAM. Ce projet utilise également sa LED RVB intégrée pour afficher la couleur actuelle.
Configuration d'Edge Impulse
J'ai commencé par créer un nouveau projet sur Edge Impulse, puis j'ai installé l'outil Edge Impulse CLI. Pour plus d'instructions sur la façon de procéder, visitez la page d'instructions d'installation. Cela permet à l'Arduino Nano de communiquer avec le service cloud pour recevoir des commandes et envoyer automatiquement les données du capteur. J'ai téléchargé le firmware Edge Impulse le plus récent et je l'ai flashé sur la carte en double-cliquant sur le bouton de réinitialisation pour le faire passer en mode chargeur de démarrage. Ensuite, j'ai exécuté flash_windows.bat
pour le transférer.
Sur l'invite de commande, j'ai exécuté edge-impulse-daemon
et suivi l'assistant pour le configurer. Maintenant, le Nano apparaît dans la liste des appareils du projet, ce qui permet de prélever et de télécharger des échantillons dans le cadre de l'ensemble de données d'entraînement/de test.
Collecte d'échantillons
L'entraînement d'un modèle d'apprentissage automatique nécessite des données, et une grande partie de celles-ci. Je voulais avoir les modes suivants pour la bande LED RVB :
- Activé
- Désactivé
- Rouge
- Vert
- Bleu
J'ai obtenu environ 1 minute de son pour chaque mode où j'ai répété le mot à des intervalles de 1 à 2 secondes et les ai divisés.
Mais il ne suffit pas d'avoir ces échantillons, car le bruit de fond et d'autres mots donneront une fausse lecture. Heureusement, Edge Impulse fournit déjà un ensemble de données prédéfini pour le bruit et les mots « inconnus », j'ai donc utilisé leur outil « Télécharger les données existantes » pour télécharger ces fichiers audio dans les données d'entraînement.
Enfin, j'ai rééquilibré l'ensemble de données pour avoir la division 80-20 recommandée pour les données d'entraînement et de test, respectivement.
Formation du modèle
Maintenant armé d'une heure de données d'entraînement et de nombreuses étiquettes, il était temps d'entraîner un modèle. L'impulsion que j'ai conçue prend l'audio sous forme de données de série temporelle avec une taille de fenêtre de 1 seconde et une augmentation de fenêtre de 500 ms. Il passe ensuite à travers un bloc MFCC dans un bloc de réseau neuronal Keras.
Le bloc MFCC vous permet de configurer la façon dont l'audio sera traité, ainsi qu'un spectrogramme montrant les fréquences de manière visuelle.
J'ai laissé les paramètres du réseau de neurones par défaut, mais j'ai également apporté quelques modifications. Tout d'abord, j'ai changé le seuil de confiance minimum de 0,80 à 0,70 et j'ai ajouté un peu d'augmentation des données sous la forme de bandes de temps supplémentaires pour le bruit et le masquage. Cela aide le NN à éviter de surajuster le modèle, car il dispose de données plus diverses avec lesquelles travailler.
Déploiement sur l'Arduino Nano 33 BLE Sense
L'Arduino Nano 33 BLE Sense agit comme un microphone permanent qui échantillonne en continu l'audio et détecte si l'un des mots-clés a été prononcé. Une fois trouvé, le mot-clé est converti en un index qui est utilisé pour décoder la couleur désirée. Pour le mot-clé on ou off, le voyant est réglé sur noir ou sur gris clair.
J'ai téléchargé le modèle en tant que bibliothèque et l'ai ajouté à l'IDE Arduino, puis j'ai compilé et flashé le code sur le Nano.
Code
- Détection de mots-clés RVBLED
RGBLEDKeywordDetectionC/C++
/* Exemples Edge Impulse Arduino * Copyright (c) 2020 EdgeImpulse Inc. * * L'autorisation est par la présente accordée, gratuitement, à toute personne obtenant une copie * de ce logiciel et des fichiers de documentation associés (le "Logiciel"), de traiter * dans le logiciel sans restriction, y compris, sans limitation, les droits * d'utiliser, copier, modifier, fusionner, publier, distribuer, sous-licencier et/ou vendre * des copies du logiciel, et d'autoriser les personnes à qui le logiciel est * fourni pour ce faire, sous réserve des conditions suivantes :* * L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans * toutes les copies ou parties substantielles du logiciel. * * LE LOGICIEL EST FOURNI « EN L'ÉTAT », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU * IMPLICITE, Y COMPRIS MAIS NON LIMITÉ AUX GARANTIES DE QUALITÉ MARCHANDE, * D'ADAPTATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN AUCUN CAS LES * AUTEURS OU TITULAIRES DE DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE * RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION DE CONTRAT, DÉLIT OU AUTRE, DÉCOULANT DE, * DE OU EN CONNEXION AVEC LE LOGICIEL OU L'UTILISATION OU AUTRE AFFAIRES DANS LE * LOGICIEL. */// Si votre cible est limitée en mémoire supprimez cette macro pour économiser 10K RAM#define EIDSP_QUANTIZE_FILTERBANK 0/** * Définit le nombre de tranches par fenêtre de modèle. Par exemple. une fenêtre de modèle de 1000 ms * avec tranches par fenêtre de modèle définie sur 4. Donne une taille de tranche de 250 ms. * Pour plus d'informations :https://docs.edgeimpulse.com/docs/continuous-audio-sampling */#define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3/* Comprend ------------------- ---------------------------------------------- */#include#include #include
Processus de fabrication
- Conseils et tendances de sécurité IIoT pour 2020
- Cloud et edge computing pour l'IoT :un bref historique
- Pourquoi l'informatique de pointe pour l'IoT ?
- Avantages de l'Edge Computing pour la cristallisation de l'IA
- Quatre étapes pour garantir le succès de l'Edge Computing
- Microsoft lance Azure Edge Zones pour les applications 5G
- Le besoin d'open source à la périphérie (eBook)
- Système de détection de produits chimiques pour les faibles niveaux de concentration
- 3 raisons d'entretenir les dispositifs de détection de gaz