TTS: 文本转语音(Text-to-Speech)适用于所有人。
TTS 是一个用于高级文本转语音生成的库。它基于最新的研究成果构建,旨在实现训练简单、速度快和质量高之间的最佳平衡。 TTS 附带了预训练模型、用于评估数据集质量的工具,并已在20多种语言的产品和研究项目中使用。
:loudspeaker: 英语语音样本 和 SoundCloud 播放列表
:man_cook: TTS 训练配方
:page_facing_up: 文本转语音论文合集
💬 在哪里提问
请使用我们专门的渠道进行问题和讨论的交流。如果帮助被公开分享,那么它的价值将会更大,从而更多人能够受益。
类型 | 平台 |
---|---|
🚨 错误报告 | [GitHub 问题追踪器] |
❔ 常见问题 | TTS/Wiki |
🎁 功能请求与想法 | [GitHub 问题追踪器] |
👩💻 使用问题 | [Discourse 论坛] |
🗯 一般讨论 | [Discourse 论坛] 和 [Matrix 频道] |
🔗 链接与资源
类型 | 链接 |
---|---|
💾 安装 | TTS/README.md |
👩🏾🏫 教程和示例 | TTS/Wiki |
🚀 已发布的模型 | TTS/Wiki |
💻 Docker 镜像 | @synesthesiam 的仓库 |
🖥️ 演示服务器 | TTS/server |
🤖 在终端运行 TTS | TTS/README.md |
✨ 如何贡献 | TTS/README.md |
🥇 TTS 性能
“Mozilla*” 和 “Judy*” 是我们的模型。 详情...
特点
- 高性能的深度学习模型用于文本转语音任务。
- Text2Spec 模型(Tacotron, Tacotron2, Glow-TTS, SpeedySpeech)。
- 说话人编码器用于高效计算说话人嵌入。
- Vocoder 模型(MelGAN, Multiband-MelGAN, GAN-TTS, ParallelWaveGAN, WaveGrad, WaveRNN)
- 快速高效的模型训练。
- 控制台和 Tensorboard 上的详细训练日志。
- 支持多说话人 TTS。
- 高效的多 GPU 训练。
- 能够将 PyTorch 模型转换为 Tensorflow 2.0 和 TFLite 进行推理。
- 已发布的 PyTorch、Tensorflow 和 TFLite 模型。
- 用于整理文本转语音数据集的工具在
dataset_analysis
。 - 用于模型测试的演示服务器。
- 用于广泛模型基准测试的笔记本。
- 模块化(但不过分)的代码库,方便新想法的测试。
已实现的模型
文本转频谱图
注意力机制
- Guided Attention: 论文
- Forward Backward Decoding: 论文
- Graves Attention: 论文
- Double Decoder Consistency: 博客
说话人编码器
Vocoders
- MelGAN: 论文
- MultiBandMelGAN: 论文
- ParallelWaveGAN: 论文
- GAN-TTS discriminators: 论文
- WaveRNN: 来源
- WaveGrad: 论文
你也可以帮助我们实现更多模型。一些与 TTS 相关的工作可以在这里找到。
安装 TTS
TTS 支持 python >= 3.6, <3.9。
如果你只对使用已发布的 TTS 模型进行语音合成感兴趣,从 PyPI 安装是最简单的选择。
pip install TTS
如果你计划编写代码或训练模型,请克隆 TTS 并在本地安装。
git clone https://github.com/mozilla/TTS
pip install -e .
目录结构
|- notebooks/ (用于模型评估、参数选择和数据分析的 Jupyter Notebooks。)
|- utils/ (通用工具。)
|- TTS
|- bin/ (所有可执行文件的文件夹。)
|- train*.py (训练目标模型。)
|- distribute.py (使用多个 GPU 训练你的 TTS 模型。)
|- compute_statistics.py (计算数据集的统计数据以进行归一化。)
|- convert*.py (将目标 torch 模型转换为 TF。)
|- tts/ (文本转语音
- [LJ Speech](https://keithito.com/LJ-Speech-Dataset/)
- [Nancy](http://www.cstr.ed.ac.uk/projects/blizzard/2011/lessac_blizzard2011/)
- [TWEB](https://www.kaggle.com/bryanpark/the-world-english-bible-speech-dataset)
- [M-AI-Labs](http://www.caito.de/2019/01/the-m-ailabs-speech-dataset/)
- [LibriTTS](https://openslr.org/60/)
- [Spanish](https://drive.google.com/file/d/1Sm_zyBo67XHkiFhcRSQ4YaHPYM0slO_e/view?usp=sharing) - thx! @carlfm01
## 示例:使用已发布的模型在终端上合成语音
安装完成后,TTS 提供了一个 CLI 接口,用于使用预训练模型合成语音。您可以使用自己的模型或 TTS 项目下的发布模型。
列出已发布的 TTS 模型。
```bash
tts --list_models
从发布的模型列表中运行 tts 和 vocoder 模型。(只需从列表中复制并粘贴完整的模型名称作为以下命令的参数。)
tts --text "用于 TTS 的文本" \
--model_name "<type>/<language>/<dataset>/<model_name>" \
--vocoder_name "<type>/<language>/<dataset>/<model_name>" \
--out_path folder/to/save/output/
运行您自己的 TTS 模型(使用 Griffin-Lim Vocoder)
tts --text "用于 TTS 的文本" \
--model_path path/to/model.pth.tar \
--config_path path/to/config.json \
--out_path output/path/speech.wav
运行您自己的 TTS 和 Vocoder 模型
tts --text "用于 TTS 的文本" \
--model_path path/to/config.json \
--config_path path/to/model.pth.tar \
--out_path output/path/speech.wav \
--vocoder_path path/to/vocoder.pth.tar \
--vocoder_config_path path/to/vocoder_config.json
注意: 如果您更喜欢从 TTS 项目文件夹中运行 tts
,可以使用 ./TTS/bin/synthesize.py
。
示例:训练和微调 LJ-Speech 数据集
这里有一个 CoLab 笔记本,用于动手训练 LJSpeech 的示例。或者,您可以手动按照以下指南进行操作。
首先,将 metadata.csv
分别拆分为训练和验证子集 metadata_train.csv
和 metadata_val.csv
。请注意,对于语音合成,验证性能可能具有误导性,因为损失值并不能直接衡量人耳的语音质量,也不能衡量注意力模块的性能。因此,使用新句子运行模型并听取结果是最佳的选择。
shuf metadata.csv > metadata_shuf.csv
head -n 12000 metadata_shuf.csv > metadata_train.csv
tail -n 1100 metadata_shuf.csv > metadata_val.csv
要训练新模型,您需要定义自己的 config.json
以定义模型细节、训练配置等(查看示例)。然后调用相应的训练脚本。
例如,要在 LJSpeech 数据集上训练 tacotron 或 tacotron2 模型,请按照以下步骤操作。
python TTS/bin/train_tacotron.py --config_path TTS/tts/configs/config.json
要微调模型,使用 --restore_path
。
python TTS/bin/train_tacotron.py --config_path TTS/tts/configs/config.json --restore_path /path/to/your/model.pth.tar
要继续旧的训练运行,使用 --continue_path
。
python TTS/bin/train_tacotron.py --continue_path /path/to/your/run_folder/
对于多 GPU 训练,调用 distribute.py
。它可以在多 GPU 设置中运行任何提供的训练脚本。
CUDA_VISIBLE_DEVICES="0,1,4" python TTS/bin/distribute.py --script train_tacotron.py --config_path TTS/tts/configs/config.json
每次运行都会创建一个新的输出文件夹,其中包含使用的 config.json
、模型检查点和 tensorboard 日志。
如果出现任何错误或执行中断,如果输出文件夹下尚无检查点,则整个文件夹将被删除。
如果您将 Tensorboard 参数 --logdir
指向实验文件夹,您还可以使用 Tensorboard。
贡献指南
此存储库由 Mozilla 的行为准则和礼仪指南管理。有关更多详细信息,请阅读 Mozilla 社区参与指南。
- 创建一个新分支。
- 实施您的更改。
- (如果适用)添加 Google 风格 的文档字符串。
- (如果适用)在
tests
文件夹下实现一个测试用例。 - (可选但推荐)运行测试。
./run_tests.sh
- 运行代码格式检查器。
pip install pylint cardboardlint
cardboardlinter --refspec master
- 向
dev
分支发送 PR,解释更改内容。 - 让我们讨论直到完美为止 : )。
- 一旦一切看起来不错,我们将其合并到
dev
分支。
如果在任何步骤中需要帮助,请随时通过我们的沟通渠道联系我们。
协作实验指南
如果您想使用 TTS 尝试新想法并与社区分享您的实验,我们建议您使用以下指南,以便更好地协作。 (如果您有更好的协作建议,请告诉我们)
- 创建一个新分支。
- 打开一个指向您分支的 issue。
- 解释您的想法和实验。
- 定期分享您的结果。(Tensorboard 日志文件、音频结果、视觉效果等)
主要待办事项
- 实现模型。
- 在 LJSpeech 数据集上生成类人语音。
- 在不同的数据集(Nancy)(TWEB)上生成类人语音。
- 成功地使用 r=1 训练 TTS。
- 启用基于进程的分布式训练。类似于(https://github.com/fastai/imagenet-fast/)。
- 适应神经声码器。TTS 可与 WaveRNN 和 ParallelWaveGAN 一起使用(https://github.com/erogol/WaveRNN 和 https://github.com/erogol/ParallelWaveGAN)
- 多说话人嵌入。
- 模型优化(模型导出、模型剪枝等)