L'IMS Toucan est une boîte à outils pour la formation, l'utilisation et l'enseignement de la synthèse de texte à la carte et de la technologie, développée à l' Institut de traitement du langage naturel (IMS), Université de Stuttgart, Allemagne , domicile officiel du système de Toucantts massivement multilingue. Notre système est rapide, contrôlable et ne nécessite pas une tonne de calcul.

Si vous trouvez ce dépôt utile, envisagez de lui donner une étoile. Un grand nombre me rend heureux et ils sont très motivants. Si vous voulez me motiver encore plus, vous pouvez même envisager de parrainer cette boîte à outils. Nous n'utilisons que des sponsors GitHub pour cela, il y a des escrocs sur d'autres plateformes qui prétendent être le créateur. Ne les laissez pas vous tromper. Le code et les modèles sont absolument gratuits, et grâce au support généreux de l'étreinte Face ?, Nous avons même une instance du modèle exécuté gratuitement sur GPU pour que quiconque puisse utiliser.
Découvrez notre démo interactive massivement multi-lingues sur le visage étreint?
Nous avons également publié un ensemble de données TTS massivement multilingue sur la face de l'étreinte?
Une liste de langues prises en charge peut être trouvée ici
Python 3.10 est la version recommandée.
Pour installer cette boîte à outils, clonez-la sur la machine sur laquelle vous souhaitez l'utiliser (devrait avoir au moins un GPU compatible CUDA si vous avez l'intention de former des modèles sur cette machine. Pour une inférence, vous n'avez pas besoin d'un GPU).
Si vous utilisez Linux, vous devriez faire installer les packages suivants ou les installer avec APT-GET si vous ne l'avez pas fait (sur la plupart des distributions, ils sont préinstallés):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
Accédez au répertoire que vous avez cloné. Nous vous recommandons de créer et d'activer un environnement virtuel pour installer les exigences de base. Les commandes ci-dessous résument tout ce que vous devez faire sous Linux. Si vous exécutez des fenêtres, la deuxième ligne doit être modifiée, veuillez consulter la documentation Venv.
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
Exécutez la deuxième ligne à chaque fois que vous recommentez à utiliser à nouveau l'outil pour activer à nouveau l'environnement virtuel, si vous êtes connecté entre-temps. Pour utiliser un GPU, vous n'avez rien à faire d'autre sur une machine Linux. Sur une machine Windows, jetez un œil au site Web officiel de Pytorch pour la commande d'installation qui permet la prise en charge du GPU.
Si vous ne voulez pas que les modèles pré-entraînés et formés ainsi que les fichiers de cache résultant de la prétraitement de vos ensembles de données soient stockés dans les sous-dossiers par défaut, vous pouvez définir les répertoires correspondants à l'échelle mondiale en modifiant Utility/storage_config.py pour répondre à vos besoins (le chemin peut être relatif au répertoire des racines du référentiel ou absolu).
Vous n'avez pas besoin d'utiliser des modèles pré-entraînés, mais cela peut accélérer énormément les choses. Ils seront téléchargés automatiquement à la volée lorsqu'ils seront nécessaires, grâce à un visage étreint? et VB en particulier.
ESPEK-NG est une exigence facultative, qui gère beaucoup de cas spéciaux dans de nombreuses langues, donc c'est bien d'avoir.
Dans la plupart des environnements Linux , il sera déjà installé, et si ce n'est pas le cas, et vous avez les droits suffisants, vous pouvez l'installer en exécutant simplement
apt-get install espeak-ng
Pour Windows , ils fournissent un fichier d'installation .msi pratique sur leur page de version GitHub. Après l'installation sur les systèmes non Linux, vous devrez également dire à la bibliothèque de phonémizer où trouver votre installation EspEak en définissant la variable d'environnement PHONEMIZER_ESPEAK_LIBRARY , qui est discutée dans ce numéro.
Pour Mac, c'est malheureusement beaucoup plus compliqué. Grâce à Sang Hyun Park, voici un guide pour l'installer sur Mac: Pour M1 Mac, la méthode la plus pratique pour installer Espaker-NG sur votre système est via un port Macports de Espaker-NG. Macports lui-même peut être installé à partir du site Web de Macports, qui nécessite également Xcode d'Apple. Une fois que Xcode et Macport ont été installés, vous pouvez installer le port de Espaker-NG via
sudo port install espeak-ng
Comme indiqué dans les instructions d'installation de Windows, l'installation ESPEAK-NG devra être définie en tant que variable pour la bibliothèque de phonizer. La variable d'environnement est PHONEMIZER_ESPEAK_LIBRARY comme indiqué dans le thread github lié ci-dessus. Cependant, le fichier d'installation ESPEAK-NG sur lequel vous devez définir cette variable est un fichier .dyLib plutôt qu'un fichier .dll sur Mac. Afin de localiser le fichier de bibliothèque ESPEAK-NG, vous pouvez exécuter port contents espeak-ng . Le fichier spécifique que vous recherchez s'appelle libespeak-ng.dylib .
Vous pouvez charger vos modèles qualifiés, ou le fournis pré-entraîné, en utilisant les InferenceInterfaces/ToucanTTSInterface.py . Créez simplement un objet à partir de celui-ci avec la poignée du répertoire approprié identifiant le modèle que vous souhaitez utiliser. Le reste doit fonctionner en arrière-plan. Vous voudrez peut-être définir un langage incorporant ou un haut-parleur incorporant à l'aide des fonctions set_language et set_speaker_embedding . La plupart des choses devraient être explicites.
Une conférence INFERGETFACE contient deux méthodes pour créer l'audio à partir du texte. Ils sont read_to_file et read_oud .
read_to_file prend en entrée une liste de chaînes et un nom de fichier. Il synthétisera les phrases de la liste et les concaténera avec une courte pause entre les deux et les écrivent sur le fichier que vous fournissez comme l'autre argument.
read_aloud prend juste une chaîne, qu'il se convertira ensuite en parole et jouera immédiatement en utilisant les haut-parleurs du système. Si vous définissez la vue d'argument facultative sur true , une visualisation apparaîtra, que vous devez fermer pour que le programme continue.
Leur utilisation est démontrée dans run_interactive_demo.py et run_text_to_file_reader.py .
Il existe de simples paramètres de mise à l'échelle pour contrôler la durée, la variance de la courbe de tangage et la variance de la courbe d'énergie. Vous pouvez soit les modifier dans le code lorsque vous utilisez la démo interactive ou le lecteur, soit vous pouvez simplement les transmettre à l'interface lorsque vous l'utilisez dans votre propre code.
Pour changer la langue du modèle et voir quelles langues sont disponibles dans notre modèle pré-entraîné, jetez un œil à la liste liée ici
Dans le répertoire appelé utilitaire , il existe un fichier appelé path_to_transcript_dicts.py . Dans ce fichier, vous devez écrire une fonction qui renvoie un dictionnaire qui a tous les chemins absolus vers chacun des fichiers audio de votre ensemble de données comme des chaînes que les clés et les transcriptions textuelles de l'audios correspondant comme valeurs.
Accédez ensuite aux interfaces / recettes de formation du répertoire. Là, faites une copie du fichier finetuning_example_simple.py si vous voulez simplement Finetune sur un seul ensemble de données ou finetuning_example_multilingual.py si vous souhaitez finertune sur plusieurs ensembles de données, potentiellement même plusieurs langues. Nous utiliserons cette copie comme référence et apporterons uniquement les modifications nécessaires pour utiliser le nouvel ensemble de données. Trouvez les appels à la fonction prépare_tts_corpus . Remplacez le path_to_transcript_dict utilisé par celui que vous venez de créer. Changez ensuite le nom du répertoire de cache correspondant en quelque chose qui a du sens pour l'ensemble de données. Recherchez également la variable Save_Dir , où les points de contrôle seront enregistrés. Il s'agit d'une valeur par défaut, vous pouvez l'écraser lorsque vous appelez le pipeline à l'aide d'un argument de ligne de commande, au cas où vous souhaitez affiner à partir d'un point de contrôle et donc enregistrer dans un autre répertoire. Enfin, modifiez l'argument Lang dans la création de l'ensemble de données et dans la fonction de boucle de train à l'appel à l'ID de langue ISO 639-3 qui correspond à vos données.
Les arguments qui sont donnés à la boucle de train dans les exemples de finetuning sont destinés au cas de la finetuning à partir d'un modèle pré-entraîné. Si vous voulez vous entraîner à partir de zéro, jetez un œil à un autre pipeline qui a des toucants en son nom et regardez les arguments utilisés là-bas.
Une fois cela terminé, nous avons presque terminé, nous avons maintenant besoin de le mettre à la disposition du fichier run_training_pipeline.py au niveau supérieur. Dans ledit fichier, importez la fonction d'exécution du pipeline que vous venez de créer et lui donnez un nom significatif. Maintenant, dans le pipeline_dict , ajoutez votre fonction importée comme valeur et utilisez comme clés un sténographie qui a du sens.
Une fois que vous avez une recette construite, l'entraînement est super facile:
python run_training_pipeline.py <shorthand of the pipeline>
Vous pouvez fournir l'un des arguments suivants, mais vous n'avez pas à le faire (bien que pour la formation, vous devez certainement spécifier au moins un ID de GPU).
--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)>
Pour une formation multi-GPU, vous devez fournir plusieurs ID GPU (séparés par virgules) et démarrer le script avec Torchrun. Vous devez également spécifier le nombre de GPU. Cela doit correspondre au nombre d'ID que vous fournissez. Attention: Torchrun est incompatible avec Nohup! Utilisez TMUX à la place pour maintenir le script en cours d'exécution après la connexion du shell.
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
Après chaque époque (ou alternativement après certains comptes d'étapes), certains journaux seront écrits sur la console et sur le site Web des poids et biais, si vous êtes connecté et définissez le drapeau. Si vous tirez CUDA des erreurs de mémoire, vous devez diminuer le bac à lot dans les arguments de l'appel à la formation_loop dans le pipeline que vous utilisez. Essayez de diminuer le lot en petites étapes jusqu'à ce que vous ne soyez plus en train de sortir des erreurs de mémoire CUDA.
Dans le répertoire que vous avez spécifié pour l'enregistrement, les fichiers de point de contrôle et les données de visualisation du spectrogramme apparaîtront. Étant donné que les points de contrôle sont assez grands, seuls les cinq plus récents seront conservés. La quantité d'étapes de formation dépend fortement des données que vous utilisez et si vous êtes en train de vous faire un point de contrôle pré-élaboré ou une formation à partir de zéro. Moins vous avez de données, moins les étapes devraient prendre pour éviter un éventuel effondrement. Si vous voulez vous arrêter plus tôt, tuez le processus, car tout est démoniaque, tous les processus d'enfants devraient mourir avec. Dans le cas où il reste des processus fantômes, vous pouvez utiliser la commande suivante pour les trouver et les tuer manuellement.
fuser -v /dev/nvidia*
Chaque fois qu'un point de contrôle est enregistré, une version compressée qui peut être utilisée pour l'inférence est également créée, qui est nommée Best.py
Voici quelques points soulevés par les utilisateurs:
run_scorer.py .UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - Nous utilisons un planificateur personnalisé et Torch pense à tort que nous appelons le planificateur et l'optimiseur dans le mauvais ordre. Ignorez simplement cet avertissement, il n'a pas de sens.WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - Un autre avertissement dénué de sens. En fait, nous n'utilisons pas les xformateurs nous-mêmes, il ne fait que partie des dépendances de l'une de nos dépendances, mais elle n'est utilisée à aucun endroit.The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - arrive juste sous Windows et n'affecte rien.WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - Nous ne savons pas pourquoi Espeak a commencé à donner cet avertissement, mais cela ne semble affecter rien, il semble donc sûr d'ignorer.NaN - les taux d'apprentissage par défaut fonctionnent sur des données propres. Si vos données sont moins propres, essayez d'utiliser le marqueur pour trouver des échantillons problématiques ou réduisez le taux d'apprentissage. Le problème le plus courant est qu'il y a des pauses dans le discours, mais rien qui ne les laisse entendre dans le texte. C'est pourquoi les corpus ASR, qui laissent la ponctuation, sont généralement difficiles à utiliser pour les TT. Les modules Pytorch de base de FastSpeech 2 et GST sont tirés de ESPNET, les modules Pytorch de HiFI-AG sont tirés du référentiel parallèlewavegan. Certains modules liés au PostNet basé sur ConditionalFlowmatching, comme indiqué dans Matchatts, sont tirés de la base de code Matchatts officiels et certains sont tirés de la base de code Stabletts. Pour la conversion de graphème à phonème, nous nous appuyons sur l'EspEak-NG susmentionné ainsi que sur les transphones. Nous utilisons Encodec, un codec audio neuronal comme représentation intermédiaire pour la mise en cache des données de train pour économiser de l'espace.
@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}
}