TinyML-Schlüsselworterkennung zur Steuerung von RGB-Lichtern
Komponenten und Verbrauchsmaterialien
| × | 1 |
Apps und Onlinedienste
|
Über dieses Projekt
Die Prämisse
Maschinelles Lernen am Edge ist äußerst nützlich, um Geräte zu erstellen, die im Vergleich zu herkömmlichem Code „intelligente“ Aufgaben mit weit weniger Programmierung und logischen Flussdiagrammen erledigen können. Aus diesem Grund wollte ich eine moderne Schlüsselworterkennung integrieren, die bestimmte Wörter erkennt und dann eine Aufgabe basierend auf dem Gesagten ausführt.
Hardware
Dieses Projekt hat nur eine Komponente:einen Arduino Nano 33 BLE Sense. Die eigentliche Magie geschieht im Modell des maschinellen Lernens. Der Arduino Nano 33 BLE Sense ist voller Sensoren, darunter ein Mikrofon, eine 9-Achsen-IMU, ein Umgebungssensor und ein Gesten-/Näherungs-/Farb-/Umgebungslichtsensor (APDS-9960). Der Mikrocontroller darauf ist ein nRF52840, der mit 64 MHz läuft und 1 MB Flash-Speicher und 256 KB RAM enthält. Dieses Projekt verwendet auch seine integrierte RGB-LED, um die aktuelle Farbe anzuzeigen.
Kantenimpuls einrichten
Ich begann mit der Erstellung eines neuen Projekts auf Edge Impulse und installierte dann das Edge Impulse CLI-Tool. Weitere Anweisungen dazu finden Sie auf der Seite mit den Installationsanweisungen. Dadurch kann der Arduino Nano mit dem Cloud-Dienst kommunizieren, um Befehle zu empfangen und Sensordaten automatisch zu senden. Ich habe die neueste Edge Impulse-Firmware heruntergeladen und auf das Board geflasht, indem ich auf die Reset-Taste doppelklicke, um sie in den Bootloader-Modus zu versetzen. Dann habe ich flash_windows.bat
ausgeführt es zu übertragen.
Drüben auf der Eingabeaufforderung habe ich edge-impulse-daemon
. ausgeführt und folgen Sie dem Assistenten, um es einzurichten. Jetzt wird der Nano in der Geräteliste des Projekts angezeigt, wodurch Proben entnommen und als Teil des Trainings-/Testdatensatzes hochgeladen werden können.
Proben sammeln
Das Trainieren eines Modells für maschinelles Lernen erfordert Daten, und zwar eine ganze Menge davon. Ich wollte die folgenden Modi für den RGB-LED-Streifen haben:
- Ein
- Aus
- Rot
- Grün
- Blau
Ich bekam ungefähr 1 Minute Ton für jeden Modus, in dem ich das Wort wiederholt in 1-2-Sekunden-Intervallen sagte und sie aufteilte.
Es reicht jedoch nicht aus, nur diese Samples zu haben, da Hintergrundgeräusche und andere Wörter einen falschen Messwert liefern. Zum Glück bietet Edge Impulse bereits einen vorgefertigten Datensatz für Rauschen und "unbekannte" Wörter, daher habe ich das Tool "Vorhandene Daten hochladen" verwendet, um diese Audiodateien in die Trainingsdaten hochzuladen.
Schließlich habe ich den Datensatz neu ausbalanciert, um die empfohlene Aufteilung von 80-20 für Trainings- bzw. Testdaten zu erhalten.
Trainieren des Modells
Ausgerüstet mit einer Stunde Trainingsdaten und vielen Labels war es nun an der Zeit, ein Modell zu trainieren. Der von mir entworfene Impuls nimmt Audio als Zeitreihendaten mit einer Fenstergröße von 1 Sekunde und einer Fenstererhöhung von 500 ms auf. Es geht dann durch einen MFCC-Block in einen neuronalen Netzwerkblock von Keras.
Mit dem MFCC-Block können Sie konfigurieren, wie das Audio verarbeitet wird, zusammen mit einem Spektogramm, das die Frequenzen visuell anzeigt.
Ich habe die neuronalen Netzwerkeinstellungen größtenteils als Standard belassen, aber auch ein paar Änderungen vorgenommen. Zuerst habe ich den minimalen Konfidenzschwellenwert von 0,80 auf 0,70 geändert und ein wenig Datenerweiterung in Form von zusätzlichem Rauschen und Maskierungszeitbändern hinzugefügt. Dies hilft dem NN, eine Überanpassung des Modells zu vermeiden, da es über vielfältigere Daten verfügt, mit denen es arbeiten kann.
Bereitstellung auf dem Arduino Nano 33 BLE Sense
Das Arduino Nano 33 BLE Sense fungiert als ständig eingeschaltetes Mikrofon, das kontinuierlich den Ton abtastet und erkennt, ob eines der Schlüsselwörter gesprochen wurde. Sobald eine gefunden wurde, wird das Schlüsselwort in einen Index umgewandelt, der verwendet wird, um die gewünschte Farbe zu entschlüsseln. Für das Schlüsselwort on oder off wird die LED entweder auf schwarz oder hellgrau eingestellt.
Ich habe das Modell als Bibliothek heruntergeladen und der Arduino-IDE hinzugefügt, dann den Code kompiliert und auf den Nano geflasht.
Code
- RGBLEDKeyword-Erkennung
RGBLEDKeywordDetectionC/C++
/* Edge Impulse Arduino Beispiele * Copyright (c) 2020 EdgeImpulse Inc. * * Hiermit wird jeder Person kostenlos die Erlaubnis erteilt, eine Kopie * dieser Software und der zugehörigen Dokumentationsdateien (die "Software") zu erhalten, ohne Einschränkung * mit der Software zu handeln, einschließlich und ohne Einschränkung der Rechte * zur Nutzung, zum Kopieren, Modifizieren, Zusammenführen, Veröffentlichen, Verteilen, Unterlizenzieren und/oder Verkaufen * von Kopien der Software, und Personen zu gestatten, denen die Software * dazu bereitgestellt, vorbehaltlich der folgenden Bedingungen:* * Der obige Urheberrechtshinweis und dieser Erlaubnishinweis müssen in * allen Kopien oder wesentlichen Teilen der Software enthalten sein. * * DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER * STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTFÄHIGKEIT, * EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG VON VERLETZUNGEN. IN KEINEM FALL HABEN DIE * AUTOREN ODER URHEBERRECHTSINHABER FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE * HAFTUNG, OB AUS VERTRAGLICHEM, SCHLECHTER ODER ANDERWEITIGEM, DIE AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREM HERGESTELLT WERDEN HANDELN IN DER * SOFTWARE. */// Wenn Ihr Zielspeicher begrenzt ist, entfernen Sie dieses Makro, um 10K RAM zu sparen#define EIDSP_QUANTIZE_FILTERBANK 0/** * Definieren Sie die Anzahl der Slices pro Modellfenster. Z.B. ein Modellfenster von 1000 ms * mit Schnitten pro Modellfenster auf 4 gesetzt. Ergibt eine Schnittgröße von 250 ms. * Weitere Informationen:https://docs.edgeimpulse.com/docs/continuous-audio-sampling */#define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3/* Enthält ------------------- --------------------------------------------------------- */#include#include #include
Herstellungsprozess
- Tipps und Trends zur IIoT-Sicherheit für 2020
- Cloud- und Edge-Computing für das IoT:eine kurze Geschichte
- Warum Edge Computing für das IoT?
- Kontrons KBox A-150-WKL für datenintensive IoT Edge-Anwendungen
- Edge-Computing-Vorteile für die KI-Kristallisation
- Vier Schritte für den Erfolg beim Edge Computing
- Microsoft führt Azure Edge Zones für 5G-Anwendungen ein
- Die Notwendigkeit von Open Source am Edge (eBook)
- System zum Nachweis von Chemikalien für geringe Konzentrationen
- 3 Gründe für die Wartung von Gaswarngeräten