Erstellen eines Hundestimmungsdetektors mit Google Cloud und armbasiertem Raspberry Pi

KDPV mit Bob, Deniskins Song



Heute gibt es überall Smartphones , Smartwatches und Fitness-Tracker. Sie sind nützlich, um uns selbst und unsere Umgebung zu überwachen, Benachrichtigungen zu senden und sogar schwerwiegende Probleme wie Vorhofflimmern zu erkennen. Und wir stehen erst am Anfang der Mikromonitoring-Bewegung.



In diesem Artikel werfen wir einen Blick auf die Idee eines Hundestimmungsdetektors. Wir werden ein Gerät entwickeln, das auf Umgebungsgeräusche hört und, wenn ein Hund anwesend ist, versucht, festzustellen, welche Geräusche er macht: freundliches Bellen, verängstigtes Jammern oder aggressives Knurren. Abhängig von den Vorlieben des Benutzers vibriert das Gerät, wenn es glaubt, dass der Hund überprüft werden muss. Dies könnte möglicherweise den Besitzern helfen, den Überblick über ihre Hunde zu behalten, wenn sie außer Hörweite sind. Dies ist natürlich nur ein Prototyp, und die Ergebnisse dieser Idee wurden noch nicht unter realen Bedingungen getestet.



Wir werden einen Arm-basierten Raspberry Pi-Computer verwenden, um dieses Gerät zu prototypisieren. Es ist eine großartige Plattform für die Implementierung von maschinellem Lernen auf Endbenutzergeräten. Armprozessoren werden nicht nur im Raspberry Pi verwendet, sondern funktionieren auch auf vielen Mobiltelefonen, mobilen Spielekonsolen und einer Vielzahl anderer Geräte. Der energieeffiziente Prozessor in diesen Computern verfügt über ausreichend Rechenleistung und kann fast überall zu einem erschwinglichen Preis gekauft werden.






Leider sind die Fähigkeiten kleiner Geräte bisher häufig durch Verarbeitungsleistung, mangelnde Internetverbindung und in der Regel geringe Mengen an Datenspeicher eingeschränkt. Obwohl solche Geräte viele Beobachtungen in kurzer Zeit durchführen können, ist es häufig unmöglich, alle Beobachtungen für eine spätere Synchronisation zu speichern, wenn aufgrund von Speicherbeschränkungen keine Internetverbindung besteht. Darüber hinaus verbraucht das drahtlose Senden großer Datenmengen bereits eine geringe Menge an Batteriestrom.



Um die aufgezeichneten Signale optimal nutzen zu können, muss die Signalverarbeitungsstufe unbedingt auf die Endbenutzergeräte selbst verlagert werden.



In den letzten zehn Jahren maschinelles Lernenhat erhebliche Fortschritte bei der Genauigkeit vieler Signalverarbeitungsaufgaben wie der Objekterkennung in Bildern, der Erkennung von Videogesten und der Spracherkennung erzielt. Heute kratzen wir nur noch an der Oberfläche des Möglichen. Die Verwendung von ML auf kleinen Geräten bietet unzählige andere Möglichkeiten, um das Leben der Menschen zu verbessern.



Start



Wir werden uns Google AudioSet für Schulungen ansehen . Dies ist die größte Sammlung von 10-Sekunden-Audioclips aus YouTube-Videos. Die Daten werden in einem vorverarbeiteten Format bereitgestellt, das mit dem YouTube-8M-Starterkit kompatibel ist . Es wird verwendet, um ein Modell zu trainieren, das Audioclips klassifizieren kann.



Das Trainieren dieses Modells kann einige Zeit dauern, daher werden wir die Verarbeitung auf die Google Cloud AI-Plattform verlagern .Laden Sie das Modell nach Abschluss. Wenn alle Komponenten fertig sind, werden wir das Modell auf den Raspberry Pi übertragen. Wir werden auch ein Python-Skript erstellen, um die Eingabe vom angeschlossenen Mikrofon zu erfassen und zu versuchen, jede Sekunde identifizierte Hundegeräusche vorherzusagen.



