![b0e148d180d617935ba010ef870b62ec.png](https://i-blog.csdnimg.cn/blog_migrate/2372d5377fc36a73cb8fff7a2dd0d556.jpeg)
过去的语音波形生成模型,很多是自回归式的模型,生成速度慢。而非自回归一些模型如Parallel WaveNet和Clarinet,则需要两个网络:一个学生网络和一个老师网络。本文提出的WaveGlow不需要自回归的过程,只由一个网络构成,用一个损失函数进行训练,简单有效。
![97a05e68ffa1291d851ada13a0b9183f.png](https://i-blog.csdnimg.cn/blog_migrate/9d00d1da4d51f39e0aa379e6520da4c5.jpeg)
论文地址: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。
模型
模型结构
首先从简单的高斯分布中采样,将随机采样值通过神经网络进行变换,使变换后的采样点符合希望建模的分布。本文中,希望建模的分布是声音采样点以梅尔谱为条件的条件概率分布。
![249520dce2630089e99aa7daff5c5822.png](https://i-blog.csdnimg.cn/blog_migrate/580094dd9b0b44bfa43f306155061388.jpeg)
过去基于流模型的工作提出,只要神经网络的是可逆的,就可以通过最小化数据的负对数似然度来训练网络。当限制了神经网络的每一层都是双射,可以使用变量替换法则,将似然度表示如下:
![45947d5188eba9ef4b7fd0e32ad40338.png](https://i-blog.csdnimg.cn/blog_migrate/f37a440264fba0dfb560692c403612ad.jpeg)
其中,第一项是高斯分布的似然度,惩罚了变换后采样值的
在前向的变换中,将8个声音采样值拼成一个向量,称为 squeeze 操作。然后将这些向量通过多层流模型。模型由可逆的1x1卷积和仿射耦合层组成,结构如下:
![bae463ac7437235b5ce0fb8b0346aebe.png](https://i-blog.csdnimg.cn/blog_migrate/7aeb524814534c3e7a05011a2cdf00a1.jpeg)
仿射耦合层
可逆的神经网络一般由耦合层组成。本文中使用了仿射耦合层,正向变换如下:
![ffa871d44a398622d4226e2009cfd128.png](https://i-blog.csdnimg.cn/blog_migrate/ea08d61be96602bed4cf6edf5e52c195.jpeg)
逆向变换可以表示如下:
![0d24f56716883902563df82b6673d5c3.png](https://i-blog.csdnimg.cn/blog_migrate/705d3a1497f314a56e4e3aa201e264bd.jpeg)
其中
为了保证仿射耦合层的可逆性,在损失函数中加入惩罚项:
![3c9b8c11c49cdd2b0657d69586643436.png](https://i-blog.csdnimg.cn/blog_migrate/7642482abe66911685c949bd233c640f.png)
可逆1x1卷积
本文采用了类似Glow模型的结构,使用可逆1x1卷积混合通道间的信息,卷积核的参数进行正交初始化,保证可逆性。在训练过程中,通过将雅可比行列式加入损失函数,保持卷积的可逆性。
![2567fe9ca5d2cde38adf9cd381ea4e4c.png](https://i-blog.csdnimg.cn/blog_migrate/6de84e741ea8e815a392ecb84d50a696.jpeg)
实验结果
音频质量
本文将WaveGlow与WaveNet和Griffin-Lim方法进行了比较。评分人根据主观听感,对生成的音频进行打分。在测评中,WaveGlow的MOS分数最高。
![173fbbddf522d3640e5cb02e38d4e5ae.png](https://i-blog.csdnimg.cn/blog_migrate/59317977cc4c92926ff018696d722340.jpeg)
合成速度
Griffin-Lim配置为60次迭代,在Nvidia V100上合成速率可以达到507kHz。Parallel WaveNet的合成速率为 500 kHz。本文实现了Pytorch版本的WaveGlow,可以达到520kHz的速率。基于模型的计算复杂度进行估计,优化后的WaveGlow的合成速率上限为2000 KHz。
结论
WaveGlow可以高效地合成语音,并且模型简单,训练容易。因此,WaveGlow可以用于部署高质量的语音合成。
![bb83137ce526cab1fa6db485526c7abc.png](https://i-blog.csdnimg.cn/blog_migrate/f6244fa2d565724bd2c44f36fdf12de4.jpeg)
扫码识别关注,获取更多论文解读