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