Hinweis : Dies ist die Entwicklungsversion. Wenn Sie eine stabile Version benötigen, lesen Sie bitte den v0.1.1.
Ziel des Repositorys ist es, eine Implementierung des Wellenet -Vokoders bereitzustellen, der hochwertige Redenproben von Rohes erzeugen kann, die auf sprachlichen oder akustischen Merkmalen bedingt sind.
Audio -Samples finden Sie unter https://r9y9.github.io/wavenet_vocoder/.
Ein Notizbuch soll auf https://colab.research.google.com ausgeführt werden.
Hinweis : Dies ist selbst kein Text-to-Speech-Modell (TTS). Mit einem hier bereitgestellten Modell können Sie die Wellenform mit einem MEL-Spektrogramm und nicht einem rohen Text synthetisieren. Sie benötigen ein Melspektrogramm-Vorhersagemodell (wie Tacotron2), um die vorgeborenen Modelle für TTs zu verwenden.
HINWEIS : Was das vorbereitete Modell für LJSpeech betrifft, wurde das Modell mehrmals fein abgestimmt und für insgesamt mehr als 1000.000 Schritte trainiert. Bitte beachten Sie die Probleme ( #1, #75, #45), um zu wissen, wie das Modell geschult wurde.
| Modell URL | Daten | HYPER -Parameter URL | Git Commit | Schritte |
|---|---|---|---|---|
| Link | Ljspeech | Link | 2092a64 | 1000k ~ Schritte |
| Link | CMU Arctic | Link | B1A1076 | 740k Schritte |
Um vorgeborene Modelle zu verwenden, überprüfen Sie zunächst das oben angegebene spezifische Git-Commit. dh,,
git checkout ${commit_hash}
Und folgt dann "Synthese von einem Checkpoint" -Abschnitt im Readme. Beachten Sie, dass die alte Version von synthesis.py möglicherweise nicht akzeptiert --preset=<json> Parameter, und Sie müssen möglicherweise hparams.py gemäß der PREISET (JSON) -Datei (JSON) ändern.
Sie könnten zum Beispiel versuchen:
# Assuming you have downloaded LJSpeech-1.1 at ~/data/LJSpeech-1.1
# pretrained model (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# hparams (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech
--preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
--conditional=./data/ljspeech/ljspeech-mel-00001.npy
20180510_mixture_lj_checkpoint_step000320000_ema.pth
generated
Sie finden eine generierte WAV -Datei im generated Verzeichnis. Frage mich, wie es funktioniert? Dann schauen Sie sich Code an :)
Das Repository besteht aus 1) Pytorch-Bibliothek, 2) Befehlszeilen-Tools und 3) Rezepten im ESPNET-Stil. Der erste ist eine Pytorch -Bibliothek, die Wavanet -Funktionalität bereitstellt. Der zweite ist eine Reihe von Tools zum Ausführen von Wellenet -Training/-inferenz, Datenverarbeitung usw. Das letzte ist die reproduzierbaren Rezepte, die die Wellenet -Bibliothek und die Hilfswerkzeuge kombinieren. Bitte schauen Sie sich sie je nach Ihrem Zweck an. Wenn Sie Ihr Wellenet auf Ihrem Datensatz erstellen möchten (ich denke, dies ist der wahrscheinlichste Fall), ist das Rezept für Sie der Weg.
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
Wenn Sie nur den Bibliotheksteil benötigen, können Sie ihn von PYPI installieren:
pip install wavenet_vocoder
Das Repository bietet Rezepte im Kaldi-Stil, um Experimente reproduzierbar und leicht überschaubar zu machen. Verfügbare Rezepte sind wie folgt:
mulaw256 : Wellenet, das die kategoriale Ausgangsverteilung verwendet. Der Eingang ist 8-Bit-Mulaw-quantisierte Wellenform.mol : Mischung aus Logistik (Mol) -Wavenet. Der Eingang ist 16-Bit-RAW-Audio.gaussian : Ein-Gauß-Wavenet (auch bekannt als Lehrerin Wavenet of Clarinet). Der Eingang ist 16-Bit-RAW-Audio. Das gesamte Rezept wurde run.sh , das alle Schritte zur Durchführung von Wellenettraining/-inferenz einschließlich Datenvorverarbeitung angibt. Weitere Informationen finden Sie im EGS -Verzeichnis run.sh im EGS -Verzeichnis.
Hinweis : Die globale Konditionierung für Multi-Sprecher-Wavenet wird in den oben genannten Rezepten nicht unterstützt (es sollte jedoch nicht schwierig zu implementieren sein). Bitte überprüfen Sie v0.1.12 für die Funktion. Wenn Sie die Funktion wirklich benötigen, stellen Sie bitte ein Problem an.
Die Rezepte sind so konzipiert, dass man sie für jeden Datensatz verwenden kann. Um Rezepte auf Ihren eigenen Datensatz anzuwenden, müssen Sie alle WAV -Dateien in ein einzelnes flaches Verzeichnis einfügen. dh,,
> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav
Das war's! Der letzte Schritt besteht darin, db_root in Run.sh zu ändern oder db_root als Befehlszeile für run.sh.
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
Ein Rezept besteht normalerweise aus mehreren Schritten. Es wird dringend empfohlen, das Rezept Schritt für Schritt auszuführen, um zu verstehen, wie es zum ersten Mal funktioniert. Geben Sie dazu stage und stop_stage wie folgt an:
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
In typischen Situationen müssten Sie CUDA -Geräte für den Trainingsschritt explizit angeben.
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
Befehlszeilen -Tools werden mit DOCOPT geschrieben. Sehen Sie sich jede DocString für die grundlegenden Verwendungen an.
Dump -Hyperparameter zu einer JSON -Datei.
Verwendung:
python tojson.py --hparams="parameters you want to override" <output_json_path>
Verwendung:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
Hinweis: Für das Multi -GPU -Training haben Sie besser sicher, dass batch_size % num_gpu == 0
Verwendung:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
Bei einem Directoy, der lokale Konditionierungsmerkmale enthält, synthetisieren Sie Wellenformen für sie.
Verwendung:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
Optionen:
--num-utterances=<N> : Anzahl der zu generierten Äußerungen. Wenn nicht angegeben, generieren Sie alle Äußerungen. Dies ist nützlich für das Debuggen. Beachten Sie : Dies funktioniert jetzt wahrscheinlich nicht. Bitte verwenden Sie stattdessen evaluate.py.
Synthese -Wellenform ergeben eine Konditionierungsfunktion.
Verwendung:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
Wichtige Optionen:
--conditional=<path> : (für bedingtes Wellenet erforderlich) Pfad der lokalen bedingten Merkmale (.npy). Wenn dies angegeben ist, wird die Anzahl der Zeitschritte zur Erzeugung durch die Größe des bedingten Merkmals bestimmt.Beachten Sie : Dies funktioniert jetzt wahrscheinlich nicht. Bitte überprüfen Sie v0.1.1 für die Arbeitsversion.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
Sie müssen die globale und lokale Konditionierung deaktivieren, indem Sie gin_channels und cin_channels auf negative Werte einstellen.
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
Beachten Sie : Dies funktioniert jetzt wahrscheinlich nicht. Bitte überprüfen Sie v0.1.1 für die Arbeitsversion.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
Protokolle werden standardmäßig in ./log -Verzeichnis abgeladen. Sie können Protokolle per Tensorboard überwachen:
tensorboard --logdir=log
Vielen Dank!! Wenn Sie eine neue finden, senden Sie bitte eine PR.