参考文章
语音合成(speech synthesis)方向三:声码器lpcnet系列

一、什么是LPCNet

目前,声码器大致可以分为基于相位重构的声码器和基于神经网络的声码器。基于相位重构的声码器主要因为TTS使用的声学特征(mel特征等等)已经损失相位特征,因此使用算法来推算相位特征,并重构语音波形。基于神经网络的声码器则是直接把声学特征和语音波形做 mapping,因此合成的音质更高。目前,比较流行的神经网络声码器主要包括wavenet、wavernn、melgan、waveglow、fastspeech和lpcnet等等。其中,lpcent兼具复杂度低、合成音质高等优点,因此受到学术界和工业界的关注。
LPCNet: Improving Neural Speech Synthesis Through Linear Prediction,该文章最先提出了神经网络声码器 Lpcnet。该声码器把 source-filter 部分的 source 使用神经网络来预测,而filter部分则使用DSP的方法进行计算,具体如下的公式。其中每个采样点 x 是由 filter 部分的 p 和激励 e 来计算,而激励 e 使用神经网络来预测,p则直接根据DSP方法计算出来。

lpcnet声码器其原理和wavernn的区别如下图所示:左边为 wavernn 的示意图,该网络直接对采样点进行预测,整个流程为自回归模型。右边为 lpcnet 的示意图,其神经网络只对source的激励e进行预测,而filter的部分直接进行计算获取。该文章的作者回答这样的做的原因,是他认为使用一个神经网络不能同时很好的推算 source 和 filter 的两部分信息

这里的笔者理解是:源滤波器模型是在传统方法中广泛运用的声学建模,源指的是基频信号,滤波器指的是频谱特征,如mcep、lsf等。
而 lpcnet 同样是采用这种建模方式,不过源是通过网络预测得到的,而滤波器部分是直接通过信号处理知识直接计算得到的

接下来看一下 Lpcnet 的详细系统架构,如下图所示。整个系统由 帧级别的 frame rate network(黄色部分)和采样点级别的 sampling rate network(浅蓝色部分)。 frame rate network 每一帧计算一次,其中使用了 2 层 1*3 的一维卷积,因此该网络的感受视野为 5 帧。sampling rate network 是每一帧计算 160 次(如使用16khz的音频,10ms帧移),该部分为 autoregressive 模型,每一个激励 e 的推测都需要前一个推测 e 作为条件。

接下来看一下声码器lpcnet的实验结果。首先,通过计算lpcnet的复杂度为2.8GFLOPS,而其它典型的声码器wavenet为16GFLOPS,wavernn为10GFLOPS,SampleRNN为50GFLOPS,由此可以看出lpcnet的复杂度非常低。另外,合成音质方面如下图所示,ref线为原始音频,绿色线为u-law转换,该转换造成部分音质降低,红色线为lpcnet,蓝色线为wavernn。由图可知 lpcnet 在相同的复杂度情况下,合成的音质是优于 wavernn。

二、当前研究情况如何

到目前为止,研究 lpcnet 的文章很多,主要研究两个维度:提高音质和降低复杂度。其采用的策略大致包括 LP-MDN ,gmm 采样,multi-sampling 多采样,multiband 等等

1、音质提高

该部分主要讲一下Improving LPCNet-based Text-to-Speech with Linear Prediction-structured Mixture Density Network这篇文章。这篇文章主要在保持Lpcnet较低复杂度的优点前提下,提出 LP-MDN,提高了语音合成质量。本文提到 Lpcnet 模型并没有完全利用语音合成的机制,而且激励参数使用 u-law 量化造成不稳定现象。针对以上问题,本文做出以下贡献
1)提出基于 LP-MDN 的声码器 ilpcnet,该声码器可以充分利用 lp(线性预测) 和 激励 之间的关系,替换原来的激励 u-law 离散分布,使合成音质提高。
2)提出训练和生成的策略,比如 stft loss 等等。
考虑到采样点和激励之间的分布关系,本文提出 LP-MDN(mdn 的均值、方差等参数是网络产生),该模型假设speech 和激励之间的分布关系如下图所示,因此可以使用神经网络进行 w,u,s 的预测。

此处笔者的理解:原来模型预测的激励是 u-law 量化后的,论文作者觉得可以深入挖掘一下激励和语音的关系,所以提出了 LP-MDN 模型来描述这种关系

本文把LD-MDN融合到Lpcnet提出了ilpcnet,具体的结构如下图所示。其中与原始的lpcent不同点为
1)upsampling network 最后一层由 fc 替换成 conv;
2)waveform generation network 的 gru-a 的输入只有上一个采样点和 frame feature,原来的除此之外还有上一个激励值 e 和当前滤波器值 p
3)最后使用 LP-MDN 进行采样点生成。

