Créer un détecteur d'humeur de chien à l'aide de Google Cloud et de Raspberry Pi à base de bras

KDPV avec Bob, la chanson de Deniskin



Aujourd'hui, les smartphones , les smartwatches et les trackers de fitness sont partout. Ils sont utiles pour nous surveiller nous-mêmes, notre environnement, peuvent envoyer des notifications et même détecter des problèmes graves tels que la fibrillation auriculaire. Et nous ne sommes qu'au début du mouvement de micromonitorage.



Dans cet article, nous examinerons l'idée d'un détecteur d'humeur pour chien. Nous allons créer un appareil qui écoute les sons ambiants et, si un chien est présent, essaie de déterminer quel son il émet: aboiements amicaux, gémissements effrayés ou grognements agressifs. Selon la préférence de l'utilisateur, l'appareil vibre lorsqu'il pense qu'il est nécessaire de contrôler le chien. Cela pourrait éventuellement aider les propriétaires à garder une trace de leurs chiens lorsqu'ils sont hors de portée de voix. Bien sûr, ce n'est qu'un prototype, et les résultats de cette idée n'ont pas encore été testés en conditions réelles.



Nous utiliserons un ordinateur Raspberry Pi basé sur Arm pour prototyper cet appareil. C'est une excellente plateforme pour mettre en œuvre l'apprentissage automatique sur les appareils des utilisateurs finaux. Les processeurs Arm ne sont pas seulement utilisés dans le Raspberry Pi, ils fonctionnent également sur de nombreux téléphones portables, consoles de jeux mobiles et une foule d'autres appareils. Le processeur écoénergétique de ces ordinateurs a une grande puissance de traitement et peut être acheté à un prix abordable à peu près n'importe où.






Malheureusement, jusqu'à présent, les capacités des petits appareils sont souvent limitées par la puissance de traitement, le manque de connectivité Internet et, en règle générale, de petites quantités de stockage de données. Bien que de tels dispositifs puissent effectuer de nombreuses observations en peu de temps, s'il n'y a pas de connexion Internet en raison de limitations de stockage, il est souvent impossible de sauvegarder toutes les observations pour une synchronisation ultérieure. En outre, l'envoi d'énormes quantités de données sans fil consomme également une quantité déjà faible d'énergie de la batterie.



Afin de tirer le meilleur parti des signaux enregistrés, il est impératif de déplacer l'étage de traitement du signal vers les appareils de l'utilisateur final eux-mêmes.



Au cours de la dernière décennie, l'apprentissage automatiquea fait des progrès significatifs dans la précision de nombreuses tâches de traitement du signal telles que la détection d'objets dans les images, la reconnaissance de gestes vidéo et la reconnaissance vocale. Aujourd'hui, nous ne faisons qu'effleurer la surface du possible. L'utilisation du ML sur de petits appareils offre d'innombrables autres façons d'améliorer la vie des gens.



Début



Nous allons jeter un œil à Google AudioSet pour la formation . Il s'agit de la plus grande collection de clips audio de 10 secondes à partir de vidéos YouTube. Les données sont fournies dans un format prétraité compatible avec le kit de démarrage YouTube-8M . Il sera utilisé pour former un modèle capable de classer des clips audio.



La formation de ce modèle peut prendre un certain temps, nous allons donc déplacer le traitement vers la plate-forme Google Cloud AI.et après son achèvement, chargez le modèle. Avec tous les composants prêts, nous transférerons le modèle sur le Raspberry Pi. Nous allons également créer un script Python pour capturer l'entrée du microphone connecté et essayer de prédire chaque seconde les sons de chien identifiés.



Créer le modèle souhaité



Tout d'abord, créons un dossier quelque part pour tout le travail que nous allons faire.



Pour créer un modèle, un jeu de données doit être chargé . Il est disponible à partir du lien sous la rubrique Ensemble de données des fonctionnalités. Le moyen le plus simple est de télécharger une archive archivée gzip sur votre ordinateur local.

 

Ensuite, décompressez-le et extrayez les fichiers. Il existe trois dossiers dans ce package: l'un contient l'ensemble d'apprentissage équilibré, l'autre l'ensemble d'évaluation et le troisième l'ensemble d'apprentissage non équilibré. Chaque dossier contient plus de 4000 fichiers.



