端到端合成论文——声码器——HiFi-GAN
Kong, Jungil, Jaehyeon Kim, and Jaekyoung Bae. “Hifi-gan: Generative adversarial networks for efficient and high fidelity speech synthesis.” Advances in Neural Information Processing Systems 33 (2020): 17022-17033. citations:476 韩国的kakao多音通讯
github:https://github.com/jik876/hifi-gan
试听音频:https://jik876.github.io/hifi-gan-demo/
声码器HiFiGAN的结构和训练.pptx
解决什么问题
- 解决了之前基于GAN生成波形的vocoder,效果不如基于自回归或基于flow的vocoder的问题;
用了什么方法
- 提出了HiFi-GAN语音合成声码器,基于GAN,输出高保真音质,合成计算效率高,速度快;
- 由于语音由具有不同周期的正弦信号组成,证明了建模音频的周期模式对提高音质至关重要;用了多周期的判别器,并用多尺度判别器进行平滑,也是学习不同频段;
效果如何
合成质量优于基于自回归的wavenet和基于flow的waveglow;
合成速度在V100 CPU上为3.7MHz;
输入噪声,能合成出训练集没有的说话人音色;
小模型的前提下(0.92M 参数量),相同模型下能达到自回归方法的相同音质,并且在CPU上的合成速度比自回归快十几倍;
使用相同的判别器D和学习机制可以训练不同配置的生成器G,这表明可以根据目标配置灵活选择生成器配置,而不需要对判别器进行耗时的超参数搜索。也就是说判别器很通用,训好一个就可以适用于多个生成器,节省了判别器的训练时间,以及GAN整体的训练时间;
还有什么问题
- 这么多loss好收敛吗?
- 音质还能提高吗?
- 训练多久才能训好?
- 感受野多大,有延迟吗?
相关工作
之前的vocoder模型有基于自回归的wavenet,但是自回归方法合成速度慢;然后是基于flow的生成模型parallel wavenet(IAF model)、waveglow;然后是基于GAN的生成模型melgan、clarinet、GAN-TTS,但基于GAN的这几个模型音质没有基于自回归或flow来得好;
思路
提出一个基于GAN的vocoder,计算效率高,合成音频质量优于自回归或flow的方法;
相比于之前相近的 MelGAN,改进点在于:
- 引入了多周期判别器(Multi-Period Discriminator, MPD)。 HiFiGAN 同时拥有多尺度判别器(Multi-Scale Discriminator, MSD)和多周期判别器,尽可能增强 GAN 判别器甄别合成或真实音频的能力,从而提升合成音质。
- 生成器中提出了多感受野融合模块。 WaveNet 为了增大感受野,叠加带洞卷积,音质虽然很好,但是也使得模型较大,推理速度较慢。 HiFiGAN 则提出了一种残差结构,交替使用带洞卷积和普通卷积增大感受野,保证合成音质的同时,提高推理速度。
模型
考虑到语音是由多个不同周期的正弦波组成的,因此把GAN的判别器用一组子判别器组成,每个子判别器负责一部分周期信号的建模(对音频抽取不同周期分量,每个判别器只判别其中一个分量);GAN的生成器结构是由不同长度的残差块组成,不同长度的输出对应到不同的判别器;
HiFiGAN由一个生成器和两类判别器组成,两类判别器分别是多尺度(multi-scale)和多周期(multi-period)判别器;
生成器
输入mel谱,噪声不作为额外输入;结构全用卷积组成,通过 **transposed convolutions **进行上采样(帧->采样点),直到输出序列的长度与原始波形的时间分辨率相匹配;transposed convolution 后接多融合感受野(multi-receptive field fusion (MRF)) 模块;
生成器结构:
转置卷积 Transposed convolutions
转置卷积我的理解是python的broadcast过程,每个点都和卷积核乘一遍,得到对应位置的卷积核大小的矩阵,再求和;它的输入输出长度关系和普通卷积的输入输出长度关系反过来;
输入比如[80,1]维mel谱(一帧),输出比如[1,256]的波形,输出256个采样点?那么给生成器的输入是按帧送入,还是可以多帧一起送入?TODO?;
mel长度*帧移 = 音频长度;帧移(hopsize)大小设置为256, 那么对应的mel长度需要上采样 256倍;
如果需要完成张量[80,1]到[1,256]上采样256倍,可以依次执行ConvTranspose1d(80, 1, kernel_size=(32,), stride=(16,), padding=(8,)) 输出[1,16]、ConvTranspose1d(1, 1, kernel_size=(32,), stride=(16,), padding=(8,)) 输出[1,256];
多融合感受野 Multi-Receptive Field Fusion (MRF)
残差块residual block中的kernel sizes 和 dilation rates 都是不同的(为了得到不同的感受野),然后求和;多个MRF再求和;
多融合感受野(MRF)对于波形生成的作用:
- 残差网络中不同的kernel_size,意义在于用不同大小的窗口去提取mel-spectrogram的原始信息;
- 带洞卷积使得即使是在时间步上较远距离的输出,也有更多的相同输入,解决较长时间步长上数据的依赖性(使用带洞卷积增大感受野,较长时间步长上数据的依赖性:例如一个音素的时长为100ms时,就会使得2200个采样点具有较高的相关性);
伪代码:
判别器
多周期判别器 multi-period discriminator(MPD)
音频的不同部分分别送入子判别器中;多周期,设置周期为[2, 3, 5, 7, 11] ,预先对其按照参数period进行等距分组; 将1维的长度为T的音频reshape到2维,高度height为T/p,weight长度为p,其实是把1维数据转成2维了;作为判别器的输入;
MPD对不同范围内的频段进行学习。通过等距分组,相当于对原始信号进行了降采样,从而不同的子判别器对应不同的频率范围,假设采样频率为22k的信号(信号频率最大11k),各个子判别器对应的可学习频率范围:
period = 2: 0 ~ 5.5k,period = 3: 0 ~ 3.7k,period = 5: 0 ~ 2.2k,period = 7: 0 ~ 1.57k,period = 11: 0 ~ 1k;
子判别器的结构为conv2d,2D卷积,卷积核weight=1;
如下图,周期为3,第一行抽取的采样点为原始序列的第[1,4,7,…],第二行抽取的采样点为原始序列的第[2,5,8,…],第三行抽取的采样点为原始序列的第[3,6,9,…];
还是比较巧妙的,多次利用了输入,把输入进行不同的reshape,然后放进不同的判别器中,如果我去做,可能会只会放进同一个判别器中,因此这里还有一个很重要的思路是分开了子判别器,把一个网络结构拆成多个网络,每个网络负责一部分,这个思路;而不是像我想的把网络减轻负担,输入进行拆分,然后堆叠,然后送入网络;
多尺度判别器multi-scale discriminator (MSD)
由于MPD中的每个子鉴别器只接受不连续的样本,我们添加MSD来连续评估音频序列。提出MSD的是来自于MelGan;
MSD也是由多个子判别器组成,每个判别器的输入尺度不同,分别是raw audio, ×2 average-pooled audio, and ×4 average-pooled audio;
网络结构中归一化用的是谱归一化spectral normalization (Miyato et al., 2018) ,使得训练更稳定;
可以把多尺度判别器的作用理解为平滑波形,因为多周期判别器的输出是不连续的波形,就需要进行平滑,多尺度判别器就扮演了这一角色;
由傅里叶变换可知,信号是由无数个正弦波信号叠加而成的,多个子判别器的设置,分别处理不同降采样倍率的信号,以学习音频中不同频段的“模式”,假设采样频率为22k(信号频率最大11k):
第一个MSD判别器能采的信号频率为0 ~ 11K;第二个为0 ~ 5.5K;第三个为0 ~ 2.25K;
这里能改进,能做成带通滤波器吗??
目标函数
主要是GAN的loss,还有两个辅助loss
- GAN Loss 。LS-GAN,non-vanishing gradient flows 的最小二乘loss,相比于原始GAN loss,它不会有梯度消失的问题;
$$
\mathcal{L}{Adv}(D;G)=\mathbb{E}{(x,s)}\left[(D(x)-1)^2+(D(G(s)))^2\right]
$$
$$
\mathcal{L}_{Adv}(G;D)=\mathbb{E}_s\left[(D(G(s))-1)^2\right]
$$
其中,$x$ 是真实音频; $s$ 表示输入条件,即真实音频的mel谱;
Mel-Spectrogram Loss 。在生成器的损失中添加mel谱loss,以提高生成器的训练效率和生成音频的保真度,因为mel谱是频域信息,添加该loss有助于捕捉时频分布,并且由于人类听觉系统的特点,也可以预期会有更侧重于提高感知质量的效果。
用生成器合成的波形提取的mel谱与真实波形提取的mel谱计算L1距离
$$
\mathcal{L}{Mel}(G)=\mathbb{E}{(x,s)}\left[|\phi(x)-\phi(G(s))|_1\right]
$$
- Feature Matching Loss 。在生成器的损失中添加 特征匹配loss,该特征来自于判别器,在判别器的网络中的每层输出(中间特征),认为具有样本的一定特征,可以进行特征的相似度度量;
$$
\mathcal{L}{FM}(G;D)=\mathbb{E}{(x, s)}\left[\sum_{i=1}^T \frac{1}{N_i}\left|D^i(x)-D^i(G(s))\right|_1\right]
$$
其中,$T$ 表示判别器层数,$D^i$ 表示判别器第 $i$ 层的特征,$N_i$ 表示判别器第 $i$ 层的特征数量;
- Final Loss。 生成器和判别器的总loss组成为
$$
\mathcal L_G = \mathcal L_{Adv}(G; D) + λ_{fm} \mathcal L_{FM}(G; D) + λ_{mel}\mathcal L_{Mel}(G)
$$
$$
\mathcal L_D=\mathcal L_{Adv}(D;G)
$$
设置 $\lambda_{fm}=2$ ,$\lambda_{mel}=45$ ;因为判别器是由一系列的子判别器MPD、MSD组成,上式可以写成子判别器的形式:
$$
\mathcal{L}G =\sum{k=1}^K\left[\mathcal{L}{Adv}\left(G ; D_k\right)+\lambda{f m} \mathcal{L}{F M}\left(G ; D_k\right)\right]+\lambda{\text {mel }} \mathcal{L}_{\text {Mel }}(G)
$$
$$
\mathcal{L}D =\sum{k=1}^K \mathcal{L}_{\text {Adv}}\left(D_k;G\right)
$$
其中,$D_k$ 表示MPD和MSD的第 $k$ 个子判别器;
实验
LJSpeech 数据集
MOS分,合成速度:
消融实验
可以看出MPD起作用要大于MSD;
总结
HiFiGAN的特点:
- 生成器上采样后采用了MRF模块,使用不同大小的卷积核提取mel-spectrogram的原始信息,对于数据中所存在的较长时间步上的依赖(一个音素涉及可能到上千的采样点),采用堆叠的带洞卷积进一步增大感受野,提升信号的生成质量。
- 相对于MelGAN, HiFiGAN在损失函数上增加了mel-spectrogram损失项,使得训练更稳定,获得了更好的音频质量。
- 语音信号由不同周期的正弦波组成,需要对不同频率尺度的信号进行建模,HiFiGAN提出了MPD模块对信号中的不同频率范围的信号进行建模,MPD会对原始信号按一定的规则进行分组,使得数据长度有所减小,所以同时使用MSD对连续的数据中存在的周期模式进行建模,从而更好的捕捉到信号中不同的周期信息。
评价
提出一种基于GAN的vocoder,主要改进在于判别器用了多周期判别器,发现了特征的特点,就是波形是由多个正弦波组成,不同周期的正弦波直接影响音质,那么如果对每个周期正弦波都能建模好,最后音质肯定也好,出于这个角度用了多尺度和多周期判别器,比较巧妙。此外,每个判别器都是由子判别器们组成,每个子判别器都是不同的输入,这个子判别器的思路也是比较巧妙的;