简介
参考博客1: 基于Tacotron汉语语音合成的开源实践
参考博客2:Tacotron中文语音合成
通过调研发现,针对TTS的开源项目主要是针对英文的。而中文方面资料相对较少。上面两个为本项目的主要参考,已有的信息就不进行重复了,同时感谢乐于分享的两位博主。
使用谷歌提出的Tacotron模型,进行真正端到端的TTS系统。以下是从头实现的步骤以及踩过的坑,正所谓前人栽树后人乘凉。
操作步骤
step1 源码下载
下载源码 https://github.com/begeekmyfriend/tacotron/tree/mandarin
注意分支选择,选择mandarin分支,而不是默认的master分支。
命令行
git clone https://github.com/begeekmyfriend/tacotron.git
该分支下datasets 目录中有对清华数据集thchs30.py的处理
step2 下载数据集
数据集下载链接https://blog.ailemon.me/2018/11/21/free-open-source-chinese-speech-datasets/
下载 THCHS30 数据集(6.4G)
数据集结构如下
data/A2_0.wav 是音频文件
data/A2_0.wav.trn是音频文件对应的文本和拼音,如下图所示:
将数据集解压至项目的根目录下,如有不理解可参考最上面的博客。
step3 代码修改
tacotron/datasets/thchs30.py 第29行 biaobei_48000 改data 第34行 wav_file = trn[:-4] + '.wav' 把+ '.wav'注释掉
同样是参考博客中的评论。
step4 环境部署,软硬件
需要tensorflow >1.3 , 个人实验要tensorflow1.9。tensorflow2.0跑不起来
python3.6
推荐使用anaconda安装https://www.jianshu.com/p/e298b9d3afae
显存8G是足够的,如果不够可以参考https://github.com/keithito/tacotron/issues/270解决办法
将banch_size 改成16
数据和模型存储共需要150G。
step5 代码运行
1. 数据预处理
python3 preprocess.py --dataset thchs30
2.数据集训练
nohup python3 -u train.py --name thchs30 > output.out &
由于训练时间较长nohup保证进程不终止
output.out 表示输出重定向到output.out
&表示程序后台运行
-u 表示输出不经过缓存直接保存在output.out中
然后输入exit退出终端,程序后台运行
后续
当loss在0.69时,loss不再下降,估计是batchsize小了,设置的是16,由于数据集影响,最好的音质也有瓶颈,因此放弃了训练。可以参考以下链接的项目,真的很赞。
使用清华数据集训练的模型终究有效果瓶颈,因为数据集本身就有噪声。因此需要更加干净的数据集进行训练。
Tacotron2的中文语音合成项目https://github.com/JasonWei512/Tacotron-2-Chinese采用的是标贝科技的数据集训练的,试听效果理想很多。