[PYTHON] Séparation de source sonore monocanal de bout en bout avec Google Colaboratory

Comme ce sont les vacances d'été, j'ai mis en place un programme pour apprendre et exécuter la séparation des sources sonores avec un réseau neuronal profond. Nous avons rendu possible l'étude de DNN sur Google Colaboratory afin que tout le monde puisse l'utiliser au maximum.

Séparation des sources sonores de bout en bout

La technique de séparation des A et B d'origine du signal A + B, qui est un mélange de la voix du locuteur A et de la voix du locuteur B, est appelée séparation de la source sonore. Pendant longtemps, la voix a été analysée à l'aide d'un spectrogramme obtenu par transformation de Fourier d'une forme d'onde en tant que caractéristique. Cependant, ces dernières années, une méthode a été conçue qui estime directement la forme d'onde du signal séparé de la forme d'onde du signal mélangé, et est spécialement appelée séparation de source sonore de bout en bout (E2E).

Dual-path RNN TasNet Il existe une méthode appelée Dual-path RNN TasNet comme l'une des méthodes utilisant l'apprentissage en profondeur de la séparation des sources sonores de bout en bout. Le RNN TasNet à deux voies se compose de trois parties: codeur, séparateur et décodeur. DPRNN_architecture.png

L'encodeur mappe de la forme d'onde à l'espace latent et le décodeur mappe l'espace latent à la forme d'onde. Le séparateur masque et sépare les quantités de caractéristiques dans l'espace latent mappé pour chaque source sonore. La séparation de la source sonore E2E par DNN par la configuration de l'encodeur-séparateur-décodeur a été annoncée jusqu'à présent, mais surtout le RNN à double chemin TasNet utilise un module appelé RNN à double chemin pour la partie séparateur. Le RNN à double trajet est un réseau qui exécute RNN dans chaque direction de l'axe du temps global et de l'axe du temps local. En conséquence, le champ de réception du DNN peut être étendu avec un petit nombre de paramètres, et une séparation de source sonore de haute qualité est réalisée.

Les choses nécessaires

Méthode d'exécution

Le lien pour Github est ici. L'apprentissage DNN est un bloc-notes sur Google Colaboratory, et la séparation proprement dite est effectuée sur un PC.

1. Apprentissage du DNN

1.1. Préparation

Apportez l'ensemble de code et téléchargez les bibliothèques requises.

train_dprnn-tasnet.ipynb


!git clone https://github.com/tky1117/DNN-based_source_separation.git
!pip install soundfile

Si vous souhaitez conserver les données du modèle DNN sur Google Drive, montez-le.

train_dprnn-tasnet.ipynb


from google.colab import drive
drive.mount("/content/drive")

Cette fois, nous utiliserons un jeu de données audio appelé LibriSpeech. Créez un ensemble de données audio mixtes pour deux haut-parleurs en procédant comme suit:

train_dprnn-tasnet.ipynb


%cd "/content/DNN-based_source_separation/egs/librispeech/common"
!. ./prepare.sh "../../../dataset" 2 # 2 is number of speakers

1.2. Apprentissage du DNN

Maintenant, accédez au répertoire de travail et apprenez la séparation des sources sonores. Cependant, il exécute simplement train.sh. La bibliothèque d'apprentissage en profondeur utilise PyTorch. RNN TasNet à double chemin a quelques hyperparamètres, mais en raison des contraintes de temps de Google Colaboratory, les paramètres par défaut rendent le modèle plus petit que le papier d'origine.

train_dprnn-tasnet.ipynb


%cd "/content/DNN-based_source_separation/egs/librispeech/dprnn_tasnet"
!. ./train.sh <OUT_DIR>

Les modèles etc. sont enregistrés sous <OUT_DIR>. Étant donné que le nom du répertoire est déterminé en fonction des hyper paramètres, je pense qu'il est assez long. Avec les paramètres par défaut

train_dprnn-tasnet.ipynb


<OUT_DIR>/2mix/trainable-trainable/sisdr/N64_L16_H256_K100_P50_B3/enc-relu_dilated1_separable1_causal0_norm1_mask-sigmoid/b4_e100_adam-lr1e-3-decay0_clip5/seed111/model/