Les fichiers TFRecord contiennent des balises prétraitées. Les noms de fichier commencent par les deux premiers caractères de l'ID vidéo YouTube. Étant donné que les ID vidéo sont sensibles à la casse, vous devez être prudent lors de l'extraction de fichiers si le système de fichiers local est insensible à la casse, comme dans Windows.



Conseil utile! Le programme 7zip est utilisé pour extraire ces fichiers de traits. 7zip prend en charge les options de ligne de commande. Cela vous permet de renommer automatiquement les fichiers existants, en vous assurant que les fichiers sont renommés plutôt que remplacés.



Après avoir reçu l'ensemble de données correctement extrait, nous clonons le référentiel YouTube-8M Githubqui contient le code pour entraîner le modèle. Il est recommandé de le cloner dans le dossier qui a été créé pour l'ensemble de données extrait. Mettez



ensuite à jour le fichier reader.py dans le dossier YouTube-8M pour prendre en charge les anciens fichiers AudioSet TFRecord. Ce processus comprend deux étapes:



  • Remplacez toutes les occurrences de "id" par "video_id".
  • Remplacez la valeur par défaut du paramètre num_classes par 527. Ce nombre correspond au nombre de catégories différentes dans cet ensemble de données audio.



L'identifiant doit être changé à cinq endroits et num_classes à deux.



Pour exécuter ce programme, déployez un nouvel environnement virtuel Python 3.6+ et installez tensorflow == 1.14. Il est également pratique maintenant de définir les exigences  pour le script de sortie que nous allons créer à l'étape suivante. Bien que les numéros de version soient différents pour chaque package, la seule exigence absolue est d'utiliser la version 1.14 de tensorflow. Pour les autres packages, vous pouvez simplement installer la dernière version.



