LPCNET: IMPROVING NEURAL SPEECH SYNTHESIS THROUGH LINEAR PREDICTION

用了很久的声码器,但是细节一直似懂非懂,详细看一下
附上一篇写得很好的文章https://zhuanlan.zhihu.com/p/54952637

abstract

LPCNet,是wavenet的变种,把线性预测和循环神经网络结合在一起,大大提升了合成的效率。证明:(1)同样网络尺寸时,LPCNet比Wavenet的合成质量好;(2)LPCNet可以在3 GFLOPS的算力下实现很好的合成质量。

introduction
  • Wavenet网络声码器的弊端:算力消耗比较大
  • 传统声码器:使用线性预测建模谱包络(spectral envelope , vocal tract response声道响应激励);但是对于激励(excitation)就没有这么简单的模型,尽管对于此有一些研究,但是并不理想。
  • LPCNet,网络用来单独建模激励,谱包络建模的部分用线性预测做,因此可以用更少的神经元达到好的效果。
WaveRNN

LPCNet是基于WaveRNN改进的,wavernn主要包括一个GRU,两层全连接,还有一层softmax。
输入是上一帧语音 s t − 1 s_{t - 1} st1,conditioning parameter f f f,输出离散的概率分布 P s t P_{s_t} Pst
16bit model: 8bit粗划分,8bit细划分,本文没有继续采用,所以没有细说
在这里插入图片描述
还有进一步通过使WaveRNN矩阵稀疏以及0-1话的操作都可以进一步提升效率。

LPCNet

在这里插入图片描述

网络分成两部分,从语音提取特征的frame-rate network,输入(10ms,160样点)提取到embedding之后,语音合成只基于样点进行的,在sample-rate network中进行。
补充
训练时既有语音,又有特征输入,预测的时候只有特征输入,为了缓解这种mismatch,(1)加噪;(2) p t p_t pt是从特征中恢复的LPC,而不是直接从wav中得到的
在这里插入图片描述
e t = s t − p t e_t=s_t-p_t et=stpt也是残差训练的由来

训练和测试的两点mismatch
(1)训练的时候sample rate net的$ s_{t-1} 输 入 的 是 真 实 数 据 , 而 不 是 预 测 的 数 据 , 输入的是真实数据,而不是预测的数据, p_t 是 预 测 的 数 据 ; 而 测 试 的 时 候 没 有 真 实 数 据 。 这 一 点 会 有 一 些 不 匹 配 ( 是预测的数据;而测试的时候没有真实数据。这一点会有一些不匹配( p_t$的使用方法会减少mismatch);

(2)测试时仅有特征输入,通过零初始化的历史语音样值循环生成激励样值和语音样值,显然不一致,因此对输入语音做加噪处理以缓解 mismatch

此外为了增加训练数据的多样性(能量分布更多样),让原始语音反复经过一些随机的二阶 IIR 滤波器(零极点均在单位圆内的最小相位系统),这些滤波器的 gain 是随机的

特征提取

在这里插入图片描述
单独考虑声码器,特征从原始语音中提取。
特征包含18维的BFCC+1维picth(F0倒数)+1维互相关系数

BFCC 通过如下过程获得(和 MFCC 提取非常一致,二者仅在频带划分有差异)

  • 波形数据通过 FFT 到频谱
  • 频谱按 Bark 频率分成 18 个频带,计算每个频带内的能量(通过三角窗加权,也可以理解为三角滤波获取频谱包络)
  • Log 压缩动态范围得到倒谱
  • DCT 去相关得到最终的 BFCC
    pitch 参数通过一个基于互相关函数的 open-loop search 获得
3.1 Conditioning Parameters

经过frame-rate network的输出,见上图细节。

3.2 Pre-emphasis and Quantization

 像WaveNet会用8-bit的 μ l a w \mu law μlaw将输出数值规整到256以内。 但是对于语音,通常会更关注低频段, μ l a w \mu law μlaw的白量化噪声在高频段通常时候可以听到的,尤其对于16k有一个更大的高频倾斜。因此,有的工作会用16 bit的量化。

  • 本文用一阶预增强滤波器 E ( Z ) = 1 − α z − 1 E(Z)=1-\alpha z^{-1} E(Z)=1αz1, 实验论证 α = 0.85 \alpha =0.85 α=0.85时效果最好,
  • 最终合成输出时再经过一个反转 D ( Z ) = 1 1 − α z − 1 D(Z)=\frac{1}{ 1-\alpha z^{-1}} D(Z)=1αz11,de-emphasis

这样操作的使得噪声在奈奎斯特频率下的能量降低了16dB。大大减少了感知噪声并且将8-bit的 μ l a w \mu _{law} μlaw用于高质量的语音合成。

3.3 Linear Prediction

网络声码器没有对语音做任何先验假设,直接用网络建模<glottal pulses, noise excitation, the response of the vocal tract>。
其中vocal tract response可以通过一个全极点滤波器建模
在这里插入图片描述
其中 s t s_t st t t t时刻的语音信号; a k a_k ak是当前帧 M t h M^{th} Mth的线形预测系数(LPC)

  • a k a_k ak的计算方式—首先将18-d Bark频谱转成线性频域功率谱密度PSD(去filter),然后PSD用逆傅立叶变换IFFT转成自相关。然后用LD算法从自相关中算predictor(求解LPC自相关系数,在数据比较大,矩阵求逆比较困难时用)。从谱中计算predictor,确保不会迁移额外的信息。尽管这种方式计算的LPC分析不够精确(因为谱的低分辨率),但是在输出的影响是比较小的,因为网络能够去补偿。这是优于open-loop filter方法的地方。

  • 用网络声源震动而不是采样值的方式,不仅降低了建模的难度,而且会轻微缓解 μ l a w \mu_{law} μlaw量化带来的噪声,因为生成激励的幅度远小于预增强之后的信号。输入包括上一时刻的激励 e t − 1 e_{t-1} et1,上一个信号 s t − 1 s_{t-1} st1。还有当前的prediction p t p_t pt。把 p t p_t pt s t − 1 s_{t-1} st1包含在内是因为open-loop 在仅基于 e t − 1 e_{t-1} et1合成时效果比较差

3.4 output layer

为了能够更好的计算输出层的概率,同时不把前一层搞得很复杂,作者提出了Dual-FC,定义是(4),将两个全连接层的输出element-wise相加。
在这里插入图片描述
在把DualFC和一个常规的很复杂的全连接层相比时,质量会有改进。这在理论上也是可以解释的:确定一个值是否在特定区域内下降( μ l a w \mu_law μlaw的量化间隔)需要两次比较,每一个全连接层的tanh完成一次。并且把网络层的输出打印出来,也是支持这个分析的。
最后经过一个softmax处理,得到 e t e_t et的概率 P ( e t ) P(e_t) Pet)

