IMS Toucan ist ein Toolkit für das Schulungssynthese der neuesten Text-zu-Sprache, die am Institut für natürliche Sprachverarbeitung (IMS) der Universität Stuttgart, Deutschland , offizielle Heimat des massiv mehrsprachigen Toucantts-Systems, entwickelt. Unser System ist schnell und kontrollierbar und erfordert keine Tonne Berechnung.

Wenn Sie dieses Repo nützlich finden, sollten Sie ihm einen Stern geben. Große Zahlen machen mich glücklich und sie sind sehr motivierend. Wenn Sie mich noch mehr motivieren möchten, können Sie sogar in Betracht ziehen, dieses Toolkit zu sponsern. Wir verwenden nur GitHub -Sponsoren dafür, es gibt Betrüger auf anderen Plattformen, die vorgeben, der Schöpfer zu sein. Lass sie dich nicht täuschen. Der Code und die Modelle sind absolut kostenlos und dank der großzügigen Unterstützung des Umarmungsgesichts haben wir sogar eine Instanz des Modells, das auf GPU kostenlos ausgeführt wird, damit jeder sie verwenden kann.
Schauen Sie sich unsere interaktive massiv-multi-linguale Demo über das umarmende Gesicht an?
Wir haben auch einen massiv mehrsprachigen TTS -Datensatz über das Umarmungsgesicht veröffentlicht?
Eine Liste unterstützter Sprachen finden Sie hier
Python 3.10 ist die empfohlene Version.
Um dieses Toolkit zu installieren, klonen Sie es auf die Maschine, die Sie verwenden möchten (sollte mindestens eine CUDA -fähige GPU haben, wenn Sie die Modelle auf dieser Maschine trainieren möchten. Für Inferenz benötigen Sie keine GPU).
Wenn Sie Linux verwenden, sollten Sie die folgenden Pakete installieren lassen oder diese mit APT-Get installieren, wenn Sie es nicht haben (bei den meisten Verteilungen, die sie vorinstalliert sind):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
Navigieren Sie zu dem Verzeichnis, das Sie geklont haben. Wir empfehlen, eine virtuelle Umgebung zu erstellen und zu aktivieren, um die grundlegenden Anforderungen zu installieren. Die folgenden Befehle fassen alles zusammen, was Sie unter Linux tun müssen. Wenn Sie Windows ausführen, muss die zweite Zeile geändert werden, schauen Sie sich bitte die Dokumentation von Venv an.
python -m venv <path_to_where_you_want_your_env_to_be>
source <path_to_where_you_want_your_env_to_be>/bin/activate
pip install --no-cache-dir -r requirements.txt
Führen Sie die zweite Zeile jedes Mal aus, wenn Sie das Tool erneut verwenden, um die virtuelle Umgebung erneut zu aktivieren, wenn Sie sich in der Zwischenzeit angemeldet haben. Um eine GPU zu verwenden, müssen Sie auf einer Linux -Maschine nichts anderes tun. Schauen Sie sich auf einem Windows-Computer die offizielle Pytorch-Website für den Installationsunternehmen an, das die GPU-Unterstützung ermöglicht.
Wenn Sie nicht möchten, dass die vorbereiteten und trainierten Modelle sowie die Cache -Dateien, die sich aus der Vorverarbeitung Ihrer Datensätze ergeben, in den Standardunterordnern gespeichert werden, können Sie entsprechende Verzeichnisse global festlegen, indem Sie Utility/storage_config.py für Ihre Anforderungen bearbeiten (der Pfad kann relativ zum Repository -Stammverzeichnis oder absolut sein).
Sie müssen keine vorbereiteten Modelle verwenden, aber es kann die Dinge enorm beschleunigen. Sie werden dank der Umarmung automatisch im laufenden Fliegen heruntergeladen, wenn sie benötigt werden? und insbesondere VB.
Espeak-ng ist eine optionale Voraussetzung, die in vielen Sprachen viele besondere Fälle behandelt. Es ist also gut zu haben.
In den meisten Linux -Umgebungen wird es bereits installiert. Wenn dies nicht der Fall ist, können Sie es durch einfaches Laufen installieren
apt-get install espeak-ng
Für Windows bieten sie auf ihrer GitHub -Release -Seite eine bequeme .msi -Installationendatei. Nach der Installation auf Nicht-Linux-Systemen müssen Sie auch der Phonemizer-Bibliothek mitteilen, wo Sie Ihre ESPEAK-Installation finden, indem Sie die Umgebungsvariable PHONEMIZER_ESPEAK_LIBRARY festlegen, die in diesem Problem erörtert wird.
Für Mac ist es leider viel komplizierter. Dank Sang Hyun Park ist hier eine Anleitung zum Installieren von MAC: Für M1-Macs ist die bequemste Methode, um ESPEAK-NG auf Ihrem System zu installieren, über einen MacPorts-Port von ESPEAK-NG. MacPorts selbst kann von der MacPorts -Website installiert werden, für die auch der Xcode von Apple erforderlich ist. Sobald Xcode und Macports installiert wurden, können Sie den Port von ESPEAK-NG über installieren
sudo port install espeak-ng
Wie in den Anweisungen für Windows-Installation angegeben, muss die ESPEAK-NG-Installation als Variable für die Phonemizer-Bibliothek festgelegt werden. Die Umgebungsvariable ist PHONEMIZER_ESPEAK_LIBRARY wie im oben verknüpften Github -Thread angegeben. Die ESPEAK-NG-Installationsdatei, auf die Sie diese Variable festlegen müssen, ist jedoch eine .dylib-Datei anstelle einer .dll-Datei auf dem Mac. Um die ESPEAK-NG-Bibliotheksdatei zu finden, können Sie port contents espeak-ng ausführen. Die spezifische Datei, nach der Sie suchen, heißt libespeak-ng.dylib .
Sie können Ihre trainierten Modelle oder die vorbereitete bereitgestellte Bereitstellung unter Verwendung der InferenceInterfaces/ToucanTTSInterface.py laden. Erstellen Sie einfach ein Objekt daraus mit dem ordnungsgemäßen Verzeichnishandle, in dem das Modell identifiziert wird, das Sie verwenden möchten. Der Rest sollte im Hintergrund funktionieren. Möglicherweise möchten Sie eine Spracheinbettung oder einen Lautsprecher -Einbettung mit den Funktionen SET_LAUGE und SET_speaker_embedding festlegen. Die meisten Dinge sollten selbsterklärend sein.
Ein Inferenzinterface enthält zwei Methoden, um Audio aus Text zu erstellen. Sie sind read_to_file und read_aloud .
Read_to_file nimmt als Eingabe eine Liste von Zeichenfolgen und einen Dateinamen ein. Es wird die Sätze in der Liste synthetisieren und sie mit einer kurzen Pause dazwischen verkettet und sie an den Filepath schreiben, den Sie als andere Argumentation liefern.
Read_Aloud nimmt nur eine Zeichenfolge, die sie dann in die Sprache umwandelt und sofort mit den Lautsprechern des Systems abgespielt wird. Wenn Sie die optionale Argumentansicht auf True festlegen, wird eine Visualisierung angezeigt, die Sie schließen müssen, damit das Programm fortgesetzt wird.
Ihre Verwendung wird in run_interactive_demo.py und run_text_to_file_reader.py demonstriert.
Es gibt einfache Skalierungsparameter, um die Dauer, die Varianz der Tonhöhenkurve und die Varianz der Energiekurve zu steuern. Sie können sie entweder im Code ändern, wenn Sie die interaktive Demo oder den Leser verwenden, oder Sie können sie einfach an die Schnittstelle weitergeben, wenn Sie sie in Ihrem eigenen Code verwenden.
Um die Sprache des Modells zu ändern und zu sehen, welche Sprachen in unserem vorbereiteten Modell verfügbar sind, sehen Sie sich die hier verknüpfte Liste an
Im Verzeichnis namens Utility befindet sich eine Datei namens path_to_transcript_dicts.py . In dieser Datei sollten Sie eine Funktion schreiben, die ein Wörterbuch zurückgibt, das alle absoluten Pfade für jede der Audiodateien in Ihrem Datensatz als Zeichenfolgen und die Texttranskriptionen der entsprechenden Audios als Werte enthält.
Gehen Sie dann zu den Verzeichnistrainingsinterfaces /Rezepten . Erstellen Sie dort eine Kopie der Datei finetuning_example_simple.py , wenn Sie nur in einem einzelnen Datensatz oder in einem einzelnen Datensatz oder finetuning_example_multilingual.py beendet werden möchten, wenn Sie mehrere Datensätze, potenziell sogar mehrere Sprachen, mit Fintune -Fülle beenden möchten. Wir werden diese Kopie als Referenz verwenden und nur die erforderlichen Änderungen vornehmen, um den neuen Datensatz zu verwenden. Suchen Sie die Aufrufe zur Funktion prepe_tts_corpus . Ersetzen Sie die dort verwendete Path_TO_TRANSCript_Dict durch die gerade erstellten (en). Ändern Sie dann den Namen des entsprechenden Cache -Verzeichnisses in etwas, das für den Datensatz sinnvoll ist. Achten Sie auch auf die Variable Save_dir , an der die Kontrollpunkte gespeichert werden. Dies ist ein Standardwert. Sie können sie überschreiben, wenn Sie die Pipeline später mit einem Befehlszeilenargument aufrufen, falls Sie von einem Kontrollpunkt aus fein abgeben und somit in ein anderes Verzeichnis speichern möchten. Ändern Sie schließlich das Lang- Argument bei der Erstellung des Datensatzes und im Aufruf zur Zugschleifenfunktion in die ISO 639-3-Sprach-ID, die Ihren Daten entspricht.
Die Argumente, die der Zugschleife in den Feckerbildern eingeräumt werden, sind für den Fall von Finetuning aus einem vorbereiteten Modell gedacht. Wenn Sie von Grund auf neu trainieren möchten, schauen Sie sich eine andere Pipeline an, die Toucantts im Namen enthält und sich die dort verwendeten Argumente ansehen.
Sobald dies abgeschlossen ist, sind wir fast fertig. Jetzt müssen wir sie nur für die Datei run_training_pipeline.py in der oberen Ebene zur Verfügung stellen. Importieren Sie in dieser Datei die Auslauffunktion aus der gerade erstellten Pipeline und geben Sie ihr einen aussagekräftigen Namen. Fügen Sie nun im Pipeline_Dict Ihre importierte Funktion als Wert hinzu und verwenden Sie als Schlüssel eine Abkürzung, die sinnvoll ist.
Sobald Sie ein Rezept gebaut haben, ist das Training super einfach:
python run_training_pipeline.py <shorthand of the pipeline>
Sie können die folgenden Argumente liefern, müssen aber nicht (obwohl Sie zumindest zumindest eine GPU -ID angeben sollten).
--gpu_id <ID of the GPU you wish to use, as displayed with nvidia-smi, default is cpu. If multiple GPUs are provided (comma separated), then distributed training will be used, but the script has to be started with torchrun.>
--resume_checkpoint <path to a checkpoint to load>
--resume (if this is present, the furthest checkpoint available will be loaded automatically)
--finetune (if this is present, the provided checkpoint will be fine-tuned on the data from this pipeline)
--model_save_dir <path to a directory where the checkpoints should be saved>
--wandb (if this is present, the logs will be synchronized to your weights&biases account, if you are logged in on the command line)
--wandb_resume_id <the id of the run you want to resume, if you are using weights&biases (you can find the id in the URL of the run)>
Für Multi-GPU-Schulungen müssen Sie mehrere GPU-IDs (Comma getrennt) liefern und das Skript mit Torchrun starten. Sie müssen auch die Anzahl der GPUs angeben. Dies muss mit der Anzahl der IDs übereinstimmen, die Sie zur Verfügung stellen. Vorsichtig: Torchrun ist mit NoHup unvereinbar! Verwenden Sie stattdessen TMUX, um das Skript auszuführen, nachdem Sie sich aus der Shell abgemeldet haben.
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
Nach jeder Epoche (oder alternativ nach bestimmten Stufenzahlen) werden einige Protokolle in die Konsole und auf die Website für Gewichte und Verzerrungen geschrieben, wenn Sie angemeldet sind und das Flag einstellen. Wenn Sie CUDA aus Speicherfehlern herausholen, müssen Sie die Batchsize in den Argumenten des Aufrufs zum Training_loop in der von Ihnen ausgeführten Pipeline verringern. Versuchen Sie, die Batchsize in kleinen Schritten zu verringern, bis Sie nicht mehr aus CUDA -Speicherfehlern herausholen.
Im Verzeichnis, das Sie zum Speichern angegeben haben, werden Checkpoint -Dateien und Spektrogrammvisualisierungsdaten angezeigt. Da die Kontrollpunkte ziemlich groß sind, werden nur die fünf neuesten aufbewahrt. Die Anzahl der Trainingsschritte hängt stark von den von Ihnen verwendeten Daten ab und darum, dass Sie von einem vorbereiteten Kontrollpunkt oder Training von Grund auf neu sind. Je weniger Daten Sie haben, desto weniger Schritte sollten Sie unternehmen, um einen möglichen Zusammenbruch zu verhindern. Wenn Sie früher aufhören möchten, töten Sie einfach den Prozess, da alles dämonisch ist, sollten alle Kinderprozesse damit sterben. Für den Fall, dass einige Geisterprozesse zurückgelassen sind, können Sie den folgenden Befehl verwenden, um sie zu finden und manuell zu töten.
fuser -v /dev/nvidia*
Immer wenn ein Kontrollpunkt gespeichert ist, wird auch eine komprimierte Version für Inferenz erstellt, die als Best.py bezeichnet wird
Hier sind einige Punkte, die von Benutzern erzogen wurden:
run_scorer.py finden.UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - Wir verwenden einen benutzerdefinierten Scheduler, und Torch glaubt fälschlicherweise, dass wir den Scheduler und den Optimierer in der falschen Reihenfolge anrufen. Ignoriere einfach diese Warnung, sie ist völlig bedeutungslos.WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - Eine weitere bedeutungslose Warnung. Wir verwenden Xformers eigentlich nicht selbst, es ist nur ein Teil der Abhängigkeiten einer unserer Abhängigkeiten, aber es wird an keinem Ort verwendet.The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - passiert nur unter Windows und betrifft nichts.WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - Wir haben keine Ahnung, warum Espeak diese Warnung ausgab, aber es scheint nichts zu beeinflussen, daher scheint es sicher zu ignorieren.NaN - Die Standard -Lernraten funktionieren auf sauberen Daten. Wenn Ihre Daten weniger sauber sind, verwenden Sie den Torschützen, um problematische Stichproben zu finden, oder reduzieren Sie die Lernrate. Das häufigste Problem ist, dass es in der Rede Pausen gibt, aber nichts, was im Text auf sie hinweist. Aus diesem Grund ist die ASR -Korpora, die Interpunktion auslassen, normalerweise schwer für TTs zu verwenden. Die grundlegenden Pytorch-Module von Fastspeech 2 und GST stammen von ESPNET, den Pytorch-Modulen von Hifi -gan stammen aus dem Parallelwavegan-Repository. Einige Module, die sich auf das in Matchatts beschriebene Postnetz beziehen, stammen aus der offiziellen Matchatts -Codebasis und einige stammen aus der Stabletts -Codebasis. Für die Konvertierung von Graphem zu Phonem sind wir auf das oben erwähnte ESPEAK-NG sowie auf das Transphone angewiesen. Wir verwenden CCODEC, einen neuronalen Audio -Codec als Zwischendarstellung zum Zwischenspeichern der Zugdaten, um Platz zu sparen.
@inproceedings{lux2021toucan,
year = 2021,
title = {{The IMS Toucan system for the Blizzard Challenge 2021}},
author = {Florian Lux and Julia Koch and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2022laml,
year = 2022,
title = {{Language-Agnostic Meta-Learning for Low-Resource Text-to-Speech with Articulatory Features}},
author = {Florian Lux and Ngoc Thang Vu},
booktitle = {ACL}
}
@inproceedings{lux2022cloning,
year = 2022,
title = {{Exact Prosody Cloning in Zero-Shot Multispeaker Text-to-Speech}},
author = {Lux, Florian and Koch, Julia and Vu, Ngoc Thang},
booktitle = {SLT},
publisher = {IEEE}
}
@inproceedings{lux2022lrms,
year = 2022,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Julia Koch and Ngoc Thang Vu},
booktitle = {AACL}
}
@inproceedings{lux2023controllable,
year = 2023,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Pascal Tilli and Sarina Meyer and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}
@inproceedings{lux2023blizzard,
year = 2023,
title = {{The IMS Toucan System for the Blizzard Challenge 2023}},
author = {Florian Lux and Julia Koch and Sarina Meyer and Thomas Bott and Nadja Schauffler and Pavel Denisov and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2024massive,
year = 2024,
title = {{Meta Learning Text-to-Speech Synthesis in over 7000 Languages}},
author = {Florian Lux and Sarina Meyer and Lyonel Behringer and Frank Zalkow and Phat Do and Matt Coler and Emanuël A. P. Habets and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}