此处笔者理解,从图中看,base的lpcnet采用的源滤波器模型来生成语音采样点,而提升后的网络使用的 LP-MDN 模型更像是从滤波器结果p到采样点的映射,由于模型输入还包括前采样点和帧级特征,所以任然是自回归模型
若还是从源滤波器的角度思考网络,讲LP-MDN看成一个新的源滤波器模型,那么上方由帧级特征和前向采样点生成的就代表源 e,那么和base 网络的区别就是e的预测不再需要滤波器 p 和前源 e 的值


2、效率的提升策略之多采样(multi-sampling)

部分主要涉及两篇文章:Gaussian Lpcnet for Multisample Speech Synthesis和Bunched LPCNet : Vocoder for Low-cost Neural Text-To-Speech Systems。

原来的lpcnet主要对激励e部分进行预测,而且该部分网络samlping rate network为autoregressive的模型,每次只推理一个值。为了提高推算速度,则提出一次推出多个值

a、Gaussian Lpcnet

本文章提出了基于 Gaussian 采样方法和 multisample 多点采样的方法,使其在合成质量相当的前提下,合成速度提高了1.5倍(该工作相当不错)。相对于原始Lpcent,本文主要做以下几点的改进:
第一,使用 Gaussian 采样替代原来的 softmax。原来的音频需要进行 u-law 转换:使用8bit进行采样点表示(造成音质损失),则 softmax 的维度则为256。本文使用 gaussian 直接对 16bit 进行采样,则采样部分由原来 lpcnet 的dualfc(256)+softmax(256) 替换成 fc1(128)+fc2(2) 。另外文章提到不需要对音频进行加重处理。
第二,本文章进行采样时每一步推理两个采样点(两点之间互不影响)。详细结构如图2:左边为原始lpcnet结构,右边为本文的 guassian lpcnet 的结构。


此处笔者理解:这个方将逐点的 u-law 值预测改成了预测点的高斯分布的均值和方差,这样就降低了输出层的参数个数,并且采用两点联合预测,进一步提升实时率

b、bunched lpcnet

该文章为了提高音质,设计如下图的结构,GRUa和GRUb部分都是多点共享,Dual-FC和softmax是每点独享。但每个激励之间并不是独立的,从第二个激励参数e开始,其的输入需要前一个e与gru输出进行拼接,该部分也是一个自回归的模式。而且gruA的输入不再输入一个点的信息,而是输入多个点的信息。该结构通过共享GRU部分,按理说该部分的推理速度正比于bunch sample的大小。

此处笔者理解:较 base ,对 GRU 层做了权值共享,比如 bunch=2,那么每两点的推理使用的 GPU 层输出是相同的,这样子就减少了一次GRU层的计算量,主体的思想是如上所述,可能为了保持合成质量,对网络又做了一些小改动,比如 GRU 层的输入前多了个 embedding 层来综合考虑 p、e、s 的值,以此权衡 GRU 的计算量和精确度

在上述调整之外,还做了如下调整:原始的lpcnet系统bit为8位,则softmax为256。为了减小softmax,该部分提出了bit bunching(本篇文章主要使用B=11,分为(7,4),则softmax大小分别为(128,8)),就是用较小的softmax 来表示激励的高和低bit,具体如图3所示。

此处笔者理解:bit bunching 相当于之前的 sample bunching 的细粒度版,本质没有啥区别

接下来看一下bunched lpcnet实验结果:本实验的 S和B分别代表sample bunching和bit bunching。其中s=1, b=(8,0)为原系统lpcnet,其作为基准。table1对比了RTF(real time factor)和CR(complexity ratio),由结果可知,增大S和改变B,其速度提升很多。尤其S=4,B=(7,4)比S=1,B=(8,0)速度提高了差不多2倍。从Table 2和Table3的mos测试可知,提高S和B会造成MOS下降,在可接受范围内S=2选择较好。


小结:**multi-sampling 的方法的本质就是解决开销最大的gru层,使其多点共享,剩余的层可以独享。**本方法还需要注意各激励之间的关系,使用局部的autoregressive 是非常有必要的。另外输入条件p,e,s可以尝试不同的搭配和嵌入维度,由此提高性能。

3、效率的提升策略之多频带(multiband)

部分主要涉及两篇文章:FeatherWave: An efficient high-fidelity neural vocoder with multi-band linear prediction 和An Efficient Subband Linear Prediction for LPCNet-based Neural Synthesis
原来的lpcnet主要对fullband部分进行预测,而该部分则是把fullband使用PQMF算法分成四个band,然后同时进行四个band预测。另外featherwave的sample rate network使用类似wavernn的高低8位预测,但整个架构为lpcent,因此也被归为该总结中。

