什么?语音合成开源代码不会跑,Follow me!
摘要:本文描述的深度神经网络模型结构:NaturalTTS synthesis by conditioning Wavenet on MEL spectogram predictions。
本文分享自华为云社区《什么?语音合成开源代码不会跑,我来教你跑Tacotron2》,作者: 白马过平川 。
Tacotron-2
TTS 论文大全: https://github.com/lifefeel/SpeechSynthesis
DeepMind 的 Tacotron-2 的 Tensorflow 实现。本文描述的深度神经网络模型结构:: Natural TTS synthesis by conditioning Wavenet on MELspectogram predictionsgithub 地址:https://github.com/Rookie-Chenfy/Tacotron-2
还有一些其他版本的 Tacotron2 开源项目:
这个 github 包含了对该论文的其他改进和尝试, 因此我们使用 paper_hparams.py 文件,该文件保存精确的超参数以重现了 paper 的结果,而无需任何额外的附加功能。默认使用的建议 hparams.py 文件包含带有额外内容的超参数,在大多数情况下可以提供更好的结果。按照自己的需要随意修改参数,差异将在文件中突出显示。
Repository Structure
步骤 (0): 获取数据集, 这里我设置了 Ljspeech,en_US 和 en_UK(来自 M-AILABS)的示例。
步骤 (1): 预处理您的数据。这将为您提供 training_data 文件夹。
步骤 (2): 训练你的 Tacotron 模型。产生 logs-Tacotron 文件夹。
步骤 (3): 合成/评估 Tacotron 模型。给出 tacotron_output 文件夹。
步骤 (4): 训练您的 Wavenet 模型。产生 logs-Wavenet 文件夹。
步骤 (5): 使用 Wavenet 模型合成音频。给出 wavenet_output 文件夹。
注意:
步骤 2,3 和 4 可以通过 Tacotron 和 WaveNet(Tacotron-2,步骤(*))的简单运行来完成。
原有 github 的预处理仅支持 Ljspeech 和类似 Ljspeech 的数据集(M-AILABS 语音数据)!如果以不同的方式存储数据集,则需要制作自己的 preprocessing 脚本。
如果同时对两个模型进行训练,则模型参数结构将不同。
一些预训练模型和 demo
您可以在此处.查看模型性能的一些主要见解(在预训练阶段)。
模型架构
图 1:Tacotron2 模型结构图
作者描述的模型可分为两部分:
谱图预测网络
Wavenet 声码器
要深入探索模型体系结构,训练过程和预处理逻辑,请参阅 作者的 wiki
如何开始
环境设置:首先,您需要与 Tensorflow 一起安装 python 3 。
接下来,您需要安装一些 Linux 依赖项以确保音频库正常工作:
apt-get install-y libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeglibav-tools
最后,您可以安装 requirements.txt. 如果你是一个 Anaconda 用户: (可以用 pip3 代替 pip 并 用 python3 代替 python)
pip install -rrequirements.txt
Docker:或者,可以构建 docker 镜像以确保自动设置所有内容并使用 docker 容器内的项目。
Dockerfile is insider “docker” folder
docker image 可以用以下内容构建:
docker build -ttacotron-2_image docker/
然后容器可以运行:
docker run -i--name new_container tacotron-2_image
数据集
该 github 在 ljspeech dataset 数据集上测试了上面的代码,该数据集有近 24 小时标记的单个女演员录音。(下载时,README 文件中提供了有关数据集的更多信息)
该 github 还在 新的 M-AILABS 语音数据集 上运行当前测试,该数据集 包含超过 700 种语音(超过 80 Gb 的数据),超过 10 种语言。
下载数据集后, 解压压缩文件, 而该文件夹放在克隆的 github 里。
Hparams 设置
在继续之前,您必须选择最适合您需求的超参数。虽然可以在预处理/训练期间从命令行更改超参数,但我仍然建议直接在 hparams.py 文件上一劳永逸地进行更改。
为了选择最佳的 fft 参数,我制作了一个 griffin_lim_synthesis_tool 笔记本,您可以使用它来反转实际提取的梅尔/线性光谱图,并选择预处理的好坏程度。所有其他选项都在 hparams.py 中得到了很好的解释,并且具有有意义的名称,因此您可以尝试使用它们。
AWAIT DOCUMENTATION ON HPARAMS SHORTLY!!
预处理
在运行以下步骤之前,请确保您在 Tacotron-2 文件夹中
然后可以使用以下命令开始预处理:
可以使用 –dataset 参数选择数据集。如果使用 M-AILABS 数据集,则需要提供 language, voice, reader, merge_books and book arguments 以满足您的自定义需求。默认是 Ljspeech.
示例 M-AILABS:
或者如果你想一个说话人使用所有书籍:
这应该不会超过几分钟。
训练
按顺序训练两个模型:
特征预测模型 Tacotron-2 可以分别被训练使用:
每 5000 步记录一次,并存储在 logs-Tacotron 文件夹下。
当然,单独训练 wavenet 是通过以下方式完成的:
logs will be storedinside logs-Wavenet.
注意:
如果未提供模型参数,则训练将默认为 Tacotron-2 模型培训。(与 tacotron 模型结构不同)
训练模型的参数可以参考 train.py 有很多选项可以选
wavenet 的预处理可能得单独使用 wavenet_proprocess.py 脚本
合成
合成音频 以 端到端 (文本到音频) 的方式 (两个模型同时运行):
对于频谱图预测网络,有三种类型的 mel 谱图的预测结果:
推理测试(对自定义句子的综合评测)。 这是我们在拥有完整的端到端模型后通常会使用的。
自然合成 (让模型通过将最后一个解码器的输出输入到下一个时间步来单独进行预测).
有效的对齐合成 (默认: 模型是在有效真实的标签下强制训练产生的).当预测用于训练 wavenet 的 mel 频谱时,使用该合成方法. (如文中所述,产生更好的结果)
用先前合成的 Mel 频谱合成波形:
注意:
如果未提供模型参数,则默认使用 Tacotron-2 模型合成。(End-to-End TTS)
选择的合成参数,你可以参考synthesize.py
参考文献和源码
Natural TTS synthesis by conditioning Wavenet on MEL spectogrampredictions
Original tacotron paper
Attention-Based Models for Speech Recognition
Wavenet: A generative model for raw audio
Fast Wavenet
想了解更多的 AI 技术干货,欢迎上华为云的 AI 专区,目前有 AI 编程 Python 等六大实战营供大家免费学习。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/69bdee69c0df24f65da41e0b2】。文章转载请联系作者。
评论