在本文中,我们提出了Styletts 2,这是一种文本到语音(TTS)模型,该模型利用大型语音语言模型(SLM)利用样式扩散和对抗性训练来实现人级TTS合成。 Styletts 2通过将样式建模为通过扩散模型建模为潜在的随机变量,从而生成了最合适的文本样式,而无需参考语音,从而实现了有效的潜在扩散,同时受益于扩散模型提供的各种语音综合。此外,我们采用了大型的预训练的SLM,例如WAVLM,作为我们的新型可区分持续时间建模来进行端到端训练,从而改善了语音自然性。 STYLETTS 2超过了单扬声器LJSpeech数据集上的人类录音,并在MultiSpeaker VCTK数据集上匹配了以英语为母语的人。此外,当在库列茨数据集中接受培训时,我们的模型优于以前的公开模型,用于零摄像机的适应器。这项工作实现了单个和多言论扬声器数据集上的第一个人级TTS综合,展示了风格扩散和对对抗性训练的潜力。
论文:https://arxiv.org/abs/2306.07691
音频样本:https://styletts2.github.io/
在线演示:拥抱面孔(感谢@fakerybakery的精彩在线演示)
train_second.py的DDP(加速器) (我已经尽力解决此问题,但没有成功,因此,如果您愿意提供帮助,请参阅#7) git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2pip install -r requirements.txt在Windows上添加:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -U还要安装Phonemizer并提及如果要运行演示:
pip install phonemizer
sudo apt-get install espeak-ng第一阶段训练:
accelerate launch train_first.py --config_path ./Configs/config.yml第二阶段培训(DDP版本不起作用,因此当前版本使用DP,如果您想提供帮助,请再次查看#7) :
python train_second.py --config_path ./Configs/config.yml您可以连续运行,它将同时训练第一阶段和第二阶段。该模型将以“ epoch_1st_%05d.pth”和“ epoch_2nd_%05d.pth”的格式保存。检查点和张板日志将保存在log_dir上。
数据列表格式需要为filename.wav|transcription|speaker ,请参见Val_list.txt作为示例。多演讲者模型需要扬声器标签,因为我们需要为样式扩散模型训练示例参考音频。
在config.yml中,有一些重要的配置需要照顾:
OOD_data :SLM对抗训练的分发文本的路径。格式应为text|anything 。min_length :训练的最小OOD文本长度。这是为了确保综合语音的长度最小。max_len :训练的最大音频长度。单元是框架。由于默认的跃点尺寸为300,因此一个帧约为300 / 24000 )秒。如果您遇到不可存储的问题,请降低这一点。multispeaker :如果您想训练多孔模型,请设置为True。这是需要的,因为DeOiser的架构对于单个和多座模型的模型有所不同。batch_percentage :这是为了确保在SLM对抗训练中没有内存(OOM)问题。如果遇到OOM问题,请为此设置较低的数字。在Utils文件夹中,有三个预训练的模型:
batch_size或max_len 。有关更多信息,您可以参考第10期。该脚本是从使用DP的train_second.py修改的,因为DDP不适用于train_second.py 。如果您愿意解决此问题,请参阅上面的大胆部分。
python train_finetune.py --config_path ./Configs/config_ft.yml请确保在文件夹下下载并解压缩了库检查站。 LJSpeech上的默认配置config_ft.yml finetunes,具有1小时的语音数据(大约1K样本),适用于50个时期。这花了大约4个小时才能完成四个NVIDIA A100。质量比从头开始训练24小时的语音数据训练的LJSpeech型号稍差(类似于LjSpeech上的NaturalSpeech),该模型花费了2.5天大约2.5天的时间才能完成四个A100。可以在#65(评论)找到样品。
如果您使用的是单个GPU (因为该脚本与DDP不起作用)并希望节省训练速度和VRAM,则可以执行(感谢@korakoe在#100上制作脚本):
accelerate launch --mixed_precision=fp16 --num_processes=1 train_finetune_accelerate.py --config_path ./Configs/config_ft.yml@Kreevoz在填充方面的常见问题已经详细说明了,并提出了最大化音频质量的建议:#81。其中一些也适用于从头开始培训。 @iieleven11还制定了微调指南:#128。
joint_epoch之后的记忆中:这很可能是因为您的GPU RAM不够大,无法进行SLM对抗训练。您可能会跳过这一点,但质量可能会更糟。设置joint_epoch数量大于epochs可以跳过SLM前进训练。 有关详细信息,请参阅inference_ljspeech.ipynb(单式扬声器)和inperion_libritts.ipynb(多演讲者)。对于Libritts,您还需要在运行演示之前下载Reference_audio.zip并在demo下解压缩。
可以通过https://huggingface.co/yl4579/styletts2-ljspeech/tree/main下载24 kHz的LJSpeech语料库上的预易款Styletts 2。
可以在https://huggingface.co/yl4579/styletts2-libritts/tree/main上下载列表上的预易款styletts 2模型。
您可以导入Styletts 2并在您自己的代码中运行它。但是,推理取决于GPL许可的软件包,因此它不直接包含在此存储库中。 GPL许可的叉子具有可导入的脚本,以及一个实验流的API等。也提供了使用Gruut(尽管在PhoneMizer和Gruut之间不匹配的质量降低质量)的完全MIT许可的软件包。
在使用这些预训练的模型之前,您同意通知听众,除非您有许可使用您合成的语音,否则先前训练的模型是由预训练的模型合成的。也就是说,您只同意使用其说话者许可的声音直接或通过许可来克隆声音,然后才能在公开合成的声音公开之前,或者您必须公开宣布,如果您没有使用这些声音的许可,则这些声音是合成的。
代码:麻省理工学院许可证
预先训练的模型:在使用这些预训练的模型之前,您同意通知听众,除非您有许可使用您合成的语音,否则先前训练的模型会合成语音样本。也就是说,您只同意使用其说话者许可的声音直接或通过许可来克隆声音,然后才能在公开合成的声音公开之前,或者您必须公开宣布,如果您没有使用这些声音的许可,则这些声音是合成的。