过去的语音波形生成模型,很多是自回归式的模型,生成速度慢。而非自回归一些模型如Parallel WaveNet和Clarinet,则需要两个网络:一个学生网络和一个老师网络。本文提出的WaveGlow不需要自回归的过程,只由一个网络构成,用一个损失函数进行训练,简单有效。
论文地址:
https://ieeexplore.ieee.org/document/8683143
代码地址:
https://github.com/NVIDIA/waveglow
引言
语音合成任务一般包括两个步骤:第一步是将文本变换为时间对齐的特征,例如梅尔谱、基频等;第二步是将时间对齐的特征变换成声音信号采样点。本文的工作主要关注第二步。
大多数基于神经网络的波形合成模型都是自回归式的,这些方法都无法使用GPU和TPU进行加速。非自回归的模型有Parallel WaveNet,Clarinet和MCNN。然而,这几个方法的实现都非常复杂,并且都组合使用了多种损失函数。训练这些模型的难度非常大。
本文提出基于流的生成模型用于语音波形合成WaveGlow。WaveGlow很容易实现和训练,只使用似然度作为损失函数。基于Pytorch的实现版本,在Nvidia V100 GPU上的生成速率可以达到500kHz。
数据集
本文的实验使用了LJ Speech语音数据集。这个数据集由13100句短语音组成,时长共计24小时。所有语音由同一名说话人录制,录制设备是Macbook Pro的内建麦克风。本文将所有语音信号重采样到22050kHz。
本文使用梅尔谱作为网络输入,生成梅尔谱时使用librosa工具包的默认梅尔滤波器。提取梅尔谱特征时,帧长设为1024,帧移设为256。
模型
模型结构
首先从简单的高斯分布中采样,将随机采样值通过神经网络进行变换,使变换后的采样点符合希望建模的分布。本文中,希望建模的分布是声音采样点以梅尔谱为条件的条件概率分布。
过去基于流模型的工作提出,只要神经网络的是可逆的,就可以通过最小化数据的负对数似然度来训练网络。当限制了神经网络的每一层都是双射,可以使用变量替换法则,将似然度表示如下:
其中,第一项是高斯分布的似然度,惩罚了变换后采样值的
l
2
l_{2}
l2范数。
J
J
J代表雅可比矩阵,雅可比行列式可以奖励每层前向变换的过程中中增加空间的体积。
在前向的变换中,将8个声音采样值拼成一个向量,称为 squeeze 操作。然后将这些向量通过多层流模型。模型由可逆的1x1卷积和仿射耦合层组成,结构如下:
仿射耦合层
可逆的神经网络一般由耦合层组成。本文中使用了仿射耦合层,正向变换如下:
逆向变换可以表示如下:
其中
W
N
(
)
WN()
WN()不需要是可逆变换,
W
N
(
)
WN()
WN()使用了类似WaveNet中带洞卷积的网络结构。
为了保证仿射耦合层的可逆性,在损失函数中加入惩罚项:
可逆1x1卷积
本文采用了类似Glow模型的结构,使用可逆1x1卷积混合通道间的信息,卷积核的参数进行正交初始化,保证可逆性。在训练过程中,通过将雅可比行列式加入损失函数,保持卷积的可逆性。
实验结果
音频质量
本文将WaveGlow与WaveNet和Griffin-Lim方法进行了比较。评分人根据主观听感,对生成的音频进行打分。在测评中,WaveGlow的MOS分数最高。
合成速度
Griffin-Lim配置为60次迭代,在Nvidia V100上合成速率可以达到507kHz。Parallel WaveNet的合成速率为 500 kHz。本文实现了Pytorch版本的WaveGlow,可以达到520kHz的速率。基于模型的计算复杂度进行估计,优化后的WaveGlow的合成速率上限为2000 KHz。
结论
WaveGlow可以高效地合成语音,并且模型简单,训练容易。因此,WaveGlow可以用于部署高质量的语音合成。
扫码识别关注,获取更多论文解读