a、multiband WaveRNN

首先,看一下multiband WaveRNN结构,知道什么叫做multiband合成,如下图所示。

  1. 该声码器首先对音频进行分带,然后输入到WaveRNN
  2. 该WaveRNN每次输出不再是一个点,而是输出多个点,其点数由subband的个数决定(常分为4个频带,使用算法PQMF,如下图所示)
  3. 最后进行 merge band。(对于我这个非声学出来的学生,才接触语音领域两年,不太容易想出该方法)


b、featherwave

具体的结构如下图所示,该系统架构跟原始的LPCNET相同,只是sample rate network变成了multiband,每次输出subband多个采样点。至于如何进行频带划分,可以参考QMF算法。

另外,featherwave的公式变成multi-band linear prediction(MB-LP)。

此处的笔者理解:图示表示的是应该是一个band的推理流程,我们可以看到输入从 lpc 变成了 mel 谱,说明QMF算法是在mel谱上进行的,将一个全带的 mel 谱分为多个子谱,然后讲子谱送到模型中。模型输入应该是子谱的采样点,之后的merge band应该也是某种信号处理方法

看一下featherwave的实验。首先,通过计算可得到FeatherWave时间复杂度为1.6GFLOPS,该值远小于现在的LPCENT 2.8GFLOPS。从实验结果可知:单核情况下,合成16k音频,FeatherWave合成速度是LPCNET的两倍多,24k的合成速度也几乎2倍(Table 1)。然后从MOS方面进行对比,FeatherWave的MOS比LPCNET稍高。

c、subband lpcnet

很多使用multiband技术的文章都是假设被分的subband之间互不影响,因此可以同时进行subband的推理。而本文提出 subband 之间是存在相互作用关系,因此提出了相互作用的 multiband 自回归模型,使lpcnet的合成质量和推理速度都得到提高。首先看一下自回归的模型公式和子代公式,其中 h 为声学特征,两者的区别为每次推理4个点(划分为4个子带)


现有的multiband系统使用上边的公式,认为每个子代之间相互独立,但DSP技术提出每个subband之间存在很强的联系,因此本文提出了如下的多带联合分布公式

可能公式看起来很繁琐,可以看下图所示,**fullband被分为4个子带,图中的点代表每一个采样点,箭头代表关联。**当进行采样的时候,绿色点可以同时进行计算,因此达到多采样点的目的,这样设计是否很酷。

现在,讲一下该文章信号处理的两个阶段:

  • 分析阶段:对fullband进行子代划分,然后求取第一个子代的lsp和激励e。
  • 合成阶段:把声学特征经过声码器合成每个子带的采样点,然后进行整合成最终的时域波形。

此处笔者理解:本文作者是在子带层面上又进行了一次自回归,所以提参时只保留第一个子代的 lsp 和 e;相同的合成时,我们自回归生成每个子带的采样点,来还原波形,也就是宏观上每次输出的四个采样点为x(1,k),x(2,k-1),x(3,k-2),x(4,k-3),就是说同一时间生成的子带上的采样点不在同一个时间步上

最后看一下该subband lpcnet声码器的设计图3。与原来的lpcnet不同的地方为:

  • frame rate network最后存在三个fc层,分别与sample rate
    network中的gru相对应。其中grua被四个子代共享,grub为第一个子代使用,gruc为其它三个子代共享 。
  • 然后,第一子带推理激励后,使用计算出采样点,推理其它子带采样点。
  • 如此模型对低频刻画的更好,因为grub是第一个子代是独立的

  • 最后,我们看一下该文章实验结果。本文计算的复杂度为:wavernn 10GFLOPS, wavenet 100 GFLOPS, fullband LPCNET 3.5GFLOPS ,本文提出的subband LPCNET 为1.2GFLOPS,几乎速度比fullband lpcnet提高三倍。MOS测试方面,subband LPCNET(w/)为本文方案,subband LPCNET(w/o)为子带之间互不关联,由table 2可知,本文提出的方案MOS最高。

三、总结

lpcnet 本身是神经网络声码器和源滤波器模型的结合,近几年对其质量的优化主要是如何优化源滤波器模型,而对效率的优化主要是多采样点预测的方式,其中一个是多点联合预测的同事降低网络负责度;另一种是采用信号处理中的分子带的思想,并行生成每个子带上的采样点