À ce stade, vous êtes prêt à entraîner le modèle. Tout d'abord, exécutez le script d'entraînement localement pour le tester. Cela ne prendra pas longtemps sur un ensemble d'entraînement équilibré. Ouvrez une fenêtre d'invite de commande, accédez au dossier créé à la première étape de cette section et entrez la commande suivante (notez qu'il ne s'agit que d'une seule ligne):



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
      
      





Notez également que si les caractères de saut de ligne \ fonctionnent correctement sur les systèmes Linux, ils doivent être remplacés par le caractère ^ sous Windows.



Après 100 époques, cela continue jusqu'à ce qu'il atteigne approximativement l'étape 8500. Le FrameLevelLogisticModel fonctionnera avec une précision maximale d'environ 58 à 59%. Sur notre système de test, l'ensemble du processus a pris un peu moins de 20 minutes.



D'autres modèles sont inclus avec ce kit de démarrage, notamment DbofModel et LstmModel. Chacun de ceux-ci fournira une précision presque parfaite sur les données d'entraînement, mais les deux seront fortement surajustés sur un ensemble d'entraînement équilibré lorsqu'ils seront testés avec un ensemble de scores.



Entraînez le modèle dans le cloud



Une alternative consiste à s'entraîner sur un ensemble complet de sons en utilisant un ensemble de données déséquilibré. Dans ce cas, le traitement prendra beaucoup plus de temps, mais les GPU basés sur la plate-forme Google Cloud AI peuvent considérablement aider. Un modèle logistique simple atteint une précision d'environ 88% sur un ensemble d'entraînement déséquilibré.



Pour exécuter ce processus dans le cloud, inscrivez-vous et connectez-vous à votre compte sur la plateforme Google Cloud AI, activez la facturation et téléchargez les outils de ligne de commande détaillés ici .



Une fois tout configuré, accédez à la console cloud, créez un nouveau projet et un nouveau panier de rangement. Le nom du compartiment de stockage doit être globalement unique. C'est plus simple s'il inclut le nom du compte utilisateur. Chargez l'intégralité des dossiers audioset_v1_embeddings et youtube-8m dans ce panier de stockage.



Si cela est fait correctement, nous devrions être en mesure d'ouvrir le shell du SDK Google Cloud et d'exécuter les commandes ci-dessous pour commencer. Assurez-vous de remplacer votre-nom-de-projet et votre-nom-de-compartiment-de-stockage par les valeurs de compte appropriées. Ceci est écrit pour les systèmes basés sur Unix. Effectuez les corrections appropriées pour les systèmes Windows.



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
      
      





Encore une fois, notez que le dernier appel à gcloud est une longue commande avec des options de configuration.

Cela prendra plus d'une demi-journée. Lorsque tout est dit et fait, chargez la sortie du modèle à partir de votre compartiment de stockage cloud:



$BUCKET_NAME/yt8m_train_frame_level_logistic_model
      
      





Exécution sur Raspberry Pi



Nous présentons cette application sur un ordinateur Raspberry Pi 4 basé sur Arm et exécutant Raspbian OS avec Python 3. Installez PyAudio sur cet appareil. En cas de problème, cette réponse devrait vous aider.



Connectez un microphone USB (avec un casque en option pour la sortie audio pour les tests). À ce stade, le microphone est le plus simple à configurer comme périphérique par défaut. Accédez à votre bureau Raspian et cliquez sur l'icône du haut-parleur à côté de l'horloge dans le coin supérieur droit, puis sélectionnez le microphone à utiliser.



La dernière étape importante consiste à obtenir des instruments qui traitent l'audio brut avec la même compression 128-D que l'AudioSet. L'outil utilisé pour cela est inclus dans le référentiel Github des modèles Tensorflow mentionné précédemment. Suivez exactement la même procédure d'installation sur le Pi, et n'oubliez pas de l'installer sur votre instance Python 3. De plus, clonez ce référentiel dans le même dossier où vous avez cloné l'ensemble de données et le référentiel YouTube-8M.



Exécutez le script vggish_smoke_test.py pour vous assurer que tout est correctement installé.

 

Copiez maintenant le modèle téléchargé depuis la plate-forme Google Cloud dans le dossier contenant le script d'écoute du microphone .



Exécutez ce script. Il commencera à écouter sur le périphérique par défaut et à écrire les prédictions sur la console.

 

Si le périphérique souhaité ne peut pas être configuré comme périphérique par défaut, exécutez la commande «python model-run.py list» pour afficher une liste de tous les périphériques par index. Recherchez l'index de l'appareil, puis exécutez à nouveau la commande avec cet index. Par exemple:



python model-run.py 3
      
      





Copiez tout le contenu de ce dossier sur votre Raspberry Pi et exécutez à nouveau le script avec le code. Une fois par seconde, il devrait y avoir des prédictions de la quantité de bruit que l'appareil pense que le chien fait! La phase de retrait peut être remplacée par tout mécanisme le plus approprié pour l'appareil et l'utilisateur cible.



Conclusion



Aujourd'hui, nous avons examiné une application possible de l'apprentissage automatique basé sur le son pris en charge par les appareils mobiles Arm. Ce concept doit être testé plus en détail avant d'être mis sur le marché, mais la possibilité d'exécuter un modèle de détection audio arbitraire sur un appareil mobile existe déjà.

 

Les données AudioSet comprennent 527 balises avec une ontologie robuste de sons urbains. Il existe également des possibilités d'améliorer le traitement du son avant de le transmettre à notre prédicteur, comme l'application d'un algorithme de cocktail et le passage de chaque source sonore à travers un filtre vggish .



Faire fonctionner un détecteur d'humeur de chien sur un Raspberry Pi avec un microprocesseur Arm est très excitant. Pour rendre cela encore plus intéressant, vous pouvez transformer et numériser le modèle à l'aide des outils du package TensorFlow, puis l'exécuter sur un microcontrôleur Arm à faible coût et faible consommation à l'aide du package de microcontrôleur TensorFlow Lite .



Ça a l'air intéressant? Expérimentez et découvrez quel problème cette approche peut résoudre. Vous ne savez jamais à quel point vous pouvez influencer la vie de quelqu'un. Et pour découvrir ce que le machine learning est capable de faire entre de bonnes mains, venez apprendre (sans oublier le code promo HABR, bien sûr).





Autres professions et cours
MÉTIER








COURS







image



All Articles