《WaveGlow : A Flow-Based Generative Network For Speech Synthesis》论文学习
文章目录
摘要
在本文中,我们提出了 WaveGlow : 一种基于流的网络,能够从梅尔频谱图生成高质量的语音。
WaveGlow 结合了 Glow (《Glow: Generative flow with invertible 1x1 convolutions》)和 WaveNet (《Wavenet: A generative model for raw audio》)的见解,以提供快速、高效和高质量的音频合成,而不需要自回归。
WaveGlow 仅使用单个网络实现,训练时仅使用单个代价函数:最大限度地提高训练数据的似然性,使训练过程简单稳定。
我们的 PyTorch 实现在 NVIDIA V100 GPU 上以超过 500kHz 的速度生成音频样本。
平均意见得分表明,它提供的音频质量与最好的公开可用 WaveNet 实现一样好。
所有代码将在《Waveglow》上公开。
索引术语 —— 语音合成 , 文字转语音 , 生成式模型 ,深度学习
1 介绍
随着与机器的语音交互变得越来越有用,高效合成高质量的语音变得越来越重要。
语音质量或延迟的小变化对客户体验和客户偏好有很大的影响。
然而,高质量的实时语音合成仍然是一个具有挑战性的任务。
语音合成需要生成具有长期依赖性的高维样本。
此外,人类对音频样本中的统计缺陷非常敏感。
除了质量方面的挑战,实时语音合成还面临着速度和计算方面的限制。
当音频采样率低于 16kHz 时,感知语音质量显著下降,更高的采样率产生更高的语音质量。
此外,许多应用需要比 16kHz 更快的合成速率。
例如,在远程服务器上合成语音时,严格的交互性要求意味着必须以远远超过实时要求的采样速率快速合成语音。
目前,最先进的语音合成模型是基于参数神经网络的。
文本-语音合成通常分为两个步骤。
第一步是将文本转换成时间对齐的特征,如梅尔谱图(《Tacotron: A fully end-to-end text-to-speech synthesis model》,《Natural tts synthesis by conditioning wavenet on mel spectrogram predictions》),或 F0 频率和其他语言特征(《Wavenet: A generative model for raw audio》,《Deep voice: Real-time neural text-to-speech》)。
第二个模型将这些时间对齐的特征转换成语音样本。
在本研究中,我们关注的是第二个模型。
大多数基于神经网络的语音合成模型都是自回归的,这意味着它们将未来的音频样本与之前的样本结合起来,以建立长期的相关性模型。
这些方法的实施和训练相对简单。
然而,它们本质上是串行的,因此不能充分利用并行处理器,如 GPU 或 TPU 。
这类模型通常很难在不牺牲音质的情况下合成超过 16kHz 的音频。
目前我们知道有三种基于神经网络的模型可以在不需要自回归的情况下合成语音:并行 WaveNet (《Wavenet: A generative model for raw audio》)、 Clarinet (《Clarinet: Parallel wave generation in end-to-end text-to-speech》)和用于谱图反演(《Fast spectrogram inversion using multi-head convolutional neural networks》)的 MCNN 。
这些技术可以在 GPU 上合成超过 500kHz 的音频。
然而,这些模型的训练和实现都比自回归模型困难。
这三种方法都需要复合损耗函数来改善音频质量或模式崩溃的问题(《Parallel WaveNet: Fast high-fidelity speech synthesis》,《Clarinet: Parallel wave generation in end-to-end text-to-speech》,《Fast spectrogram inversion using multi-head convolutional neural networks》)。
此外, Parallel WaveNet 和 Clarinet 需要两个网络,一个学生网络和一个教师网络。
Parallel WaveNet 和 Clarinet 的学生网络都使用了逆自回归流 ( IAF )(《Improved variational inference with inverse autoregressive flow》)。
虽然在推理时可以并行运行 IAF 网络,但流本身的自回归特性使得 IAF 的计算效率低下。
为了克服这个问题,这些工作使用教师网络来训练学生网络,使其接近真实的可能性。
这些方法很难复制和部署,因为很难训练这些模型成功地收敛。
在这项工作中,我们证明了自回归流在语音合成中是不必要的。
我们的贡献是一个基于流的网络,能够从梅尔谱图生成高质量的语音。
我们称这个网络为 WaveGlow ,因为它结合了 Glow (《Glow: Generative flow with invertible 1x1 convolutions》)和 WaveNet (《Wavenet: A generative model for raw audio》)的思想。
WaveGlow 易于实现和训练,只使用单个网络,训练时只使用似然损失函数。
尽管模型很简单,但我们的 PyTorch 实现在 NVIDIA V100 GPU 上以超过 500kHz 的速度合成语音:比实时速度快 25 倍以上。
平均意见得分表明,它提供的音频质量与在同一数据集上训练的最好的公开可用 WaveNet 实现一样好。
2 WaveGlow
WaveGlow 是一个生成式模型,通过从分布中采样来生成音频。
为了使用神经网络作为生成模型,我们从一个简单的分布中抽取样本。
在我们的案例中,一个维数与我们期望的输出相同的零均值球形高斯函数,将这些样本通过一系列的层,将简单的分布转换为期望的分布。
在这种情况下,我们在梅尔谱图条件下模拟音频样本的分布。
我们想通过直接最小化数据的负对数似然来训练这个模型。
如果我们使用任意的神经网络,这是很难做到的。
基于流的网络(《Nice: Non-linear independent components estimation》,《Density estimation using real nvp》,《Glow: Generative flow with invertible 1x1 convolutions》)通过保证神经网络映射是可逆的来解决这一问题。
通过限制每一层为双射,可以通过变量的改变直接计算可能性:
在我们的例子中,第一项是球面高斯分布的对数似然。
这一项惩罚了变换后样本的 l2 范数。
第二项由变量代换产生, J 是雅可比矩阵。
雅可比矩阵的对数行列式奖励任何一层在前进过程中增加空间的体积。
这一项也防止了一个层仅仅将 x 项乘以 0 来优化 l2 范数。
这个转换序列也称为规范化流程(《Variational inference with normalizing flows》)。
我们的模型与最近的 Glow 工作(《Glow: Generative flow with invertible 1x1 convolutions》)非常相似,如图 1 所示。
对于正向通过网络,我们取 8 组音频样本作为向量,我们称之为压缩操作,如(《Glow: Generative flow with invertible 1x1 convolutions》)。
然后我们处理这些向量 “steps of flow”
这里的流程包括一个可逆的 1×1 卷积,然后是一个仿射耦合层,如下所述。
2.1 仿射耦合层
可逆神经网络通常使用耦合层来构建(《Nice: Non-linear independent components estimation》,《Density estimation using real nvp》,《Glow: Generative flow with invertible 1x1 convolutions》)。
在我们的例子中,我们使用了仿射耦合层(《Density estimation using real nvp》)。
一半的通道作为输入,然后产生乘法和加法术语,用于缩放和转换剩余的通道:
这里
W
N
(
)
WN()
WN() 可以是任何变换。
耦合层对整个网络保持可逆性,即使
W
N
(
)
WN()
WN() 不需要是可逆的。
这是因为用作
W
N
(
)
WN()
WN() 输入的通道(在本例中为
x
a
x_a
xa )被不变地传递到层的输出。
因此,在反相网络时,我们可以从输出
x
a
x_a
xa 计算
s
s
s 和
t
t
t ,然后反相
x
b
′
{x_b}'
xb′ 计算
x
b
x_b
xb ,只需重新计算
W
N
(
x
a
,
m
e
l
s
p
e
c
t
r
o
g
r
a
m
)
WN(x_a, melspectrogram)
WN(xa,melspectrogram) 。
在我们的例子中,
W
N
(
)
WN()
WN() 使用了带有门控 tan 非线性的扩展卷积层,以及残差连接和跳步连接。
这种
W
N
WN
WN 架构类似于 WaveNet (《Wavenet: A generative model for raw audio》)和 Parallel WaveNet (《Parallel WaveNet: Fast high-fidelity speech synthesis》),但我们的卷积有 3 个节拍,并不是因果关系。
仿射耦合层也是我们包括梅尔谱图的地方,以便使生成的结果符合输入条件。
上采样的梅尔光谱图在每一层的门控 tan 非线性线之前加入,就像在 WaveNet (《Wavenet: A generative model for raw audio》)中一样。
对于一个仿射耦合层,只有
s
s
s 项改变了映射的体积,并在损失中增加了变量变化项。
这个术语也用来惩罚不可逆的仿射映射模型。
2.2 1x1可逆的卷积
在仿射耦合层中,同一半的通道不会直接相互修改。
如果不跨渠道混合信息,这将是一个严重的限制。
在 Glow (《Glow: Generative flow with invertible 1x1 convolutions》)之后,我们通过在每个仿射耦合层之前添加一个可逆的 1x1 卷积层来混合通道上的信息。
这些卷积的
W
W
W 个权值初始化为标准正交的,因此是可逆的。
由于变量的变化,这个变换雅可比矩阵的对数行列式连接了损失函数,并且在训练网络时,还可以使这些卷积保持可逆。
在添加了来自耦合层的所有项之后,最终的可能性就变成了:
第一项来自球形高斯分布的对数似然。
σ
2
\sigma^2
σ2 项是高斯分布的假设方差,其余项是变量的变化。
2.3 早期输出
与其让所有的通道经过所有的层,我们发现在每
4
4
4 个耦合层之后输出
2
2
2 个通道到损耗函数是有用的。
经过网络的所有层后,最终的向量与之前的所有输出通道连接,得到最终的
z
z
z 。
早期输出一些维度使网络更容易在多个时间尺度上添加信息,并帮助梯度传播到更早的层,非常像跳步连接。
这种方法类似于(《Glow: Generative flow with invertible 1x1 convolutions》,《Density estimation using real nvp》)中使用的多尺度架构,但我们没有添加额外的压缩操作,因此矢量在整个网络中变得更短。
2.4 推论
一旦网络被训练,做推理只是简单地从一个高斯函数中随机抽取
z
z
z 值并在网络中运行它们。
正如(《Glow: Generative flow with invertible 1x1 convolutions》)和基于似然的生成模型(《Image transformer》)的早期工作所建议的,我们发现在训练过程中,从标准偏差较低的高斯样本中采样
z
s
zs
zs 可以产生质量稍高的音频。
在训练过程中,我们使用
σ
=
0.5
\sigma = \sqrt{0.5}
σ=0.5 ,在推理过程中,我们从标准偏差为
0.6
0.6
0.6 的高斯分布中采样
z
s
zs
zs 。
1
×
1
1\times1
1×1 卷积的逆就是权矩阵的逆。
逆转的损失是有保证的。
像以前一样,每个耦合层都包含了梅尔谱图,但现在仿射变换是反的,这些反变换也由损失来保证。
3 实验
对于所有的实验,我们训练的 LJ 语音数据(《The LJ speech dataset》)。
这个数据集包括
13100
13100
13100 个短音频剪辑,是一个说话人阅读
7
7
7 本非小说类书籍的段落。
这些数据包括使用 MacBook Pro 内置麦克风在家庭环境中记录的大约
24
24
24 小时的语音数据。
我们使用
22050
k
H
z
22050kHz
22050kHz 的采样率。
我们使用原始音频的梅尔谱图作为 WaveNet 和 WaveGlow 网络的输入。
对于 WaveGlow ,我们使用带有 80 个桶的梅尔光谱图,使用 librosa mel filter 默认值,即每个桶由过滤器长度归一化,且规模与 HTK 相同。
梅尔频谱图的参数为 FFT 大小为:
1024
1024
1024 , hop 大小为:
256
256
256 , window 大小为:
1024
1024
1024 。
3.1 Griffin-Lim
作为平均意见得分的基线,我们比较流行的 Griffin-Lim 算法(《Signal estimation from modified short-time fourier transform》)。
Griffin-Lim 采用整个谱图(而不是简化的梅尔谱图),并通过在频域和时域之间反复转换,迭代地估计缺失的相位信息。
在我们的实验中,我们使用了从频率到时域的 60 次迭代。
3.2 WaveNet
我们将其与流行的开源 **WaveNet ** 实现(《Wavenet vocoder》)进行比较。
该网络有
24
24
24 层,
4
4
4 个膨胀加倍周期,分别使用
512
/
512
/
256
512/512/256
512/512/256 作为剩余通道、门控通道和跳过通道的数量。
该网络使用
4
4
4 个单独的上采样层将梅尔谱图上采样至全时间分辨率。
使用 Adam 优化器(《Adam: A method for stochastic optimization》)训练该网络进行
1
×
1
0
6
1\times10^6
1×106 次迭代。
该网络的梅尔光谱图仍然是 80 维,但处理方法与我们在 WaveGlow 网络中使用的梅尔光谱图略有不同。
定性地说,我们没有发现这些差异在 WaveGlow 网络中发生变化时有听觉效果。
超参数的完整列表可以在线获取。
3.3 WaveGlow
我们使用的 WaveGlow 网络有
12
12
12 个耦合层和
12
12
12 个可逆的
1
×
1
1\times1
1×1 卷积。
如第
2
2
2 节所述,每个耦合层网络(
W
N
WN
WN )都有
8
8
8 层扩展的卷积,残差连接使用
512
512
512 个通道,跳步连接使用
256
256
256 个通道。
我们也在每
4
4
4 个耦合层后输出
2
2
2 个通道。
在
8
8
8 个 Nvidia GV100 GPU 上训练 WaveGlow 网络,使用随机选择的
16000
16000
16000 个样本剪辑进行
580000
580000
580000 次迭代,使用权重归一化(《Weight normalization: A simple reparameterization to accelerate training of deep neural networks》)和 Adam 优化器(《Adam: A method for stochastic optimization》)。
批处理尺寸为
24
24
24 ,步长为
1
×
1
0
−
4
1\times10^{-4}
1×10−4 ,当训练进入平稳期时,学习速率降低到
5
×
1
0
−
5
5\times10^{-5}
5×10−5。
3.4 音频质量比较
我们在 Amazon Mechanical Turk 上众包了平均意见得分( MOS )测试。
评级者首先必须通过听力测试才有资格。
然后让他们听一段话,然后他们用五分制的量表给这段话的和谐程度打分。
我们使用
40
40
40 个从训练集分离出来的音量归一化话语进行评估,并随机选择每个被试的话语。
评级完成后,每个评级者被排除在进一步的测试之外,以避免锚定影响。
MOS 得分见表 1 ,置信区间为 95% 。
虽然合成样品的 MOS 值在绝对尺度上接近,但没有一种方法达到真实音频的 MOS 值。
虽然 WaveGlow 的 MOS 值最高,但在收集了大约 1000 个样本后,所有方法的得分都很接近,只有微弱的显著性差异。
这与我们主观的定性评估大致相符。
测试的语音样本可以在(《Waveglow》)网上找到。
WaveGlow 最大的优点是训练简单,推理速度快。
3.5 推论比较速度
我们的 Griffin-Lim 实现可以在
507
k
H
z
507kHz
507kHz 合成语音,算法迭代
60
60
60 次。
请注意, Griffin-Lim 需要的是完整的谱图,而不是像本比较中的其他声码器那样需要简化的梅尔谱图。
我们将 WaveNet 的推理实现与 0.11kHz 的合成语音进行比较,明显慢于实际时间。
我们未经优化的 WaveGlow PyTorch 实现在 NVIDIA V100 GPU 上以大约
520
k
H
z
520kHz
520kHz 的频率合成了
10
10
10 秒的语音。
这比 Parallel WaveNet (《Parallel WaveNet: Fast high-fidelity speech synthesis》)报告的
500
k
H
z
500kHz
500kHz 略快,尽管他们是在一个旧的 GPU 上测试的。
对于较短的语音,每个样本的速度会下降,因为我们有相同数量的串行步骤,但产生的音频更少。
在 Griffin-Lim 和 Parallel WaveNet 上也可以看到类似的效果。
这个速度可以通过进一步的优化来提高。
基于计算 WaveGlow 的算法代价,我们估计在 Nvidia GV100 上完全优化的实现上限约为
2000
k
H
z
2000kHz
2000kHz 。
4 讨论
现有的基于神经网络的语音合成方法分为两大类。
第一组将将来的音频样本放在以前的样本上,以便对长期依赖性进行建模。
第一个自回归神经网络模型是产生高质量音频的 WaveNet (《Wavenet: A generative model for raw audio》)。
然而, WaveNet 推理在计算上具有挑战性。
从那时起,一些自回归模型试图在保持推理质量的同时加快推理速度(《Deep voice: Real-time neural text-to-speech》,《Deep voice 2: Multi-speaker neural textto-speech》,《FFTNet: a real-time speaker-dependent neural vocoder》)。
在撰写本文时,最快的自回归网络是(《Efficient neural audio synthesis》),它使用各种技术来加速自回归 RNN 。
使用定制的 GPU 内核,(《Efficient neural audio synthesis》)能够在 Nvidia P100 GPU 上产生
240
k
H
z
240kHz
240kHz 的音频,这使得它成为最快的自回归模型。
在第二组中, Parallel WaveNet (《Parallel WaveNet: Fast high-fidelity speech synthesis》)和 ClariNet (《Clarinet: Parallel wave generation in end-to-end text-to-speech》)在第一节中讨论。
这可能就是为什么 Parallel WaveNet 的结构只有
4
4
4 个通道通过 IAF ,而不是 WaveGlow 使用的
12
12
12 个流动步骤。
然而,由此产生的两个网络的复杂性和相应的模式崩溃问题可能并不值得所有用户这么做。
WaveGlow 网络使用简单且易于训练的模型实现了高效的语音合成。
我们相信这将有助于部署高质量的音频合成。