Tacotron中文语音合成

Tacotron2

为了实现中文语音合成的项目需要,首先调研了Tacotron2的网络架构和最终的实现效果。
Tacotron2的Pytorch实现
Tacotron2的Tensorflow实现
但最终由于Tacotron2中包含两个模型的训练,包括序列模型和声码器两部分,最终放弃了使用Tacotron2来完成最终的实现。改成使用Tacotron模型来完成相关的任务,因为Tactron不包含Tacotron2中Wavenet的部分,而是使用了Griffin-Lim算法来完成声码器的工作,目前声码器部分的研究还有World,FFTNET等等。
Tacotron的Tensorflow中文实现
由于比较懒,就直接附上中文实现了,原作者是begeekmyfriend,初始版本可以参考其fork的原作者。

该中文实现的数据集使用的是清华中文语音数据集data_thchs30
data_thchs30
将其解压到工程文件当中,并重命名为data_thchs30,与程序相对应,或者修改程序中的字符串为你的名字。
预处理阶段:
首先要对原先数据集当中的音频文件进行预处理,并将其转化为梅尔谱图的形式,生成的梅尔谱图作为Tacotron模型的期望值Y。而预测值即训练过程中生成的梅尔谱图。预处理要使用preprocess.py文件。命令行执行如下:
python preprocess.py
预处理完之后会得到training data文件夹和train.txt。train.txt即训练文件所在的路径,训练过程需要从train.txt中读取所需的文件路径和拼音标注。
python train.py
之后通过以上命令行,进行训练过程,本地服务器的GPU是GTX 1080Ti一块,迭代步数最终达到了194000次,loss大约为0.6左右。训练得到的checkpoint保存在log-Tacotron文件夹中,还有在验证过程中生成的音谱图等等。
最终音频结果如下:
发现不支持插入音频文件,皮一下。效果还可以,能够清晰的读出来,测试使用的是网上爬取的新闻文本。
模型生成的有效音频长度有限,所以需要写一个音频处理的脚本进行连接和过渡,也可以使用ffmpeg进行音频的链接。通过自己写的pinyin.py对生成的短时音频进行链接和处理,最终生成了一个长达2分钟的音频文件。

由于项目结束之后,就把原先的training data文件夹(大约100G)删除了,因为本地服务器只有800G的硬盘容量,所以流程可能有一点误区。

如果是英文实现的话,Tacotron英文实现
其中有附带的预训练模型,模型名字后有其训练完成的时间。
通过python demo_server.py 加载入模型路径的命令行参数
即可在弹出的localhost窗口中进行输入英文,来进行语音合成。
或在预训练模型的基础上进行训练。
前提条件必须是Linux系统。

你可能感兴趣的:(TTS)