Transformer-TTS 项目介绍
Transformer-TTS项目是一个基于PyTorch实现的神经语音合成模型,其核心在于使用Transformer网络来生成语音。该方法相较于传统的seq2seq模型,如Tacotron,具有3到4倍的加速效果,同时保持了相近的生成语音质量。实验结果表明,每步训练仅需约0.5秒。项目中采用了CBHG模型作为后处理网络,并使用Griffin-Lim算法将声谱图转换为原始波形。
项目需求
要运行Transformer-TTS项目,需要进行以下环境配置:
- 安装Python 3
- 安装PyTorch版本0.4.0
- 安装项目依赖:
pip install -r requirements.txt
数据集
项目使用了LJSpeech数据集,该数据集包含文本脚本和对应的wav文件,共计13,100对。可从这里下载完整数据集。数据预处理参考了tacotron和dc_tts的代码。
预训练模型
用户可以从这里下载预训练模型(160K用于自回归模型,100K用于后处理网络),并将其放置于项目的checkpoint/
目录下。
注意力图
经过大约15,000步训练后,注意力图中出现了对角线对齐。以下展示的注意力图是在160,000步时绘制的,使用了三层多头注意力机制,每层有4个头部,共绘制了12个注意力图。
自注意力编码器
自注意力解码器
编码器-解码器注意力
学习曲线与Alpha值
项目采用了与Tacotron类似的Noam风格的学习率优化,并进行了调整。编码器的缩放位置编码的alpha值在实验中有所不同,因此其开始时略有增加,而后持续下降。解码器的alpha值自开始以来则持续下降。
实验注意事项
- 学习率对训练非常重要。初始学习率为0.001并且采用指数衰减是行不通的。
- 梯度裁剪对于训练同样重要。项目中将梯度裁剪设为1。
- 使用停止标记损失,模型未能成功训练。
- 在注意力机制中,将输入和上下文向量进行拼接非常重要。
生成样本
项目提供了一些生成样本,每个样本在160,000步时生成,模型尚未完全收敛。该模型在处理长句子时性能略低。
以下是预测的mel声谱图和真实声谱图:
文件描述
hyperparams.py
包含所有需要的超参数。prepare_data.py
将wav文件预处理为mel和线性声谱图,以加快训练。preprocess.py
包含加载数据时的所有预处理代码。module.py
包含所有方法,包括注意力机制、prenet、postnet等。network.py
包含编码器、解码器和后处理网络。train_transformer.py
用于训练自回归注意力网络(text → mel)。train_postnet.py
用于训练后处理网络(mel → linear)。synthesis.py
用于生成TTS样本。
网络训练步骤
- 下载并解压LJSpeech数据至任意目录。
- 在
hyperparams.py
中调整超参数,特别是'data_path',即解压文件的目录,如有必要,调整其他参数。 - 运行
prepare_data.py
。 - 运行
train_transformer.py
。 - 运行
train_postnet.py
。
生成TTS音频文件
- 运行
synthesis.py
,确保恢复步骤设置正确。
参考
- Keith Ito: tacotron
- Kyubyong Park: dc_tts
- jadore801120: Attention is All You Need (PyTorch)
注释
任何关于代码的评论都是受欢迎的。