当前位置:   article > 正文

Tacotron2 原理及使用(基于TensorFlow)_tacotron2使用tensorflow2.x

tacotron2使用tensorflow2.x

环境:win10 + TensorFlow1.13.1,不支持TensorFlow2.0及以上
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。

主要参考

[1] Shen J , Pang R , Weiss R J , et al. Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions[J]. 2017.
[2] https://github.com/Rookie-Chenfy/Tacotron-2

一、背景:

在TTS方向,有着很多方法,之前出现的出现了Wavenet和Tacotron在TTS领域的应用,都取得了非常优秀的成果,但是都存在着自身的缺陷。Wavenet的缺陷是需要进行自回归,即把这一次的输出附加到下一次运算的输入中,使得运算无法并行进行,速度较慢,并且它并不是端到端,它需要对TTS前端语言的特征进行调节。而Tacotron则使用了RNN模型,具有短期记忆、梯度消失严重等问题,导致信号合成效果并不是很好,不如Wavenet。

Tacotron2则将Wavenet和Tacotron相结合,吸取了两者的优势并解决了两者的问题。

在2017年3月提出的模型中,Tacotron 模型取得了 3.82 的平均意见得分(满分5) 。而在最近的评估中,Tacotron 2 模型平均意见得分为 4.53,专业录音平均意见得分为 4.58。

二、适用场景及优缺点:

适用于端到端的TTS,输入为文本和.wav音频集,输出为.wav音频,生成的语音具有专业录音级别的质量。

缺陷:但还不能实时生成音频,并且不能让生成的音频听起来高兴或者悲伤。它在复杂单词(如decorum)的发音上有些困难,在极端情况下甚至会随机产生奇怪的噪音。

(试听原声和合成声:https://google.github.io/tacotron/publications/tacotron2/index.html

三、架构和模型:

Tacotron2的架构如下图所示:
在这里插入图片描述
该系统由两个部分组成,一个部分是循环序列到序列的特征预测网络,将特征叠加到梅尔光谱图上,在该部分之后通过一个修正过的Wavenet作为vocoder,它的输入为梅尔光谱图,通过vocoder之后,会将其合成为时域波形。Tacotron2所得到的合成语音比参照语音的MOS仅仅低了0.05。

在这个架构中,Tacotron2将原先Tacotron的RNN模型进行改进,使用了LSTM模型,加入了遗忘门、输入门、输出门等门控结构,优化了梯度消失的问题,使得模型在反向传播的记忆力上有所提升,提高了合成的语音的质量。
在这里插入图片描述在这里插入图片描述
并且如下图所示,将tacotron输出的梅尔波谱图作为Wavenet的输入,也解决了每次进行Wavenet需要对TTS前端语言的特征进行调节的问题。
在这里插入图片描述
算法整个流程如下:
文本输入,使用三层卷积利用LSTM模型与注意力机制,进行特征提取,然后将特征输入到模型中,预测出值,将值附加到梅尔波谱图上,然后使用WaveNet把梅尔波谱图转换为时域波形,合成出语音。

四、安装与环境配置:

版本①:https://github.com/NVIDIA/tacotron2
(NVDIA版,基于pytorch,具有NVDIA公司的APEX运算加速技术,并且没有使用Wavenet,而是使用了最新的WaveGlow技术)

版本②:https://github.com/Rookie-Chenfy/Tacotron-2
(TensorFlow版)

我的工作主要是借鉴了最上方的2017年的Natural TTS Synthesis by Conditioning Wavenet On Mel Spectrogram predictions论文,这篇论文的架构里是有Wavenet的,因此我选择版本②。

流程:
首先,下载LJSpeech数据集:https://keithito.com/LJ-Speech-Dataset/,或者下载new M-AILABS speech 数据集:http://www.m-ailabs.bayern/en/the-mailabs-speech-dataset/

然后,cd到Tacotron-2目录下,使用pip install -r requirements.txt,安装py库

pip install -r requirements.txt

    (如果使用的是cpu版本的TensorFlow,则忽略这步,gpu版本的TensorFlow还需要如下配置:下载1.13.1版本的TensorFlow,切记Cuda版本为10.0,官方给出的是10.1,但是会报错,同时cuDNN的版本为7.6.4)

    配置完毕。

    五、使用步骤:

    超参数配置:
    根目录下的hparams.py
    在这里插入图片描述
    haparams.py的代码片段
    在这里插入图片描述
    数据集:
    将下载的数据集复制到根目录。
    在这里插入图片描述
    预处理(提取特征):
    在这里插入图片描述
    预处理完成后会出现,training_data文件夹:
    在这里插入图片描述
    包含以下文件:
    在这里插入图片描述
    这些是用于训练的特征。

    log片段:
    在这里插入图片描述

    训练模型:
    在这里插入图片描述
    训练完成后会出现这两个文件夹:
    在这里插入图片描述
    这就是我们训练好的模型,这里面的文件将会用于下一步的合成

    log片段:
    在这里插入图片描述
    在这里插入图片描述
    训练模型:
    在这里插入图片描述

    六、未完成的部分:

    由于我的GPU的内存不足以训练这个模型,我使用了CPU进行训练。

    长达4个半小时的训练,仅仅完成了50轮次的迭代(默认设置时100000次),wavenet_model.ckpt-50为保存的训练节点
    在这里插入图片描述
    可能是因为检查点过少,也有可能是配置时检查点的名称设置问题,导致在合成时,合成了一半就报错(还在排查错误)。

    根据这个,最终合成出的语音,仅有一两个音节,不过听起来仍然是高质量的人声。音频文件名为step-50-real.wav。
    在这里插入图片描述
    未完成的部分,我会尽可能在近一月内更新。

    七、想说的话:

    细致到行的代码分析,我便不做阐述,源代码的注释已经足够清晰,我的目的是想让大家了解到Tacotron2的架构、运行方式,它最近在什么地方改进了(使用WaveGlow替换了Wavenet),希望大家能把Tacotron2的前世今生和未来串起来。

    同时,踩完了很多坑,能让大家了解到如何去快速安装及使用它来合成一段声音,这样对于它的理解会更加切合实际。

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/255103
    推荐阅读
    相关标签
      

    闽ICP备14008679号