IMS Toucan是一种用于培训,使用和教学的工具包,该工具包在德国斯图加特大学的自然语言处理研究所(IMS)在德国斯图加特大学(IMS)中开发,这是大量多语言Toucantts系统的官方住所。我们的系统快速,可控,不需要大量的计算。

如果您觉得此存储库有用,请考虑给它星星。大量使我开心,他们非常激励。如果您想更多地激励我,甚至可以考虑赞助此工具包。我们只为此使用GitHub赞助商,其他平台上有骗子假装是创造者。不要让他们欺骗你。代码和模型是绝对免费的,由于拥抱面孔的慷慨支持?我们甚至有一个在GPU上运行的模型实例,任何人都可以使用。
在拥抱脸上查看我们的互动性大规模语言演示?
我们还在拥抱面孔上发布了一个大量的多语言TTS数据集?
可以在此处找到支持语言的列表
Python 3.10是推荐版本。
要安装此工具包,请将其克隆到要使用的计算机上(如果您打算在该机器上训练型号,则至少应具有一个CUDA启用GPU。对于推断,您不需要GPU)。
如果您使用的是Linux,则应安装以下软件包,或者如果没有安装,则应使用APT-GET安装(大多数发行版,它们是预安装的):
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
导航到您克隆的目录。我们建议创建和激活虚拟环境,以将基本要求安装到中。下面的命令总结了您在Linux下需要做的一切。如果您正在运行Windows,则需要更改第二行,请查看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
如果您在此期间登录时,每次您再次使用该工具再次激活虚拟环境时,请运行第二行。要使用GPU,您无需在Linux机器上做其他事情。在Windows机器上,请查看官方的Pytorch网站,以获取启用GPU支持的安装命令。
如果您不希望通过预处理数据集将数据集存储在默认子文件夹中而产生的缓存文件,也可以通过编辑Utility/storage_config.py来设置相应的目录,以适合您的需求(路径可以相对于reposority root Directory或“绝对”或“绝对”)。
您不需要使用预估计的模型,但是它可以大大加快速度。由于拥抱的脸,他们将在需要时自动下载它们?特别是VB。
Espeak-ng是一项可选要求,可以用多种语言处理许多特殊情况,因此可以使用。
在大多数Linux环境中,它已经安装了,如果不是,并且您拥有足够的权利,则可以通过运行来安装它
apt-get install espeak-ng
对于Windows ,它们在其GITHUB发布页面上提供了方便的.msi安装程序文件。在非Linux系统上安装后,您还需要通过设置PHONEMIZER_ESPEAK_LIBRARY环境变量来告诉PhoneMizer库在哪里可以找到您的ESPEAK安装,该变量在本期中进行了讨论。
对于Mac来说,不幸的是,这要复杂得多。多亏了Sang Hyun Park,这是在Mac上安装它的指南:对于M1 Mac,将ESPEAK-NG安装到系统上的最方便方法是通过Espeak-ng的Macports端口。 MacPorts本身可以从Macports网站安装,这也需要Apple的Xcode。安装Xcode和MacPorts后,您可以通过
sudo port install espeak-ng
如Windows安装说明中所述,需要将ESPEAK-NG安装设置为PhoneMizer库的变量。环境变量是上面链接的github线程中给出的PHONEMIZER_ESPEAK_LIBRARY 。但是,您需要将此变量设置为.dylib文件而不是Mac上的.dll文件。为了找到ESPEAK-NG库文件,您可以运行port contents espeak-ng 。您要查找的特定文件命名为libespeak-ng.dylib 。
您可以使用InferenceInterfaces/ToucanTTSInterface.py加载训练有素的型号,也可以使用训练有素的型号。只需使用适当的目录句柄从中创建一个对象,以识别要使用的模型。其余的应该在后台解决。您可能需要使用set_language和set_speaker_embedding函数设置语言嵌入或嵌入扬声器。大多数事情应该是不言自明的。
推理因包含两种从文本创建音频的方法。它们是read_to_to_file和read_aloud 。
READ_TO_FILE将字符串和文件名列表作为输入。它将综合列表中的句子,并将它们与之间的短暂停顿相连,并将其写入您作为另一个参数所提供的filepath。
Read_Aloud仅采用一个字符串,然后将其转换为语音并立即使用系统扬声器播放。如果将可选的参数视图设置为true ,则将弹出可视化,您需要关闭该程序才能继续。
它们的使用在run_interactive_demo.py和run_text_to_file_reader.py中演示。
有简单的缩放参数可以控制持续时间,音高曲线的方差和能量曲线的方差。您可以在使用交互式演示或读者时在代码中更改它们,也可以在使用自己的代码中使用它时简单地将它们传递到界面。
要更改模型的语言并查看我们验证的模型中有哪些语言,请查看此处链接的列表
在称为实用程序的目录中,有一个名为path_to_transcript_dicts.py的文件。在此文件中,您应该编写一个函数,该函数返回一个字典,该字典在数据集中的每个音频文件中都具有所有绝对路径,就像键一样字符串和相应音频的文本转录作为值。
然后转到Directory Traininginterfaces/配方。在那里,如果您只想在单个数据集或finetuning_example_multilingual.py上进行finetune,则在其中制作finetuning_example_simple.py的副本。我们将使用此副本作为参考,仅进行必要的更改以使用新数据集。查找呼叫(s)到prepar_tts_corpus函数。替换您刚创建的一个path_to_transcript_dict。然后将相应的缓存目录的名称更改为对数据集有意义的事物。还要注意变量save_dir ,这是将检查点保存到的地方。这是一个默认值,您可以在以后使用命令行参数调用管道时覆盖它,以防您要从检查点进行微调,从而将其保存到其他目录中。最后,将lang参数在创建数据集的创建和对火车循环函数的调用中更改为与您的数据匹配的ISO 639-3语言ID。
在固定示例中给出的火车循环的论点是针对预验证模型的固定的。如果您想从头开始训练,请查看以其名称具有Toucantts的不同管道,并查看那里使用的参数。
完成此操作后,我们几乎完成了,现在我们只需要在顶级的run_training_pipeline.py文件中使用它即可。在所述文件中,从您刚创建的管道中导入运行函数,并给它一个有意义的名称。现在,在pipeline_dict中,将导入的函数添加为值,并用作关键的速记。
建造食谱后,培训就非常容易:
python run_training_pipeline.py <shorthand of the pipeline>
您可以提供以下任何论点,但不必需要(尽管对于培训,您绝对应该指定至少一个GPU ID)。
--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)>
要进行多GPU培训,您必须提供多个GPU ID(分开逗号),并使用Torchrun启动脚本。您还必须指定GPU的数量。这必须匹配您提供的ID数量。小心:Torchrun与Nohup不相容!登录外壳后,使用tmux以保持脚本运行。
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
在每个时期(或在一定步骤计数之后)之后,如果您登录并设置标志,则将将一些日志写入控制台以及权重和偏见网站。如果您从内存错误中脱离了CUDA,则需要在您正在运行的管道中对训练_loop的呼叫参数中减少批处理。尝试以小步骤减少批处理,直到您不再摆脱CUDA内存错误。
在您指定要保存的目录中,将显示检查点文件和频谱图可视化数据。由于检查站很大,因此只有五个最新的检查站将保留。训练步骤的数量在很大程度上取决于您正在使用的数据以及您是从验证的检查站或从头开始培训的训练。您拥有的数据越少,您应采取的步骤越少,以防止可能崩溃。如果您想更早停止,只需杀死该过程,因为一切都是守护程序,所有的儿童过程都应该死。如果剩下一些鬼魂,您可以使用以下命令找到它们并手动杀死它们。
fuser -v /dev/nvidia*
每当保存检查点时,也可以创建可用于推断的压缩版本,该版本命名为Best.py.py
以下是用户提出的几点:
run_scorer.py 。UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - 我们使用一个自定义调度程序,并且火炬错误地认为我们以错误的顺序称为调度程序和优化器。只要忽略此警告,它就毫无意义。WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - 另一个毫无意义的警告。实际上,我们自己不使用Xformers,它只是我们依赖性之一的依赖关系的一部分,但是在任何地方都不使用它。The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - 只是在Windows下发生,不会影响任何事情。WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] - 我们不知道为什么Espeak开始发出此警告,但是它似乎并没有影响任何内容,因此似乎可以肯定地忽略。NaN默认学习率在干净的数据上起作用。如果您的数据不那么干净,请尝试使用得分手查找有问题的样本,或降低学习率。最常见的问题是演讲中存在暂停,但没有任何暗示在文本中。这就是为什么忽略标点符号的ASR Corpora通常很难用于TTS的原因。 FastSpeech 2和GST的基本pytorch模块取自ESPNET,Hifi-GAN的Pytorch模块取自ParallelWaveGAN存储库。一些与匹配中概述的基于条件的基于条件的邮政网络有关的模块是从官方Matchatts Codebase中获取的,有些是从Stabletts代码库中获取的。对于插本到频率的转换,我们依靠上述ESPEAK-NG以及跨电话。我们使用Eccodec(神经音频编解码器)作为中间表示,以缓存火车数据以节省空间。
@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}
}