Dieses Repository enthält eine Dockerfile, die den Pytorch 21.02-PY3 NGC-Container erweitert und einige Abhängigkeiten enthält. Um Ihren eigenen Container zu erstellen, wählen Sie einen Pytorch -Container aus Nvidia Pytorch -Containerversionen und erstellen Sie eine Dockerfile wie das folgende Format:
FROM nvcr . io / nvidia / pytorch : 21.02 - py3
WORKDIR / path / to / working / directory / text2speech /
COPY requirements . txt .
RUN pip install - r requirements . txt Gehen Sie zum /path/to/working/directory/text2speech/docker
$ docker build - - no - cache - t torcht2s .
$ docker run - it - - rm - - gpus all - p 2222 : 8888 - v / path / to / working / directory / text2speech : / path / to / working / directory / text2speech torcht2s$ python - m ipykernel install - - user - - name = torcht2s
$ jupyter notebook - - ip = 0.0 . 0.0 - - port = 8888 - - no - browser - - allow - roothttp://127.0.0.1:2222/?token=${TOKEN} und geben Sie Ihr in Ihrem Terminal angegebener Token ein.Um Sprachsynthesemodelle zu trainieren, sind Sounds und Phonemsequenzen, die Sounds ausdrücken, benötigt. Das ist wyh im ersten Schritt, der Eingabtext ist in eine Liste von Symbolen codiert. In dieser Studie werden wir türkische Charaktere und Phoneme als Symbole verwenden. Da Türkisch eine phonetische Sprache ist, werden Wörter so ausgedrückt, wie sie gelesen werden. Das heißt, Zeichensequenzen sind auf türkisch konstruierte Wörter. In nicht-phonetischen Sprachen wie Englisch können Worte mit Phonemen ausgedrückt werden. Um die türkische Sprache mit englischen Daten zu synthetisieren, müssen die Wörter im englischen Datensatz zuerst phonetisch in türkisch übersetzt werden.
valid_symbols = [ '1' , '1:' , '2' , '2:' , '5' , 'a' , 'a:' , 'b' , 'c' , 'd' , 'dZ' , 'e' , 'e:' , 'f' , 'g' , 'gj' , 'h' , 'i' , 'i:' , 'j' ,
'k' , 'l' , 'm' , 'n' , 'N' , 'o' , 'o:' , 'p' , 'r' , 's' , 'S' , 't' , 'tS' , 'u' , 'u' , 'v' , 'y' , 'y:' , 'z' , 'Z' ]Um das Training zu beschleunigen, können diese während des Vorverarbeitungsschritts generiert und während des Trainings direkt von der Festplatte gelesen werden. Befolgen Sie diese Schritte, um benutzerdefinierten Datensatz zu verwenden.
text2speech/Fastpitch/dataset/ Speicherort vor. Diese Filelisten sollten eine einzige Äußerung pro Zeile auflisten als: < audio file path > | < transcript >text2speech/Fastpitch/data_preperation.ipynb zu berechnen $ python prepare_dataset . py
- - wav - text - filelists dataset / tts_data . txt
- - n - workers 16
- - batch - size 1
- - dataset - path dataset
- - extract - pitch
- - f0 - method pyin
- - extract - mels create_picth_text_file(manifest_path) von text2speech/Fastpitch/data_preperation.ipynb Diese Filelisten sollten eine einzige Äußerung pro Zeile als: < mel or wav file path > | < pitch file path > | < text > | < speaker_id >Der vollständige Datensatz hat die folgende Struktur:
. / dataset
├── mels
├── pitch
├── wavs
├── tts_data . txt # train + val
├── tts_data_train . txt
├── tts_data_val . txt
├── tts_pitch_data . txt # train + val
├── tts_pitch_data_train . txt
├── tts_pitch_data_val . txt Das Training erzeugt ein FastPitch-Modell, das Melspektrogramme aus Rohtext erzeugen kann. Es wird zusammen mit einer Reihe von Intermediate -Checkpoints als einzelne .pt -Checkpoint -Datei serialisiert.
$ python train . py - - cuda - - amp - - p - arpabet 1.0 - - dataset - path dataset
- - output saved_fastpicth_models /
- - training - files dataset / tts_pitch_data_train . txt
- - validation - files dataset / tts_pitch_data_val . txt
- - epochs 1000 - - learning - rate 0.001 - - batch - size 32
- - load - pitch - from - diskDer letzte Schritt besteht darin, das Spektrogramm in die Wellenform umzuwandeln. Der Prozess zur Generierung von Sprache aus Spektrogram wird auch als Vocoder bezeichnet.
Einige Melspektogrammgeneratoren sind anfällig für Modellverzerrungen. Da sich die Spektrogramme von den tatsächlichen Daten unterscheiden, auf denen Hifi -gan trainiert wurde, kann die Qualität des generierten Audios leiden. Um dieses Problem zu überwinden, kann ein Hifi-Gan-Modell mit den Ausgaben eines bestimmten Melspektrogrammgenerators fein abgestimmt werden, um sich an diese Verzerrung anzupassen. In diesem Abschnitt führen wir eine Feinabstimmung für FastPitch-Ausgänge durch.
text2speech/Hifigan/data/pretrained_fastpicth_model/ Verzeichnis.tts_pitch_data.txt im text2speech/Hifigan/data/ verzeichnis. $ python extract_mels . py - - cuda
- o data / mels - fastpitch - tr22khz
- - dataset - path / text2speech / Fastpitch / dataset
- - dataset - files data / tts_pitch_data . txt # train + val
- - load - pitch - from - disk
- - checkpoint - path data / pretrained_fastpicth_model / FastPitch_checkpoint . pt - bs 16 Melspektrogramme sollten nun im Verzeichnis text2speech/Hifigan/data/mels-fastpitch-tr22khz hergestellt werden. Das Feinabstimmungsskript lädt ein vorhandenes Hifi-Gan-Modell und führt mehrere Epochen des Trainings mit unter Verwendung von Spektrogrammen aus, die im letzten Schritt generiert wurden.
In diesem Schritt wird ein weiteres .pt Hifi-Gan-Modell-Checkpoint-Datei erzeugt, das mit dem jeweiligen FastPitch-Modell abgestimmt ist.
results im text2speech/Hifigan -Verzeichnis. $ nohup python train . py - - cuda - - output / results / hifigan_tr22khz
- - epochs 1000 - - dataset_path / Fastpitch / dataset
- - input_mels_dir / data / mels - fastpitch - tr22khz
- - training_files / Fastpitch / dataset / tts_data . txt
- - validation_files / Fastpitch / dataset / tts_data . txt
- - fine_tuning - - fine_tune_lr_factor 3 - - batch_size 16
- - learning_rate 0.0003 - - lr_decay 0.9998 - - validation_interval 10 > log . txt$ tail - f log . txt Führen Sie den folgenden Befehl aus, um Audio aus Rohtext mit Melspektrogrammgenerator zu synthetisieren
python inference . py - - cuda
- - hifigan / Hifigan / results / hifigan_tr22khz / hifigan_gen_checkpoint . pt
- - fastpitch / Fastpitch / saved_fastpicth_models / FastPitch_checkpoint . pt
- i test_text . txt
- o wavs / Die Rede wird aus einer Datei generiert, die mit dem Argument -i übergeben wurde. Der Ausgangs -Audio wird im Pfad gespeichert, der durch das Argument -o angegeben ist.