摘要:本文形容的深度神经网络模型构造:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions。
本文分享自华为云社区《什么?语音合成开源代码不会跑,我来教你跑Tacotron2》,作者: 白马过平川 。

Tacotron-2:
TTS论文大全: https://github.com/lifefeel/S...
  DeepMind的Tacotron-2的Tensorflow实现。 本文形容的深度神经网络模型构造:: Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions
github地址:https://github.com/Rookie-Che...
还有一些其余版本的Tacotron2开源我的项目:

https://github.com/Rayhane-ma...
https://github.com/NVIDIA/tac...
这个 github 蕴含了对该论文的其余改良和尝试, 因而咱们应用paper_hparams.py文件,该文件保留准确的超参数以重现了paper的后果,而无需任何额定的附加性能。默认应用的倡议hparams.py文件蕴含带有额定内容的超参数,在大多数状况下能够提供更好的后果。 依照本人的须要随便批改参数,差别将在文件中突出显示。

Repository Structure:
步骤 (0): 获取数据集, 这里我设置了Ljspeech,en_US和en_UK(来自M-AILABS)的示例。
步骤 (1): 预处理您的数据。这将为您提供training_data文件夹。
步骤 (2): 训练你的Tacotron模型。产生logs-Tacotron文件夹。
步骤 (3): 合成/评估Tacotron模型。给出tacotron_output文件夹。
步骤 (4): 训练您的Wavenet模型。产生logs-Wavenet文件夹。
步骤 (5): 应用Wavenet模型合成音频。给出wavenet_output文件夹。
留神:

步骤2,3和4能够通过Tacotron和WaveNet(Tacotron-2,步骤(*))的简略运行来实现。
原有github的预处理仅反对Ljspeech和相似Ljspeech的数据集(M-AILABS语音数据)!如果以不同的形式存储数据集,则须要制作本人的preprocessing脚本。
如果同时对两个模型进行训练,则模型参数构造将不同。
一些预训练模型和demo:
您能够在此处.查看模型性能的一些次要见解(在预训练阶段)。

模型架构:

图1:Tacotron2模型结构图

作者形容的模型可分为两局部:

谱图预测网络
Wavenet声码器
要深刻摸索模型体系结构,训练过程和预处理逻辑,请参阅 作者的 wiki

如何开始
环境设置:
首先,您须要与Tensorflow一起装置python 3 。

接下来,您须要装置一些Linux依赖项以确保音频库失常工作:

apt-get install -y libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0 ffmpeg libav-tools
最初,您能够装置 requirements.txt. 如果你是一个 Anaconda 用户: (能够用 pip3 代替 pip 并 用python3 代替 python)

pip install -r requirements.txt
Docker:

或者,能够构建docker镜像以确保主动设置所有内容并应用docker容器内的我的项目。

Dockerfile is insider “docker” folder

docker image能够用以下内容构建:

docker build -t tacotron-2_image docker/
而后容器能够运行:

docker run -i --name new_container tacotron-2_image
数据集:
该github在 ljspeech dataset数据集上测试了下面的代码,该数据集有近24小时标记的单个女演员录音。(下载时,README文件中提供了无关数据集的更多信息)

该github还在 新的M-AILABS语音数据集 上运行以后测试,该数据集 蕴含超过700种语音(超过80 Gb的数据),超过10种语言。

下载数据集后, 解压压缩文件, 而该文件夹放在克隆的github里。

Hparams设置:
在持续之前,您必须抉择最适宜您需要的超参数。 尽管能够在预处理/训练期间从命令行更改超参数,但我依然倡议间接在hparams.py文件上一劳永逸地进行更改。

为了抉择最佳的fft参数,我制作了一个griffin_lim_synthesis_tool笔记本, 您能够应用它来反转理论提取的梅尔/线性光谱图,并抉择预处理的好坏水平。所有其余选项都在hparams.py中失去了很好的解释,并且具备有意义的名称,因而您能够尝试应用它们。

AWAIT DOCUMENTATION ON HPARAMS SHORTLY!!

预处理
在运行以下步骤之前,请确保您在Tacotron-2文件夹中

cd Tacotron-2
而后能够应用以下命令开始预处理:

python preprocess.py
能够应用 –dataset 参数抉择数据集。如果应用M-AILABS数据集,则须要提供 language, voice, reader, merge_books and book arguments 以满足您的自定义需要。默认是 Ljspeech.

示例M-AILABS:

python preprocess.py --dataset='M-AILABS' --language='en_US' --voice='female' --reader='mary_ann' --merge_books=False --book='northandsouth'
或者如果你想一个谈话人应用所有书籍:

python preprocess.py --dataset='M-AILABS' --language='en_US' --voice='female' --reader='mary_ann' --merge_books=True
这应该不会超过几分钟。

训练:
按程序训练两个模型:

python train.py --model='Tacotron-2'
特色预测模型Tacotron-2能够别离被训练应用:

python train.py --model='Tacotron'
每5000步记录一次,并存储在logs-Tacotron文件夹下。

当然,独自训练wavenet是通过以下形式实现的:

python train.py --model='WaveNet'
logs will be stored inside logs-Wavenet.

留神:

如果未提供模型参数,则训练将默认为Tacotron-2模型培训。(与tacotron模型构造不同)
训练模型的参数能够参考 train.py 有很多选项能够选
wavenet 的预处理可能得独自应用 wavenet_proprocess.py脚本
合成
合成音频 以 端到端 (文本到音频) 的形式 (两个模型同时运行):

python synthesize.py --model='Tacotron-2'
对于频谱图预测网络,有三种类型的mel谱图的预测后果:

推理测试(对自定义句子的综合评测)。 这是咱们在领有残缺的端到端模型后通常会应用的。
python synthesize.py --model='Tacotron'
天然合成 (让模型通过将最初一个解码器的输入输出到下一个工夫步来独自进行预测).
python synthesize.py --model='Tacotron' --mode='synthesis' --GTA=False
无效的对齐合成 (默认: 模型是在无效实在的标签下强制训练产生的). 当预测用于训练wavenet的mel频谱时,应用该合成办法. (如文中所述,产生更好的后果)
python synthesize.py --model='Tacotron' --mode='synthesis' --GTA=True
用先前合成的Mel频谱合成波形:

python synthesize.py --model='WaveNet'
留神:

如果未提供模型参数,则默认应用Tacotron-2模型合成。(End-to-End TTS)
抉择的合成参数,你能够参考synthesize.py
参考文献和源码:
Natural TTS synthesis by conditioning Wavenet on MEL spectogram predictions
Original tacotron paper
Attention-Based Models for Speech Recognition
Wavenet: A generative model for raw audio
Fast Wavenet
r9y9/wavenet_vocoder
keithito/tacotron
想理解更多的AI技术干货,欢送上华为云的AI专区,目前有AI编程Python等六大实战营供大家收费学习。(六大实战营link:http://su.modelarts.club/qQB9)

点击关注,第一工夫理解华为云陈腐技术~