Tacotron2是一个语音合成模型,输入一段文字就能输出一段音频。学校要求使用华为的平台资源完成Tacotron2,在具体实现上和网上的教程还不太相同(本地它不香吗?为什么非要用华为呢哭了)。
之前也试过mindstudio+ECS服务器,没有走的出来,最后还是回到了modelarts+OBS桶。
Tacotron2使用的LJSpeech数据集大概有2G,下载地址 https://keithito.com/LJ-Speech-Dataset/
Tacotron2的训练代码在这下载(这个不大,就100+M):GitHub - NVIDIA/tacotron2: Tacotron 2 - PyTorch implementation with faster-than-realtime inference
上面这个链接是pytorch的,我是pytorch和mindspore都跑了;mindspore的源码仓库记不得了,但mindspore官方是有一个仓库记录了包括tacotron2在内的不少经典模型的代码的。感兴趣的可以自己找找。
modelarts要求大于100M的文件需通过OBS桶中转(不知道华为是不是在趁机推广私货);这里建立modelarts notebook的配置选择pytorch+cuda(带GPU的),为了省钱可以先注册一个OBS桶吧,把数据集和Tacotron2的代码上传上去,再通过桶中转下载到modelarts(记得modelarts选择空间容量的时候选大一点)。注意tacotron2和dataset的目录应该是同级的。
tacotron2目录进入filelists文件夹,把里面三个.txt文件内容里的路径全部改成自己的数据集的位置,例如我的是这样:
上传完成之后就是训练啦!不同于Pytorch框架下直接对数据集中的 音频文件进行处理,Mindspore框架先将音频预处理生成.hdf5格式的文件。控制台运行:
$ python generate_hdf5.py --datapath ./data/LJSpeech-1.1
得到生成的.hdf5文件:
修改ljspeech_config.yaml中的配置内容,并运行train.py文件。
设定参数:learning rate=0.005, batch_size=16, epoch=2000
训练模型是一个很漫长的过长如果想直接看效果可以下载已经预训练好了的模型。
利用训练出的模型,运行eval.py文件进行语音合成;生成梅尔频谱图。利用wavenet作声码器,根据频谱图生成对应的音频。
最后感兴趣的朋友也可以利用Pytorch作这个任务,个人感觉比mindspore好用多了!直接在NVIDA GPU上跑也比昇腾好用太多太多。
华为的mindspore, modelarts, 昇腾,OBS, mindstudio......也可能是我菜吧,经常一运行就各种奇奇怪怪的bug;用着远没有pytorch顺手。modelarts和OBS还要相互上传,没有Colab和Google云盘的协同方便。