
Pytorch-Implementierung von Faltungsnetzwerkenbasierten Text-zu-Sprach-Synthese-Modellen:
Audio -Samples finden Sie unter https://r9y9.github.io/deepvoice3_pytorch/.
Notizbücher sollen auf https://colab.research.google.com ausgeführt werden:
HINWEIS : Vorbereitete Modelle sind nicht für den Master kompatibel. Bald aktualisiert werden.
| URL | Modell | Daten | Hyperparamente | Git Commit | Schritte |
|---|---|---|---|---|---|
| Link | Deepvoice3 | Ljspeech | Link | ABF0A21 | 640k |
| Link | Nyanko | Ljspeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585k |
| Link | Multi-Sprecher Deepvoice3 | Vctk | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300k + 300k |
Um vorgeborene Modelle zu verwenden, wird dringend empfohlen, dass Sie sich auf dem oben angegebenen spezifischen GIT-Commit befinden. dh,,
git checkout ${commit_hash}
Befolgen Sie dann den Abschnitt "Synthese von einem Checkpoint" im Readme des spezifischen Git -Commits. Bitte beachten Sie, dass die neueste Entwicklungsversion des Repositorys möglicherweise nicht funktioniert.
Sie könnten zum Beispiel versuchen:
# pretrained model (20180505_deepvoice3_checkpoint_step000640000.pth)
# hparams (20180505_deepvoice3_ljspeech.json)
git checkout 4357976
python synthesis.py --preset=20180505_deepvoice3_ljspeech.json
20180505_deepvoice3_checkpoint_step000640000.pth
sentences.txt
output_dir
hparams.py .builder gibt an, welches Modell Sie verwenden möchten. deepvoice3 , deepvoice3_multispeaker [1] und nyanko [2] sind geworfen.Bitte installieren Sie zuerst die oben aufgeführten Pakete und dann und dann
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
Es gibt viele Hyperparameter, die gedreht werden müssen, abhängig davon, an welchem Modell und Daten Sie arbeiten. Für typische Datensätze und Modelle sind im Repository Parameter bereitgestellt, von denen bekannt ist, dass sie gut funktionieren ( Voreinstellung ). Weitere Informationen finden Sie unter presets Directory. Beachten Sie das
preprocess.pytrain.pysynthesis.py Akzeptiert --preset=<json> Optionaler Parameter, wodurch angeben, wo voreingestellte Parameter geladen werden sollen. Wenn Sie voreingestellte Parameter verwenden, müssen Sie gleiche verwenden --preset=<json> während der gesamten Vorverarbeitung, Schulung und Bewertung. z.B,
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
anstatt
python preprocess.py ljspeech ~/data/LJSpeech-1.0
# warning! this may use different hyper parameters used at preprocessing stage
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
Verwendung:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
Unterstützt ${dataset_name} s sind:
ljspeech (en, Einzellautsprecher)vctk (EN, Multi-Lautsprecher)jsut (JP, Einzelsprecher)nikl_m (KO, Multi-Lautsprecher)nikl_s (KO, Einzellautsprecher) Angenommen, Sie verwenden voreingestellte Parameter, von denen bekannt ist, dass sie für LJSpeech-Datensatz/DeepVoice3 gut funktionieren und Daten in ~/data/LJSpeech-1.0 haben, dann können Sie Daten vorbereiten nach:
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
In diesem Fall werden extrahierte Merkmale (Melspektrogramme und lineare Spektrogramme) in ./data/ljspeech angezeigt.
Derzeit wird derzeit unterstützt, mit Metadaten im JSON-Format (kompatibel mit CARDEDM20/Multi-Sprecher-Tacotron-TensorFlow kompatibel). Verwendung:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
Möglicherweise müssen Sie die bereits bestehende voreingestellte JSON-Datei, insbesondere n_speakers , ändern. Beginnen Sie für englische Multispeaker mit presets/deepvoice3_vctk.json .
Angenommen, Sie haben Datensatz A (Sprecher A) und Datensatz ./datasets/datasetB/alignment.json (Sprecher B), die jeweils in der JSON -Metadata -Datei beschrieben werden ./datasets/datasetA/alignment.json
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
Einige Datensatze, insbesondere automatisch generierten Datensatz, können lange Stille und unerwünschte Führungs-/Nachverfolgung von Geräuschen umfassen, wodurch das SEQ2SEQ-Modell auf SHAR-Ebene untergräbt. (EG VCTK, obwohl dies in vctk_preprozess behandelt wird)
Um mit dem Problem umzugehen, wird gentle_web_align.py
gentle_web_align.py verwendet Gentle, ein Kaldi-basierter Sprach-Text-Alignment-Tool. Dies greift auf Web-Service-Anwendungen auf, die mit Transkripten festgelegte Klangsegmente ausgerichtet und das Ergebnis in Etikettsdateien im HTK-Stil konvertiert, die in preprocess.py verarbeitet werden sollen. Gentle kann in Linux/Mac/Windows (über Docker) ausgeführt werden.
Vorläufige Ergebnisse zeigen, dass die HTK/Festival/Merlin-basierte Methode in vctk_preprocess/prepare_vctk_labels.py bei VCTK besser funktioniert, aber Gentle ist stabiler mit Audioclips mit Umgebungsgeräuschen. (zB Filmauszüge)
Nutzung: (Angenommen, sanft läuft bei localhost:8567 (Standard, wenn nicht angegeben))
datasetA/wavs und Transkripte finden Sie in datasetA/txts ) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav und datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
Sobald Sie für jede Äußerung eine Phonemausrichtung haben, können Sie Funktionen extrahieren, indem Sie preprocess.py ausführen
Verwendung:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
Angenommen, Sie erstellen ein DeepVoice3-Modell mit dem LJSpeech-Datensatz im Stil. Dann können Sie Ihr Modell trainieren, indem Sie:
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
Modellkontrollpunkte (.PTH) und Alignments (.png) werden standardmäßig in ./checkpoints -Verzeichnis pro 10000 Schritte gespeichert.
Bitte überprüfen Sie dies im Voraus und befolgen Sie die folgenden Befehle.
python preprocess.py nikl_s ${your_nikl_root_path} data/nikl_s --preset=presets/deepvoice3_nikls.json
python train.py --data-root=./data/nikl_s --checkpoint-dir checkpoint_nikl_s --preset=presets/deepvoice3_nikls.json
Protokolle werden standardmäßig in ./log -Verzeichnis abgeladen. Sie können Protokolle per Tensorboard überwachen:
tensorboard --logdir=log
Bei einer Liste von Text, synthesis.py . Verwendung ist:
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
Beispiel test_list.txt:
Generative adversarial network or variational auto-encoder.
Once upon a time there was a dear little girl who was loved by every one who looked at her, but most of all by her grandmother, and there was nothing that she would not have given to the child.
A text-to-speech synthesis system typically consists of multiple stages, such as a text analysis frontend, an acoustic model and an audio synthesis module.
VCTK und NIKL werden zum Erstellen eines Multi-Sprecher-Modells unterstützt.
Da einige Audio -Proben in VCTK lange Stille aufweisen, die die Leistung beeinflussen, wird empfohlen, die Ausrichtung der Phoneme durchzuführen und die Stille gemäß VCTK_PREPROCESS zu entfernen.
Sobald Sie für jede Äußerung eine Phonemausrichtung haben, können Sie Merkmale extrahieren nach:
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
Nachdem Sie Daten vorbereitet haben, können Sie eine Multi-Sprecher-Version von DeepVoice3 trainieren von:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
Wenn Sie das Erlernen der Einbettung aus einem anderen Datensatz wiederverwenden möchten, können Sie dies stattdessen tun, um:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
--load-embedding=20171213_deepvoice3_checkpoint_step000210000.pth
Dies kann die Trainingsgeschwindigkeit ein wenig verbessern.
Sie können aufgeräumte Audio-Proben in ../nikl_proprocoess erhalten. Details finden Sie hier.
Sobald Nikl Corpus von der Vorverarbeitung verwendet werden kann, können Sie Funktionen extrahieren nach:
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
Nachdem Sie Daten vorbereitet haben, können Sie eine Multi-Sprecher-Version von DeepVoice3 trainieren von:
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
Wenn Sie nur sehr begrenzte Daten haben, können Sie in Betracht ziehen, um vorausgebildetes Feinschaltmodell auszuprobieren. Beispielsweise können Sie es mit dem vorgeborenen Modell auf LJSpeech an Daten des VCTK-Sprechers p225 (30 Minuten) durch den folgenden Befehl anpassen:
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk_adaptation
--preset=presets/deepvoice3_ljspeech.json
--log-event-path=log/deepvoice3_vctk_adaptation
--restore-parts="20171213_deepvoice3_checkpoint_step000210000.pth"
--speaker-id=0
Nach meiner Erfahrung kann es sehr schnell angemessene Sprachqualität erhalten, anstatt das Modell von Grund auf neu zu trainieren.
Es werden oben zwei wichtige Optionen verwendet:
--restore-parts=<N> : Es gibt an, wo Modellparameter geladen werden sollen. Die Unterschiede von der Option --checkpoint=<N> sind 1) --restore-parts=<N> ignoriert alle ungültigen Parameter, während --checkpoint=<N> nicht. 2) --restore-parts=<N> Sagen Sie Trainer, er solle von 0 Schritt starten, während --checkpoint=<N> den Trainer aufweisen soll, vom letzten Schritt fortzufahren. --checkpoint=<N> sollte in Ordnung sein, wenn Sie genau das gleiche Modell verwenden und weiter trainieren, aber es wäre nützlich, wenn Sie Ihre Modellarchitektur anpassen und Vorteile eines vorgebliebenen Modells nutzen möchten.--speaker-id=<N> : Es gibt an, welcher Datensprecher für das Training verwendet wird. Dies sollte nur angegeben werden, wenn Sie einen Datensatz mit mehreren Sprechern verwenden. Für VCTK wird die Sprecher -ID in schrittweisen (0, 1, ..., 107) gemäß dem speaker_info.txt im Datensatz automatisch zugewiesen. Wenn Sie ein Modell mit mehreren Lautsprechern trainieren, funktioniert die Anpassung der Lautsprecher nur dann, wenn n_speakers identisch ist .
Dies kann je nach Backends für Matplotlib geschehen. Versuchen Sie, das Backend für Matplotlib zu wechseln, und prüfen Sie, ob es wie folgt funktioniert:
MPLBACKEND=Qt5Agg python train.py ${args...}
In #78 berichtete Engiecat, dass das Wechsel des Backends von Matplotlib von Tkinter (TKAGG) auf PYQT5 (qt5agg) das Problem behoben hat.
Ein Teil des Code wurde aus den folgenden Projekten angepasst:
Banner und Logo von @jaulhernandezi (#76) erstellt