Il s'agit du référentiel de la méthode présentée dans le document "Modélisation de la langue pour la détection d'événements sonores avec le forçage des enseignants et l'échantillonnage programmé", par K. Drossos, S. Gharib, P, Magron et T. veranen.
Notre article est présenté à l'atelier de détection et de classification des scènes et événements acoustiques (DCASE) 2019. Vous pouvez trouver une version en ligne de notre article sur Arxiv: https://arxiv.org/abs/1907.08506
Si vous utilisez notre méthode, veuillez citer notre papier.
Vous pouvez obtenir la version du code utilisé dans le papier de
La détection des événements sonores (SED) est la tâche d'identifier les activités des événements sonores à partir de courtes représentations de temps de l'audio. Par exemple, étant donné un vecteur de fonctionnalité audio qui est extrait de 0,04 seconde, une méthode SED devrait identifier les activités de différents événements sonores dans ce vecteur. Habituellement, SED est appliqué sur une séquence de vecteurs de fonctionnalités audio de courte durée et l'identification des activités des événements sonores est effectuée pour chaque vecteur de fonctionnalité d'entrée. Autrement dit, car une entrée reçoit une matrice, avec T et F pour être la quantité de vecteurs et de fonctionnalités de fonctionnalité, respectivement, la sortie est la matrice, qui contient les prédictions pour chacune des classes C à chaque vecteur de fonction t
Dans les enregistrements réels, les divers événements sonores ont probablement des structures temporelles à l'intérieur et à travers les événements . Par exemple, un événement des «pas» peut être répété avec des pauses entre les deux (structure intra-événement). D'un autre côté, la «corne de voiture» est susceptible de suivre ou de précéder l'événement sonore «voiture passant par» (structure inter-événements). Ces structures temporelles sont utilisées et utilisées dans d'autres tâches d'apprentissage automatique, par exemple dans la traduction automatique, le sous-titrage de l'image et la reconnaissance de la parole. Dans ces tâches, la méthode développée apprend également un modèle des associations temporelles des classes ciblées. Ces associations sont généralement qualifiées de modèle linguistique.
Les méthodes SED peuvent bénéficier d'un modèle de langue. La méthode de ce référentiel concerne exactement cela. Une méthode pour profiter du modèle de langue pour SED.
Afin de profiter des structures temporelles mentionnées ci-dessus, nous utilisons la technique de forçage de l'enseignant [1]. Le forçage des enseignants est le conditionnement de l'entrée à un RNN avec les activités des événements sonores au pas de temps précédent. C'est,
Où est la sortie du RNN au temps du temps , est l'entrée du RNN (à partir d'une couche précédente) et au temps du temps , et est les activités des événements sonores au temps T-1 .
Si, comme sont utilisés, les valeurs de vérité au sol, le RNN ne sera pas robuste aux cas où il n'est pas une activité de classe correcte. Par exemple, dans le processus de test où il n'y a pas de valeurs de vérité au sol.
Si, comme sont utilisés les prédictions du classificateur, alors le RNN aura du mal à apprendre les dépendances des événements sonores, car pendant la formation (et surtout au début du processus de formation), il sera alimenté des activités de classe incorrectes.
Pour lutter contre les deux ci-dessus, nous utilisons la technique d'échantillonnage prévue [2]. Autrement dit, au début de la formation que nous utilisons comme valeurs de vérité au sol. Au fur et à mesure que la formation se déroule et que le classificateur apprend à prédire de plus en plus d'activités de classe, nous utilisons progressivement les prédictions du classificateur.
[1] RJ Williams et D. Zipser, «Un algorithme d'apprentissage pour exécuter continuellement des réseaux de neurones entièrement récurrents», Neural Computation, vol. 1, no. 2, pp. 270-280, juin 1989.
[2] S. Bengio, O. Vinyals, N. Jaitly et N. Shazeer, «Échantillonnage prévu pour la prédiction de séquence avec des réseaux neuronaux récurrents», dans les actes de la 28e Conférence internationale sur les systèmes de traitement neuronal de l'information, Volume 1, Ser. Nips'15. Cambridge, MA, USA: MIT Press, 2015, pp. 1171–1179. En ligne. Disponible: http://dl.acm.org/citation.cfm?id=2969239.2969370
Pour commencer à utiliser notre projet, vous devez:
Utilisez Python 3.6. Le code de ce référentiel est testé et fonctionne avec Python 3.6. Utiliser probablement d'autres versions Python 3.x sera OK, mais veuillez avoir à l'esprit que ce code est pour Python 3.6.
Configurez les dépendances à l'aide des fichiers pip (pip_requirements.txt) ou conda (conda_requirements.txt). Naviguez avec votre terminal à l'intérieur du répertoire racine du projet (c'est-à-dire le répertoire créé après le clonage de ce référentiel), puis émettez la commande appropriée au terminal:
pip : $ pip install -r requirements/pip_requirements.txtconda , vous pouvez émettre la commande $ conda install --yes --file requirements/conda_requirements.txtTéléchargez les données audio. Vous pouvez télécharger les trois ensembles de données audio depuis:
L'ensemble de données Tut-SED Synthetic 2016 est disponible à partir d'ici.
Téléchargez les fichiers audio (c'est-à-dire l'Audio 1/5, Audio 2/5, ..., Audio 5/5), effectuez votre extraction de fonctionnalités et suivez les instructions dans la section de configuration de données.
Le Tut Sound Events 2016 est disponible à partir d'ici.
Téléchargez les fichiers audio, effectuez votre extraction de fonctionnalités et suivez les instructions dans la section de configuration des données.
L'événement Sound Tut 2017 est disponible à partir d'ici
Téléchargez les fichiers audio, effectuez votre extraction de fonctionnalités et suivez les instructions dans la section de configuration des données.
Maintenant, le projet est configuré et vous pouvez l'utiliser avec les données que vous avez obtenues à partir de l'étape 3.
Vous pouvez utiliser SEDLM directement pour vos données, ou vous pouvez vérifier le code et adopter le SEDLM à votre tâche SED, ou répéter le processus décrit dans notre article.
Le code SEDLM est basé sur Pytorch, version 1.1.0.
Dans la forme actuelle, différentes variables du code sont spécifiées dans un fichier YAML, maintenant tous les paramètres du code. Tous les fichiers YAML sont dans le répertoire settings et les recherches de fonctions de chargement YAML dans le répertoire settings des fichiers YAML. En général, vous pouvez simplement modifier les valeurs des paramètres dans le fichier YAML, puis exécuter le code.
Les données doivent être dans le répertoire data .
Si vous souhaitez utiliser les chargeurs de données existants, vous devez organiser vos données de manière spécifique. Tout d'abord, vous devez avoir différents fichiers pour les fonctionnalités d'entrée et les valeurs cibles. Par exemple, input_features.npy et target_values.npy . Ensuite, selon l'ensemble de données que vous utiliserez, vous devez avoir vos données dans différents répertoires. C'est-à-dire:
Tutted Synthetic 2016.
Les données doivent être dans un répertoire appelé synthetic , dans le répertoire data . C'est-à-dire data/synthetic . Ensuite, les fichiers pour les données de formation, de validation et de test doivent être dans un autre répertoire. C'est-à-dire:
data/synthetic/trainingdata/synthetic/validationdata/synthetic/testingVous devez avoir différents fichiers Numpy pour les fonctionnalités d'entrée et les valeurs cibles. Vous pouvez spécifier le nom de chacun des fichiers d'entrée ou cible dans le fichier de paramètres YAML. Par exemple, les fichiers de formation devraient être comme:
data/synthetic/training/input_features.npydata/synthetic/training/target_values.npyLe code chargera les fichiers Numpy et les utilisera pour former la méthode SEDLM. Vous pouvez vous assurer que les fonctionnalités d'entrée et les valeurs cibles sont correctement commandées. C'est-à-dire que le premier élément des fonctionnalités d'entrée correspond au premier élément des valeurs cibles.
Tut Real Life 2016
Les données doivent être dans un répertoire appelé real_life_2016 , dans le répertoire data . Autrement dit, data/real_life_2016 . Ensuite, les fichiers pour chacun des plis doivent être dans un répertoire différent. C'est-à-dire:
data/real_life_2016/fold_1data/real_life_2016/fold_2data/real_life_2016/fold_3data/real_life_2016/fold_4Vous devez avoir différents fichiers de cornichons pour les fonctionnalités d'entrée et les valeurs cibles, et pour la formation et les tests de chaque pli. Puisqu'il y a plusieurs fichiers par scène et par pli, vous ne pouvez pas avoir toutes les fonctionnalités dans un tableau Numpy. Ainsi, vous devez avoir toutes les données dans une liste et sérialiser (c'est-à-dire le magasin sur disque) cette liste à l'aide du package Pickle. De plus, il existe des fichiers pour la formation et les tests à chaque pli.
Pour plus de commodité, SEDLM utilise automatiquement une pré-fixation pour les noms de fichiers. Autrement dit, il ajoute automatiquement "Train" et "Tester" au nom de fichier spécifié.
Vous pouvez spécifier le nom de chacun des fichiers d'entrée ou cible dans le fichier de paramètres YAML. Par exemple, les fichiers doivent être comme:
input_features.ptarget_values.pEnsuite, le code SEDLM recherchera les fichiers appropriés et pour chaque pli. Par exemple, pour le pli 1 et la scène de la maison, les fichiers suivants seront recherchés:
data/real_life_2016/home/fold_1/train_input_features.pdata/real_life_2016/home/fold_1/train_target_values.pdata/real_life_2016/home/fold_1/test_input_features.pdata/real_life_2016/home/fold_1/test_target_values.pLe code chargera les fichiers Pickle et les utilisera pour former la méthode SEDLM. Vous pouvez vous assurer que les fonctionnalités d'entrée et les valeurs cibles sont correctement commandées. C'est-à-dire que le premier élément des fonctionnalités d'entrée correspond au premier élément des valeurs cibles.
Tut Real Life 2017
Les données doivent être dans un répertoire appelé real_life_2017 , dans le répertoire data . Autrement dit, data/real_life_2017 . Ensuite, les fichiers pour chacun des plis doivent être dans un répertoire différent. C'est-à-dire:
data/real_life_2017/fold_1data/real_life_2017/fold_2data/real_life_2017/fold_3data/real_life_2017/fold_4Vous devez avoir différents fichiers de cornichons pour les fonctionnalités d'entrée et les valeurs cibles, et pour la formation et les tests de chaque pli. Puisqu'il y a plusieurs fichiers par pli, vous ne pouvez pas avoir toutes les fonctionnalités dans un tableau Numpy. Ainsi, vous devez avoir toutes les données dans une liste et sérialiser (c'est-à-dire le magasin sur disque) cette liste à l'aide du package Pickle. De plus, il existe des fichiers pour la formation et les tests à chaque pli.
Pour plus de commodité, SEDLM utilise automatiquement une pré-fixation pour les noms de fichiers. Autrement dit, il ajoute automatiquement "Train" et "Tester" au nom de fichier spécifié.
Vous pouvez spécifier le nom de chacun des fichiers d'entrée ou cible dans le fichier de paramètres YAML. Par exemple, les fichiers doivent être comme:
input_features.ptarget_values.pEnsuite, le code SEDLM recherchera les fichiers appropriés et pour chaque pli. Par exemple, pour le pli 1, les fichiers suivants seront recherchés:
data/real_life_2017/fold_1/train_input_features.pdata/real_life_2017/fold_1/train_target_values.pdata/real_life_2017/fold_1/test_input_features.pdata/real_life_2017/fold_1/test_target_values.pLe code chargera les fichiers Pickle et les utilisera pour former la méthode SEDLM. Vous pouvez vous assurer que les fonctionnalités d'entrée et les valeurs cibles sont correctement commandées. C'est-à-dire que le premier élément des fonctionnalités d'entrée correspond au premier élément des valeurs cibles.
Les hyper-paramètres peuvent être réglés à partir des fichiers de paramètres YAML. Les hyper-paramètres disponibles pour le réglage sont:
Vous pouvez exécuter le système à l'aide d'un script bash. Un exemple de ce script est les fichiers:
example_bash_script_baseline.sh , qui exécute la configuration de base pour le Sedlmexample_bash_script_tf.sh , qui exécute le SEDLM avec l'ensemble de données Tut Real Life 2017.