Das gewünschte Modell erstellen



Lassen Sie uns zunächst irgendwo einen Ordner für die gesamte Arbeit erstellen, die wir ausführen werden.



Um ein Modell zu erstellen, muss ein Datensatz geladen werden . Es ist über den Link unter der Überschrift Features-Dataset verfügbar. Am einfachsten ist es, ein archiviertes gzip-Archiv auf Ihren lokalen Computer herunterzuladen.

 

Dann entpacken Sie es und extrahieren Sie die Dateien. Dieses Paket enthält drei Ordner: Der eine enthält den ausgeglichenen Trainingssatz, der andere den Bewertungssatz und der dritte den unausgeglichenen Trainingssatz. Jeder Ordner enthält über 4000 Dateien.



TFRecord-Dateien enthalten vorverarbeitete Tags. Dateinamen beginnen mit den ersten beiden Zeichen der YouTube-Video-ID. Da bei Video-IDs zwischen Groß- und Kleinschreibung unterschieden wird, sollten Sie beim Extrahieren von Dateien vorsichtig sein, wenn das lokale Dateisystem die Groß- und Kleinschreibung nicht berücksichtigt, wie in Windows.



Hilfreicher Rat! Das 7zip-Programm wird verwendet, um solche Merkmalsdateien zu extrahieren. 7zip unterstützt Befehlszeilenoptionen. Auf diese Weise können Sie vorhandene Dateien automatisch umbenennen und sicherstellen, dass Dateien umbenannt und nicht überschrieben werden.



Nachdem wir den korrekt extrahierten Datensatz erhalten haben, klonen wir das YouTube-8M Github-Repositorywelches den Code zum Trainieren des Modells enthält. Es wird empfohlen, es in den Ordner zu klonen, der für das extrahierte Dataset erstellt wurde.



Aktualisieren Sie anschließend die Datei reader.py im Ordner YouTube-8M, um die alten AudioSet TFRecord-Dateien zu unterstützen. Dieser Prozess umfasst zwei Phasen:



  • Ändern Sie alle Vorkommen von "id" in "video_id".
  • Ändern Sie den Standardwert des Parameters num_classes in 527. Diese Nummer entspricht der Anzahl der verschiedenen Kategorien in diesem Audiodatensatz.



Der Bezeichner muss an fünf Stellen und num_classes an zwei Stellen geändert werden.



Stellen Sie zum Ausführen dieses Programms eine neue virtuelle Python 3.6+ -Umgebung bereit und installieren Sie tensorflow == 1.14. Es ist jetzt auch praktisch, die Anforderungen  für das Ausgabeskript festzulegen , das wir im nächsten Schritt erstellen werden. Obwohl die Versionsnummern für jedes Paket unterschiedlich sind, besteht die einzige schwierige Anforderung darin, Tensorflow Version 1.14 zu verwenden. Für andere Pakete können Sie einfach die neueste Version installieren.



An diesem Punkt können Sie das Modell trainieren. Führen Sie zunächst das Trainingsskript lokal aus, um es zu testen. Bei einem ausgeglichenen Trainingsset dauert es nicht lange. Öffnen Sie ein Eingabeaufforderungsfenster, navigieren Sie zu dem Ordner, der im ersten Schritt dieses Abschnitts erstellt wurde, und geben Sie den folgenden Befehl ein (beachten Sie, dass dies alles eine Zeile ist):