3.5 Sparse Matrices

 element-by-element的稀疏会阻碍有效的向量化,我们用的是block稀疏。首先是dense matric,然后强制有最小幅度的块数值为0,直到达到想要的稀疏性。发现16*1的块精度最好,同时向量化也容易。
 除了非零块,我们还包括稀疏矩阵中的所有对角项,因为它们最有可能是非零的。即使它们不是水平或垂直对齐的,对角线项也很容易向量化,因为它们会导致元素与向量操作数的乘法。引入对角线项可以避免仅对对角线上的一个元素强制16x1非零块。

3.6 Embedding and Algebraic Simplifications

代数简化

3.7 Sampling from Probability Distribution

从输出分布中直接采样会产生较多的噪声,做一个处理

(1)step 1: 从pitch correlation( 0 < g p < 1 0<g_p<1 0<gp<1)得到c,

在这里插入图片描述
(2) step2: 从概率中提取一个常数,确保常数阈值T以下的都是0,避免低概率的引发impulse noise。 发现:T=0.002时可以在impulse noise和合成语音自然度之间去一个折衷。
R ( ∗ ) R(*) R()代表denormalize操作
在这里插入图片描述

3.8 Training Noise Injection

在这里插入图片描述
合成语音的时候,处理的语音和训练集不同,这个不匹配会造成很大的失真,为了增强模型的鲁棒性,在训练的时候插入噪声。
线性预测使得插入噪声的细节非常重要:当在语音中插入噪声,但是网络用干净的激励训练时,发现系统会生成和合成滤波器形状一样的噪声,按照图2方式添加时,网络可以在信号上很好的建模,因为尽管它的输出和是预测的残差,输入之一是用于计算residual的。和CELP很像,极大减少了合成的artifacts.
为了使得噪声和信号幅度成比例,在u_law域添加,分布从没有噪声到【-3,3】。

4. evaluation

复杂度比较:LPCNet的复杂度主要来源于两个GRU和DualFC,计算是在2.8GFLOPS
WaveNet是在16GFLOPS; WaveRNN,10GFLOPS;SampleRNN 50GFLOPS

source-filter model

source-filter模型是假设声源独立。信源部分就是声带震动,发清音时没有震动就用白噪声建模,发浊音时喉咙有震动就用脉冲串建模;信道部分就是发不同音时口腔、鼻腔、舌头、嘴唇这些配合形成的通道,filter。这是上世纪70年代的东西,也是 LPC10、CELP、MELP 等 codec 的理论基础。
cs224n课件截图
glottal spectrum/pulse声门脉冲
vocal tract response 声道响应

参考:
【1】知乎https://zhuanlan.zhihu.com/p/54952637

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值