知识点学习之LPCNet相关推荐

  1. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  2. 关于图计算图学习的基础知识概览:前置知识点学习(PGL)[系列一]

    关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL)) 0.1图计算基本概念 首先看到百度百科定义: 图计算(Graph Processin ...

  3. HTML知识点学习(二)

    文章目录 Lesson2-周二(7.13) 问题总结 一.HTML表格 表格的嵌套使用 二.HTML超链接 HTML图片 HTML列表 分类 标题 段落和DIV块 HTML颜色 字符实体(后面的分号切 ...

  4. 大一上学期C语言不熟知识点学习总结

    大一上学期C语言不熟知识点学习总结通过前几章对顺序结构程序设计程序.if选择结构.switch语句.循环结构.数组.函数的学习,这一次我将主要针对几种不熟悉的知识点及题型进行分析. 一. 增1和减1运 ...

  5. 微服务基础知识点学习笔记(持续更新)

    微服务基础知识点学习笔记(持续更新) Conrtoller层 整体包括:HTTP协议,JavaWeb三大组件(filter.servlet.listener).SpringMVC(SpringMVC的 ...

  6. [软考]系统架构设计师 备考经验分享(二) - 知识点学习+综合知识篇

    2021.12.20 更新下成绩 49,53,55 原文: 本篇对应备考计划中的1.2阶段: 相关分享: 备考计划篇:[软考]系统架构设计师 备考经验分享(一) - 备考计划篇 知识点学习+综合知识篇 ...

  7. Android基础知识点学习总结

    Android基础知识点学习总结 安卓基础知识个人学习笔记分享~ 一.Android系统架构 Linux内核层→系统运行层→应用框架层→应用层 1.Linux内核层:Android系统是基于Linux ...

  8. 【愚公系列】2023年04月 WPF运动控制平台-002.运动控制平台知识点学习

    文章目录 前言 一.知识点学习 1.MCT2008软件配置限位生效并导出配置文件 2.轴卡的初始化功能实现 3.轴卡的点位运动功能实现 4.轴卡的限位+Home回原功能实现 前言 运动控制(Motio ...

  9. 【朝夕教育】2023年04月 WPF运动控制平台-002.运动控制平台知识点学习

    文章目录 前言 一.知识点学习 1.MCT2008软件配置限位生效并导出配置文件 2.轴卡的初始化功能实现 3.轴卡的点位运动功能实现 4.轴卡的限位+Home回原功能实现 前言 运动控制(Motio ...

  10. A.关于图计算图学习的基础知识概览:前置知识点学习(Paddle Graph L)【一】

    图学习图神经网络算法专栏简介:主要实现图游走模型(DeepWalk.node2vec):图神经网络算法(GCN.GAT.GraphSage),部分进阶 GNN 模型(UniMP标签传播.ERNIESa ...

最新文章

  1. App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW int
  2. MySQL 的性能(下篇)—— 性能优化方法
  3. WPF中StringFormat的用法
  4. Android中的事件处理机制
  5. 下列选项中 采用边界值平滑_使用Illustrator中的混合工具创建很有个性的蛋宝宝...
  6. python审批流系统_有赞移动关于权限与审批流程的标准化
  7. 1105学习笔记 数组的算法上
  8. C++类的包含编译模型
  9. scala练习100道解析
  10. pandas 行列转换
  11. 各种芯片复位电路分析
  12. 硬链接和软连接 linux 的ln命令
  13. 关于html,body{height:100%}的理解
  14. 利用 POI 修改插入图表
  15. 手持PDA助力零售卖场管理
  16. 数据结构考研:电脑磁盘碎片的定义、产生原理和清理原因(文件碎片/机械硬盘/固态硬盘/硬盘清理/计算机/软件工程/王道论坛)
  17. 海盐、低钠岩盐、腌制盐……这么多盐到底有什么不同啊?
  18. word表格导出html代码,(网页源代码中的表格数据怎么导出excel)如何将把从WORD、EXCEL中复制的内容转换成HTML源代码,再通过网页表单提交上传到数据库?...
  19. android 插入 百度移动联盟 banner广告,百度移动应用广告盟联ane使用教程.docx
  20. SpringCloud版本Hoxton SR5 --- 第八讲:Sleuth 分布式链路跟踪 整合Zipkin + Elasticsearch持久化

热门文章

  1. 栈和队列的顺序和链式存储结构
  2. 如何使用Win10原生的截图工具Snipping Tool?
  3. mysql身份证校验码_javascript身份证验证代码
  4. 【工业机器人】机器人产业的前途取决于人工智能关键技术的发展
  5. JavaScript参考文档
  6. Java集成建行龙支付接口(详细)
  7. winform程序:newtonsoft json 序列化时出现 “unterminated string. Excepted delimiter...
  8. 1、贪心NLP——课程介绍及NLP概论
  9. Learning Modality-Specific Representation with Self-Supervised Mulit-Task Learning for MSA
  10. EBS之JTF_Grid 开发总结