昨天在 数学家是我理想 大佬的引领下终于跑通了NVidia tacotron2的经典模型代码,这里做一下记录,也帮之后入坑TTS的各位同学踩一下坑,话不多说,咱们开始。

0)

不管干嘛,第一步整好环境
torch过往版本下载地址:
https://pytorch.org/get-started/previous-versions/#linux-and-windows-16
我的选项:
CUDA 9.0+pytorch 1.1.0

conda install pytorch == 1.1.0 torchvision == 0.3.0 cudatoolkit = 9.0 -c pytorch

这里之所以采用torch=1.1是因为低版本存在问题,cuda==9.0也是为了匹配torch而配置的
在这里插入图片描述
对于显卡驱动和对于的cuda版本我这里也放张官网的图
在这里插入图片描述
cuda对应的问题可以通过官网更新驱动版本来升级解决
https://www.nvidia.cn/geforce/drivers/

1)

现在我们下载官网的代码并且修改部分代码(由于我自身torch版本的问题)
第一个要改的地方式是 utils.py 第 9 行

原:mask = (ids < lengths.unsqueeze(1)).bool()
现:mask = (ids <lengths.unsqueeze(1)).to(torch.bool)

第二个要修改的地方是 model.py 第 401 和 488 行
原:

原:memory, mask=~get_mask_from_lengths(memory_lengths)
现:memory, mask =get_mask_from_lengths(memory_lengths) <=0
原:mask=~get_mask_from_lengths(output_lengths)
现:mask = get_mask_from_lengths(output_lengths) <= 0

2)

现在我们对数据集的路径进行修改
Ⅰ下载LJ-speech数据集并将其放至与train.py同级目录下
Ⅱ 对工程本身所携带的filelists数据集划分进行修改,将前缀DUMMY/改为音频文件的绝对路径(txt里的全局替换)
例如

DUMMY/LJ045-0096.wav|Mrs. De Mohrenschildt thought that Oswald,


E:\tacotron2-master\LJSpeech-1.1\wavs\LJ045-0096.wav|Mrs. De
Mohrenschildt thought that Oswald,

3)

库配置
工程的requirements.txt中提供了必要的库文件
可以采用以下治理在pycharm内安装,conda类似

pip install -r requirements.txt

这是我自己的库版本
在这里插入图片描述

4)

训练。
因为我只有GTX10502G单gpu,所以我才用工程所给的指令代码

  1. python train.py --output_directory=outdir --log_directory=logdir
  2. (OPTIONAL) tensorboard --logdir=outdir/logdir

将batch_size调至4,差不多就可以跑起来了

5)

再然后生成mel参数后,就到了声码器合成这一步,tacotron采用了waveglow的vocoder来生成音频。
我这里因为机器原因并没有自己进行大规模训练,所以采用了tacotron2自带的训练模型。将下面两个模型参数下载并且放到目录下即可运行inference.ipynb合成音频
在这里插入图片描述
打开jupyter,将inference执行完成就可以得到音频了
之所以采用jupyter是因为

import IPython.display as ipd
ipd.Audio(source,rate)

可以在线听到语音合成的效果。

小结

以上就是tacotron2运行的大体流程,虽然是TTS方向万里长征的一小步,但是只要迈出去,就是前进了一步。
也希望自己和各位在以后的日子里能够俯下身子 静下心来 好好学习,加油!

Logo

更多推荐