python youtube-8m/train.py \ --train_data_pattern=./audioset_v1_embeddings/bal_train/*.tfrecord \
--num_epochs=100 \
--feature_names="audio_embedding" \
--feature_sizes="128" \
--frame_features \
--batch_size=512 \
--train_dir ./trained_models/yt8m \
--model=FrameLevelLogisticModel \
--start_new_model
      
      





Beachten Sie auch, dass die Zeilenumbruchzeichen \ auf Linux-Systemen zwar einwandfrei funktionieren, unter Windows jedoch durch das Zeichen ^ ersetzt werden müssen.



Nach 100 Epochen wird dies fortgesetzt, bis ungefähr Schritt 8500 erreicht ist. Das FrameLevelLogisticModel arbeitet mit einer maximalen Genauigkeit von ungefähr 58–59%. Auf unserem Testsystem dauerte der gesamte Vorgang knapp 20 Minuten.



Dieses Starter-Kit enthält weitere Modelle, darunter DbofModel und LstmModel. Jedes von diesen liefert eine nahezu perfekte Genauigkeit der Trainingsdaten, aber beide werden bei einem ausgeglichenen Trainingssatz stark überpasst, wenn sie mit einem Punktesatz getestet werden.



Trainiere das Modell in der Cloud



Eine Alternative besteht darin, mit einem unausgeglichenen Datensatz einen vollständigen Satz von Sounds zu trainieren. In diesem Fall dauert die Verarbeitung viel länger, aber GPUs, die auf der Google Cloud AI-Plattform basieren, können erheblich helfen. Ein einfaches Logistikmodell erreicht bei einem unausgeglichenen Trainingssatz eine Genauigkeit von ca. 88%.



Um diesen Prozess in der Cloud laufen, registrieren Sie sich und melden Sie sich in Ihrem Google Cloud AI Plattform Konto, Abrechnung ermöglichen, und laden Sie die Kommandozeilen - Tools ausführlich hier .



Wenn alles eingerichtet ist, gehen Sie zur Cloud-Konsole, erstellen Sie ein neues Projekt und einen neuen Aufbewahrungskorb. Der Name des Speicherbereichs muss global eindeutig sein. Am einfachsten ist es, wenn es den Namen des Benutzerkontos enthält. Laden Sie die gesamten Ordner audioset_v1_embeddings und youtube-8m in diesen Warenkorb.



Bei korrekter Ausführung sollten wir in der Lage sein, die Google Cloud SDK-Shell zu öffnen und die folgenden Befehle auszuführen, um loszulegen. Stellen Sie sicher, dass Sie Ihren Projektnamen und Ihren Speicher-Bucket-Namen durch die entsprechenden Kontowerte ersetzen. Dies ist für Unix-basierte Systeme geschrieben. Nehmen Sie die entsprechenden Korrekturen für Windows-Systeme vor.



BUCKET_NAME=gs://${USER}_yt8m_train_bucket

gsutil mb -p your-project-name $BUCKET_NAME

JOB_NAME=yt8m_train_$(date +%Y%m%d_%H%M%S)

gcloud --verbosity=debug ml-engine jobs submit training $JOB_NAME 
--python-version 3.5  --package-path=youtube-8m --module-name=youtube-8m.train --staging-bucket=$BUCKET_NAME --region=us-east1 --config=youtube-8m/cloudml-gpu.yaml -- --train_data_pattern='gs://your-storage-bucket-name/audioset_v1_embeddings/unbal_train/*.tfrecord' --model=FrameLevelLogisticModel --train_dir=$BUCKET_NAME/yt8m_train_frame_level_logistic_model
      
      





Beachten Sie erneut, dass der letzte Aufruf von gcloud ein langer Befehl mit Konfigurationsoptionen ist.

Die Fertigstellung dauert mehr als einen halben Tag. Wenn alles gesagt und getan ist, laden Sie die Modellausgabe aus Ihrem Cloud-Speicher-Bucket:



$BUCKET_NAME/yt8m_train_frame_level_logistic_model
      
      





Ausführung auf Raspberry Pi



Wir demonstrieren diese Anwendung auf einem Arm-basierten Raspberry Pi 4-Computer, auf dem Raspbian OS mit installiertem Python 3 ausgeführt wird. Installieren Sie PyAudio auf diesem Gerät. Bei Problemen sollte diese Antwort helfen.



Schließen Sie ein USB-Mikrofon an (mit einem optionalen Headset für die Audioausgabe zum Testen). Zu diesem Zeitpunkt ist das Mikrofon am einfachsten als Standardgerät zu konfigurieren. Gehen Sie zu Ihrem Raspian-Desktop und klicken Sie auf das Lautsprechersymbol neben der Uhr in der oberen rechten Ecke. Wählen Sie dann das zu verwendende Mikrofon aus.



Der letzte wichtige Schritt besteht darin, Instrumente zu erhalten, die Rohaudio mit derselben 128-D-Komprimierung wie das AudioSet verarbeiten. Das dafür verwendete Tool ist in enthalten das Github-Repository der zuvor erwähnten Tensorflow-Modelle . Befolgen Sie genau das gleiche Installationsverfahren auf dem Pi und vergessen Sie nicht, es auf Ihrer Python 3-Instanz zu installieren. Klonen Sie dieses Repository außerdem in denselben Ordner, in den Sie das YouTube-8M-Dataset und -Repository geklont haben.



Führen Sie das Skript vggish_smoke_test.py aus, um sicherzustellen, dass alles korrekt installiert ist.

 

Kopieren Sie nun das von der Google Cloud-Plattform heruntergeladene Modell mit dem Mikrofon-Abhörskript in den Ordner .



Führen Sie dieses Skript aus. Das Standardgerät wird abgehört und die Vorhersagen werden in die Konsole geschrieben.

 

Wenn das gewünschte Gerät nicht als Standardgerät konfiguriert werden kann, führen Sie den Befehl "python model-run.py list" aus, um eine Liste aller Geräte nach Index anzuzeigen. Suchen Sie den Geräteindex und führen Sie den Befehl mit diesem Index erneut aus. Zum Beispiel:



python model-run.py 3
      
      





Kopieren Sie den gesamten Inhalt dieses Ordners auf Ihren Raspberry Pi und führen Sie das Skript mit dem Code erneut aus. Einmal pro Sekunde sollte vorhergesagt werden, wie viel Lärm das Gerät vom Hund macht! Die Auszahlungsphase kann durch einen Mechanismus ersetzt werden, der für das Gerät und den Zielbenutzer am besten geeignet ist.



Fazit



Heute haben wir uns eine mögliche Anwendung des Sound-basierten maschinellen Lernens angesehen, das von Arm-basierten Mobilgeräten unterstützt wird. Dieses Konzept muss vor der Markteinführung genauer getestet werden, es besteht jedoch bereits die Möglichkeit, ein beliebiges Audioerkennungsmodell auf einem mobilen Gerät auszuführen.

 

Die AudioSet-Daten enthalten 527 Tags mit einer robusten Ontologie urbaner Klänge. Es gibt auch Möglichkeiten, die Klangverarbeitung zu verbessern, bevor sie an unseren Prädiktor übergeben wird, z. B. einen Cocktailparty-Algorithmus anzuwenden und jede Schallquelle durch einen Vggish-Filter zu leiten .



Es ist sehr aufregend, einen Hundestimmungsdetektor auf einem Raspberry Pi mit einem Arm-Mikroprozessor zu betreiben. Um dies noch interessanter zu machen, können Sie das Modell mithilfe der Tools im TensorFlow-Paket transformieren und digitalisieren und es dann mit dem TensorFlow Lite-Mikrocontroller- Paket auf einem kostengünstigen Arm-Mikrocontroller mit geringem Stromverbrauch ausführen .



Klingt interessant? Experimentieren Sie und finden Sie heraus, welches Problem dieser Ansatz lösen kann. Sie wissen nie, wie sehr Sie das Leben eines Menschen beeinflussen können. Und um herauszufinden, wozu maschinelles Lernen in den richtigen Händen noch in der Lage ist, lernen Sie (natürlich nicht zu vergessen den HABR-Promo-Code).





Andere Berufe und Kurse
BERUF








KURSE







Bild



All Articles