WaveNet深度学习网络-结构简介

时间:2024-03-11 20:49:09

参考博文:https://www.jianshu.com/p/bb13ae73e427

声明:转载请声明作者,并添加原文链接。

简介

  WaveNet是probabilistic and autoregressive的生成,对每个预测的audio sample的分布都基于前面的前面的sample分布。在TTS的应用中,能达到state_of_art的效果,听觉感受上优于parametric and concatenative的系统。同时系统还可以生成音乐,作为discriminative model对phoneme做识别。Wavenet模型是一种序列生成模型,可以用于语音生成建模。在语音合成的声学模型建模中,Wavenet可以直接学习到采样值序列的映射,因此具有很好的合成效果。目前wavenet在语音合成声学模型建模,vocoder方面都有应用,在语音合成领域有很大的潜力。

  这篇博客主要解读WaveNet 语音识别/合成算法。 这篇论文另辟蹊径, 主要使用dilated casual CNN  而不是LSTM 去实现语音算法, 非常值得学习。 主要内容可以总结如下

1.    WaveNet 通用模型介绍, 不只是针对于语音模型

2.    WaveNet 实验结果介绍

3.    实战tensorflow WaveNet 的实验过程, 实战选择的是 WaveNet ASR. 主要原因是ASR 的标注比较容易判断, 而语音合成text-to-speech很不好判断, 主要通过人工打分。

本文实战代码是 https://github.com/buriburisuri/speech-to-text-wavenet, WaveNet 论文是https://arxiv.org/pdf/1609.03499.pdf

WaveNet 模型

通用WaveNet

 

  

         Fig. 1 WaveNet 结构图

  这里dilated casual convolution 翻译成带洞因果卷积。带洞对应的就是dilated,  就是和普通卷积步长stride 不同,  stride会更大一些, 这样关注的范围 (receptive field)就变大了. casual 对应的就是因果,主要就是不要用未来的输出/结果做当前的输入。  这个方法对比RNN, 好处就是可以并行计算, 提高预测训练速度。 但是这个方法还是有他本身的局限性。 在测试时,需要使用自回归 当前的输出语言当做输入进行下一时刻的计算 (auto regressive) 限制了他的速度。下面这个图, Fig. 2 解释了自回归的特点, 即当前的输出会当做下一时刻的输入进行计算。 

Fig.2 WaveNet 动态展示 (https://deepmind.com/blog/wavenet-generative-model-raw-audio/) 
      Fig. 3 多层带洞卷积 WaveNet

  Fig. 3 这里介绍了多层的带洞卷积wavenet. 这样做的目的就是提高感受视野(receptive field). 比如Fig. 3的output, 就是基于16 个Input 产生的, 这样感受视野会远远大于dilation =1 的多层网络。 WaveNet 的文章里用的dilation 是1, 2, 4, …, 512, 1, 2, 4, …, 512, 1, 2, 4, …, 512, 这个相当于有30层带洞卷积, 能关注的视野也就很大了。 具体计算,1,2,4,...512 需要有1024个输入。 那么1024*3/(16*1000), 就能关注192ms的信息了, 对于16kHz 的声音信号。 

      Fig.4 整体WaveNet 架构

  WaveNet的整体结构就如Fig. 4 所示, 其中包含了残差连接,和gated activation unit.这个就是图中的两路, tanh 和sigmoid 的计算。 其他也没什么复杂的啦。

Conditional WaveNet

    Gated activation unit

 

    Conditioned  gated activation unit

  前面讲的都是WaveNet 的通用属性,还没涉及到text-to-speech 或者speech recognition.  文章这里加了个h, 就是用来加一些依赖关系。 比如添加声音ID, 音乐器械的信息之类的。 对于text-to-speech, h 的信息就应该是 语音/语言特征值了。这里要说下, 由于使用了提前算好的特征值, WaveNet不是端到端的训练。

WaveNet 实验结果:

  WaveNet 这里的实验结果是主观测试, 判断生成的生意是否听起来自然。打分如下:

1: Bad, 2: Poor, 3: Fair, 4: Good, 5: Excellent。所以也就是算所有人打分的平均值啦。

实战tensorflow WaveNet

  使用的代码再次强调 https://github.com/buriburisuri/speech-to-text-wavenet

模型架构

    Fig. 5 WaveNet-ASR

  这里使用的是MFCC feature. MFCC  如果不了解, 读者可以去学这个课。

https://nlp.stanford.edu/courses/lsa352/lsa352.lec6.6up.pdf

  CTC loss 在我以前的博客中有讲解过。 

  整体的架构 就如Table, Layer 1, 2 就是front layer, 主要是全连接层+bn, 接下来Layer3-10 就是一个block, 这样的block 有 15个。 这些block 的区别就是dilation 不同。 dialtion 会从1, 2, 4, 8, 16 这样改变,重复三次, 就是15个block.

数据集

这个实验使用的数据集是

TED-LIUM https://projets-lium.univ-lemans.fr/ted-lium/release2/https://projets-lium.univ-lemans.fr/ted-lium/release2/

Libir speech http://www.openslr.org/12/http://www.openslr.org/12/

VCTK http://homepages.inf.ed.ac.uk/jyamagis/page3/page58/page58.htmlhttp://homepages.inf.ed.ac.uk/jyamagis/page3/page58/page58.html