Les modèles sont enregistrés sous les noms «best.pth» et «last.pth» dans le répertoire. «best.pth» est le modèle de l'époque avec la plus grande perte de données de validation, et «last.pth» est le modèle de la dernière époque d'apprentissage. Si le délai de 12 heures est atteint, à nouveau

train_dprnn-tasnet.ipynb


%cd "/content/DNN-based_source_separation/egs/librispeech/dprnn_tasnet"
!. ./train.sh <OUT_DIR> <MODEL_PATH>

Ce faisant, l'apprentissage peut être redémarré à partir de la suite. Même pour <MODEL_PATH>, avec les paramètres par défaut

<OUT_DIR>/2mix/trainable-trainable/sisdr/N64_L16_H256_K100_P50_B3/enc-relu_dilated1_separable1_causal0_norm1_mask-sigmoid/b4_e100_adam-lr1e-3-decay0_clip5/seed111/model/last.pth

Il devient. Cependant, si la perte ne diminue pas pendant 5 époques consécutives, l'apprentissage DNN est interrompu prématurément. Par conséquent, l'apprentissage ne se poursuit pas.

2. Exécution de la séparation des sources sonores sur PC

Après avoir appris sur Google Colaboratory, essayez de séparer les sources sonores sur la machine réelle. Il est supposé être un PC Mac. De là, nous montrerons l'entrée sur le terminal. De plus, sur Google Colaboratory, cela fonctionne simplement en ajoutant soundfile (à partir du 4 septembre 2020), mais pour le local, il est nécessaire d'installer la bibliothèque nécessaire séparément. En particulier, la version de pytorch dépend de l'environnement de Google Colaboratory.

2.1. Préparation

Tout d'abord, téléchargez l'ensemble de code et accédez à votre répertoire de travail.

git clone https://github.com/tky1117/DNN-based_source_separation.git
cd "<WORK_DIR>/DNN-based_source_separation/egs/librispeech/dprnn_tasnet"

Placez le modèle entraîné sous le répertoire de travail. Si tout jusqu'à ce point est fait avec les paramètres par défaut

<WORK_DIR>/DNN-based_source_separation/egs/librispeech/dprnn_tasnet/exp/2mix/trainable-trainable/sisdr/N64_L16_H256_K100_P50_B3/enc-relu_dilated1_separable1_causal0_norm1_mask-sigmoid/b4_e100_adam-lr1e-3-decay0_clip5/seed111/model/

Ci-dessous, «best.pth» sera placé. Afin d'enregistrer et de séparer réellement la voix, préparez autant de personnes que le nombre de locuteurs spécifié en 1.2.

2.2. Séparation et exécution des voix

Une fois la préparation terminée, tout ce que vous avez à faire est de l'exécuter.

. ./demo.sh

L'enregistrement démarre pendant 5 secondes. Si cela fonctionne correctement, vous verrez une barre de progression avec les lettres "" Enregistrement en cours ... "`. Lorsque l'enregistrement est terminé, la séparation par DNN démarre. Résultat d'enregistrement et résultat de séparation

<WORK_DIR>/DNN-based_source_separation/egs/librispeech/dprnn_tasnet/results

Il est enregistré sous forme de fichier wav ci-dessous.

Résumé

Nous avons créé un programme pour apprendre et séparer le RNN TasNet à double chemin, qui est l'un des séparateurs de source sonore monocanal de bout en bout. Peut-être que cela prendra environ 12 heures x 4 pour apprendre. Si c'est un environnement avec peu de bruit, je pense que cela fonctionnera raisonnablement bien sur la machine réelle. Des réseaux autres que RNN TasNet Dual-path sont également mis en œuvre, alors n'hésitez pas à nous contacter.

Recommended Posts

Séparation de source sonore monocanal de bout en bout avec Google Colaboratory
Étudiez Python avec Google Colaboratory
Essayez OpenCV avec Google Colaboratory
Détection des fonctionnalités OpenCV avec Google Colaboratory
Code source pour la séparation des sources sonores (série de pratiques d'apprentissage automatique) appris avec Python
Comment rechercher Google Drive dans Google Colaboratory
Créez un classificateur en cascade avec Google Colaboratory
Utilisation du noyau Jupyter de Java avec Google Colaboratory
Utilisez TPU et Keras avec Google Colaboratory
Collaboratoire Google
Cheet sheet lors du scraping avec Google Colaboratory (Colab)
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python