[PYTHON] End-to-End-Trennung von Einkanal-Tonquellen mit Google Colaboratory

Da es Sommerferien sind, habe ich ein Programm implementiert, um die Trennung von Schallquellen mit einem tiefen neuronalen Netzwerk zu lernen und auszuführen. Wir haben es möglich gemacht, DNN in Google Colaboratory zu studieren, damit jeder es so oft wie möglich verwenden kann.

End-to-End-Trennung der Schallquelle

Die Technik des Trennens von Original A und B von dem Signal A + B, das eine Mischung aus der Stimme von Sprecher A und der Stimme von Sprecher B ist, wird als Schallquellentrennung bezeichnet. Die Stimme wurde lange Zeit unter Verwendung eines Spektrogramms analysiert, das durch Fourier-Transformation einer Wellenform als Merkmal erhalten wurde. In den letzten Jahren wurde jedoch ein Verfahren entwickelt, das die Wellenform des getrennten Signals direkt von der Wellenform des gemischten Signals abschätzt und insbesondere als End-to-End-Schallquellentrennung (E2E) bezeichnet wird.

Dual-path RNN TasNet Es gibt eine Methode namens Dual-Path-RNN-TasNet als eine der Methoden, die tiefes Lernen der End-to-End-Schallquellentrennung verwendet. Dual-Path-RNN-TasNet besteht aus drei Teilen: Encoder, Separator und Decoder. DPRNN_architecture.png

Encoder-Karten von der Wellenform zum latenten Raum und Decoder-Karten vom latenten Raum zur Wellenform. Separator maskiert und trennt die Merkmalsmengen im zugeordneten latenten Raum für jede Schallquelle. Die Trennung von E2E-Schallquellen durch DNN durch die Konfiguration von Encoder-Separator-Decoder wurde bisher angekündigt, aber insbesondere Dual-Path-RNN TasNet verwendet ein Modul namens Dual-Path-RNN für den Separator-Teil. Dual-Path-RNN ist ein Netzwerk, das RNN in jeder Richtung der globalen Zeitachse und der lokalen Zeitachse ausführt. Infolgedessen kann das Empfangsfeld von DNN mit einer kleinen Anzahl von Parametern erweitert werden, und es wird eine qualitativ hochwertige Trennung der Schallquellen realisiert.

Dinge notwendig

Ausführungsmethode

Der Link für Github lautet hier. DNN-Lernen ist ein Notizbuch in Google Colaboratory, und die eigentliche Trennung wird auf einem PC durchgeführt.

1. DNN lernen

1.1. Vorbereitung

Bringen Sie den Code mit und laden Sie die erforderlichen Bibliotheken herunter.

train_dprnn-tasnet.ipynb


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

Wenn Sie die DNN-Modelldaten auf dem Google-Laufwerk behalten möchten, hängen Sie sie ein.

train_dprnn-tasnet.ipynb


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

Dieses Mal verwenden wir einen Audiodatensatz namens LibriSpeech. Erstellen Sie einen gemischten Audiodatensatz für zwei Lautsprecher, indem Sie folgende Schritte ausführen:

train_dprnn-tasnet.ipynb


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

1.2 DNN lernen

Wechseln Sie nun in das Arbeitsverzeichnis und lernen Sie die Trennung von Tonquellen. Es läuft jedoch nur "train.sh". Die Deep-Learning-Bibliothek verwendet PyTorch. RNN TasNet mit zwei Pfaden verfügt über einige Hyperparameter. Aufgrund der zeitlichen Einschränkungen von Google Colaboratory sind die Standardeinstellungen jedoch kleiner als das Originalpapier.

train_dprnn-tasnet.ipynb


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

Modelle usw. werden unter "<OUT_DIR>" gespeichert. Da der Verzeichnisname basierend auf den Hyperparametern bestimmt wird, denke ich, dass er ziemlich lang ist. Mit den Standardeinstellungen

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/

Modelle werden als "best.pth" und "last.pth" im Verzeichnis gespeichert. best.pth ist das Modell der Epoche mit dem größten Verlust an Validierungsdaten, und last.pth ist das Modell der letzten Epoche des Lernens. Wenn das 12-Stunden-Zeitlimit wieder erreicht ist

train_dprnn-tasnet.ipynb


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

Auf diese Weise kann das Lernen von der Fortsetzung aus neu gestartet werden. Auch für <MODEL_PATH> mit den Standardeinstellungen

<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

Es wird. Wenn der Verlust jedoch in 5 aufeinanderfolgenden Epochen nicht abnimmt, wird das DNN-Lernen vorzeitig beendet. Daher geht das Lernen nicht weiter.

2. Ausführung der Schallquellentrennung auf dem PC

Versuchen Sie nach dem Lernen in Google Colaboratory, die Tonquellen auf dem tatsächlichen Computer zu trennen. Es wird angenommen, dass es sich um einen Mac-PC handelt. Von hier aus zeigen wir den Eingang am Terminal. Darüber hinaus funktioniert Google Colaboratory nur durch Hinzufügen von "Sounddatei" (Stand: 4. September 2020). Für lokale Anwendungen muss die erforderliche Bibliothek jedoch separat installiert werden. Insbesondere hängt die Version von pytorch von der Umgebung von Google Colaboratory ab.

2.1 Vorbereitung

Laden Sie zuerst den Code herunter und wechseln Sie in Ihr Arbeitsverzeichnis.

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

Legen Sie das trainierte Modell unter das Arbeitsverzeichnis. Wenn bis zu diesem Punkt alles mit den Standardeinstellungen erledigt ist

<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/

Unten wird "best.pth" platziert. Um die Stimme tatsächlich aufzunehmen und zu trennen, bereiten Sie so viele Personen vor, wie in 1.2 angegeben.

2.2 Sprachtrennung und -ausführung

Sobald die Vorbereitung abgeschlossen ist, müssen Sie sie nur noch ausführen.

. ./demo.sh

Die Aufnahme beginnt für 5 Sekunden. Wenn es richtig funktioniert, sehen Sie einen Fortschrittsbalken mit den Buchstaben "Jetzt aufnehmen ...". Wenn die Aufnahme beendet ist, beginnt die Trennung nach DNN. Aufnahmeergebnis und Trennungsergebnis

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

Es wird unten als WAV-Datei gespeichert.

Zusammenfassung

Wir haben ein Programm zum Lernen und Trennen von Dual-Path-RNN-TasNet erstellt, das eine der durchgängigen Einkanal-Schallquellentrennungen darstellt. Vielleicht dauert das Lernen ungefähr 12 Stunden x 4 Stunden. Wenn es wenig Lärm gibt, denke ich, dass es auf der tatsächlichen Maschine ziemlich gut funktioniert. Andere Netzwerke als RNN TasNet mit zwei Pfaden sind ebenfalls implementiert. Nehmen Sie Kontakt mit uns auf.

Recommended Posts

End-to-End-Trennung von Einkanal-Tonquellen mit Google Colaboratory
Lernen Sie Python mit Google Colaboratory
Probieren Sie OpenCV mit Google Colaboratory aus
OpenCV-Funktionserkennung mit Google Colaboratory
Quellcode für die Trennung von Tonquellen (Übungsreihe zum maschinellen Lernen), der mit Python gelernt wurde
So suchen Sie in Google Colaboratory nach Google Drive
Erstellen Sie einen Kaskadenklassifizierer mit Google Colaboratory
Verwendung des Jupyter-Kernels von Java mit Google Colaboratory
Verwenden Sie TPU und Keras mit Google Colaboratory
Google-Labor
Cheet Sheet beim Schaben mit Google Colaboratory (Colab)
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen