Chapter6_Vocoder

文章目录

  • 1 Introduction
  • 2 WaveNet
    • 2.1 WaveNet的架构
    • 2.2 Softmax Distribution
    • 2.3 Causal Convolution和Dilated Convolution
    • 2.4 Gated Activation Unit
    • 2.5 小结
  • 3 FFTNet
  • 4 WaveRNN
  • 4.1 Dual Softmax Layer
  • 4.2 Model Coarse
    • 4.3 Model Fine
    • 4.4 小结
  • 5 WaveGlow

本文为李弘毅老师【Vocoder】的课程笔记,这次课程由助教同学許博竣讲授,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 5 Speaker Verification

下篇 - 7-1 Overview of NLP Tasks

总目录

1 Introduction

我们在之前的课程中有讲过TTS(Text to Speech)模型和VC(Voice Conversion)模型。这两个模型一般吐出来的都是一个叫做Spectrogram的东西,Spectrogram不是语音,它是一个表示各个时间点各个频率的声音强度的图谱(下图的图谱中,横轴为时间,纵轴为声音频率,颜色深浅表示强度)。因此要转化为最终的语音,还需要一个叫做Vocoder的模型。总而言之,Vocoder就是把Spectrogram转化为语音的模型。
ch6-1

为什么我们必须要有一个Vocoder,而不是让我们的网络直接生成一段语音呢?假设我们有一段语音xxx,然后这段语音xxx经过短时傅里叶变换之后,可以得到一个与时间ttt和频率fff相关的复数,这个复数的幅值At,fA_{t,f}At,f就是我们刚才聊到的Spectrogram,而eiθt,fe^{i\theta _{t,f}}eiθt,f就是相位。TTS或者VC直接生成的结果都是At,fA_{t,f}At,f,没有相位。相位不同,产生的音质的差别是很大的,所以相位是必须要有的,这个相位就需要一个叫做Vocoder的模型去生成。
ch6-2

其实要把相位直接放到模型里去end-to-end的train也行,但是这一方面会加大模型的训练难度,另一方面Vocoder是TTS和VC这样的任务都需要的,单独拿出来train的话,既可以两边通用,又可以降低TTS和VC的训练难度。

2 WaveNet

我们的声音信号放大来看,就是一串点的序列,WaveNet借鉴了autogressive model的思想,泛一点来说就是输入前t−1t-1t1个点,输出第ttt个点,然后把新生成的点放到队列当中去,继续生成下一个点。WaveNet最重要的部分就是Causal Convolutions,说简单点就是一堆卷积。
ch6-3

2.1 WaveNet的架构

WaveNet的整体架构如下图所示。Input就是声音信号的前t−1t-1t1个点,然后Input会经过一个Causal Conv,经过Causal Conv之后,会经过k层layers,layers就是由dialated conv和1×11 \times 11×1卷积组成的残差网络,每层都会输出一个特征,利用skip-connection组合起来之后,再经过两个1×11 \times 11×1卷积和Softmax就得到了最终的结果。
ch6-4

2.2 Softmax Distribution

我们的输入和输出都是one-hot的向量,所以这里要用到softmax。我们的声音信号上每个点的数值是一个16-bit的int,范围在[-32768, 32767],如果直接把这个进行one-hot的话,我们softmax的layer将会有65536个类别,这太难了。所以这里用了一个叫做μ-law的方法,把[-32768, 32767] (16-bit int)的信号转变到了[0, 255] (8-bit int)。这个过程如下所示,先将信号数值转化到[-1, 1],然后用一个叫做μ-law的方法再转换一下,范围仍在[-1, 1],最后再转化到[0, 255]。之所以要用μ-law是因为μ-law可以减小量化误差。

[-32768, 32767] (16-bit int) -> [-1, 1] -> [-1, 1] (μ-law) -> [0, 255] (8-bit int)

μ-law就是下面这个公式,这里不做过多介绍。

ch6-5

2.3 Causal Convolution和Dilated Convolution

Causal Convolution(因果卷积)就是下图这个东西。它是专门针对时间序列设计的,所以它输出的时候,不会考虑未来的信息,而且隐藏层越多,考虑过去的时间越久远。比如下图是一个kernel size为2的Causal Convolution,最终的output会考虑前5个时间点的信息。
ch6-6
而Dilatied Convolution则是下图所示的这样,它的目的是在卷积中加入空洞来增加感受野。这样一来就不用像标准的CNN那样去pooling了。
ch6-7
而把这两者结合起来就是Dilated Causal Convolution了。这样一来模型就可以看到更长远的信息了,这在点非常密集的语音里是非常必要的。
ch6-8

2.4 Gated Activation Unit

这里还有一个需要提一下的就是这个Gated Activation Unit,那其实就是经过了两个不同的激活函数,如下图所示。
ch6-8
如果我们要给模型加一些条件的话,就可以加载这个Gated Activation Unit的部分。如果一些全局的特征,比如说话人的一些条件,就像Global Condition那样加,如果是要加Spectrogram这样的随时间变化的条件,就可以像Local condition这样加。
ch6-9

2.5 小结

WaveNet可以直接使用waveform level的特征,利用到了Dilated Causal Convolution去增大感受野,同时也可以接受各种的条件输入,最终出来的结果也是比较不错的。但是,它有一个问题就是速度太慢了,这也可以想象,毕竟autogressive这种方法计算下一个时间点的输出时,是需要利用到之前输出的结果的,因此无法并行计算。所以之后提出的一些网络,基本都是为了解决速度的问题。

3 FFTNet

FFTNet和WaveNet一样都是autogressive model,它简化了WaveNet中的一些繁琐计算,同时提出了一种可以用到所有的autogressive model上的训练和合成技巧。

FFTNet的模型架构如下图所示,它会把输入xxx分为xLx_LxLxRx_RxR两个部分,然后分别经过一个卷积之后,加起来,再过一层卷积,使得总长度减半,这样运行两层,得到最终结果。这样得到的特征,也是考虑了一定范围的语音特征的,比如下图中输出的绿色部分就是考虑了xLx_LxL生成的。
ch6-10

FFTNet提出了四个技巧:

  • 在开头做zero-padding可以让训练结果更好
  • 最后取结果是,不是直接去最大概率的那个值,而是根据概率分布去做sample
  • 在训练时,给输入加上一些噪声
  • 加入去噪声的后处理

FFTNet最终可以达到和WaveNet差不多的效果,但速度却快上很多。

4 WaveRNN

WaveRNN是Google提出来的,说简单点就是用RNN去代替之前的CNN。

4.1 Dual Softmax Layer

WaveRNN没有用之前把16bit转成8bit的方法,而是把16bit转成了两个8bit,然后做两次softmax的操作。
ch6-11

4.2 Model Coarse

产生ctc_tct的部分如下图所示,中间这块我们可以把它看成一个GRU,它吃ct−1c_{t-1}ct1ft−1f_{t-1}ft1,以及上一个time step的hiddent state,输出ctc_tct
ch6-12

4.3 Model Fine

产生ftf_tft的部分如下图所示,中间这块我们可以把它看成一个GRU,它吃ct−1c_{t-1}ct1ft−1f_{t-1}ft1,以及上一个time step的hiddent state,除此之外,还有刚才产生的c+tc+tc+t,输出ftf_tft
ch6-13

4.4 小结

WaveRNN还有一些加速的技巧,最终可以达到在手机cpu上real time的效果,非常强~

5 WaveGlow

WaveGlow放弃了autogressive的方法,基于flow-based model去做的,这个模型非常难train,有兴趣的同学可以看一下视频或者相关资料学习,这里不做介绍了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

show一下自己的文档编写功底

以我为例,我绝对相信,“才华”和颜值成反比。“才华”二字加了引号了,自知跟优秀有孙大圣一个筋斗云的距离,不过某些细节方面表现得被认为还不错,这里我要秀一下我的文档编写能力。在我这十年的工作生涯里,…

Chapter7-1_Overview of NLP Tasks

文章目录1 Introduction2 Part-of-Speech(POS) Tagging3 Word Segmentation4 Parsing5 Coreference Resolution6 Summarization7 Machine Translation8 Grammar Error Correction9 Sentiment classification10 Stance Detection11 Natural Language Inference(NLI)12 Search En…

python制作文本编辑器_Python小实战:制作文本编辑器

学了半年了,该施展一下了🍺 做什么呢?做一个简单的文本编辑器吧 来,开始 知识点: 1)做窗体的知识 2)文件操作 窗体用的是tkinter简单模块,系统自带模块 有人说了:“哇&am…

OGNL 详解

Struts2 OGNL详解 1.概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整…

完善获取数据库数据的写法

上一篇:使用express搭建服务器获取MySQL数据库数据 一、完善获取数据库数据的写法 asyncawait版本: const express require(express) const db require(./db/nodejs-orm/index.js)const app express()app.get("/get_data", (req, res) …

Chapter7-2_BERT and its family - Introduction and Fine-tune

文章目录1 What is pre-train model2 How to fine-tune2.1 Input2.2 Output2.3 Fine-tune2.4 Weighted Features3 Why fine-tune本文为李弘毅老师【BERT and its family - Introduction and Fine-tune】的课程笔记,课程视频youtube地址,点这里&#x1f4…

【BZOJ-2435】道路修建 (树形DP?)DFS

2435: [Noi2011]道路修建 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3115 Solved: 1002[Submit][Status][Discuss]Description 在 W 星球上有 n 个国家。为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通。但是每个国家的国王都…

CSRF跨站请求伪造

一、CSRF跨站请求伪造 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。 CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。 包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品&a…

升级 ubuntu_Ubuntu 19.04 已经到期!现有用户必须升级到 Ubuntu 19.10

Ubuntu 19.04 已在 2020 年 1 月 23 日到期,这意味着运行 Ubuntu 19.04 的系统将不再会接收到安全和维护更新,因此将使其容易受到攻击。-- Abhishek Prakash(作者)Ubuntu 19.04 发布于 2019 年 4 月 18 日。由于它不是长期支持(LTS)版本,因此…

Chapter7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more

文章目录1 How to pre-train2 Predict next token3 Mask Input4 seq2seq的pre-train model5 ELECTRA6 Sentence Embedding本文为李弘毅老师【BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more】的课程笔记,课程视频youtube地址…

python中split函数_python strip()函数和Split函数的用法总结

strip函数原型 声明:s为字符串,rm为要删除的字符序列. 只能删除开头或是结尾的字符或是字符串。不能删除中间的字符或是字符串。 s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处&#xff0c…

express项目搭建 初始化详细步骤

案例 一、对每一个POST请求都设置CSRF防护 实际上,不仅仅转账需要CSRF防护,每一个post请求都需要做csrf的防护措施。 webA项目中的app.js: const router express.Router();router.all("/register",(res,req)>{.... })funct…

Chapter7-4_來自獵人暗黑大陸的模型 GPT-3

文章目录1 为何来自暗黑大陆2 GPT-3的野心3 GPT-3的效果4 Beyond GPT-3本文为李弘毅老师【來自獵人暗黑大陸的模型 GPT-3】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT,若有侵权…

二、PHP框架Laravel学习笔记——路由的定义和控制器

一.路由的定义 什么是路由?路由就是提供接受 HTTP 请求的路径,并和程序交互的功能; 简单点理解,就是为了提供访问程序的 URL 地址,所做的一些设置工作; phpstorm 支持 cmd 操作,左…

Chapter7-5_Multilingual BERT

文章目录1 什么是Multilingual BERT2 Zero-shot Reading Comprehension3 Cross-lingual Alignment4 How alignment happens本文为李弘毅老师【Multilingual BERT】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自…

deepin tim(wine)无法安装_浅析国产操作系统深度deepin

经过两天的努力,终于实现了win10下跟deepin 的双系统,经过我实际操作,发现win7环境下装双系统还是有问题的。虽然deepin系统也能安装成功,但是win系统却是无法顺利启动,一直卡在系统初始界面无限循环。而更换win10之后…

三、PHP框架Laravel学习笔记——路由参数、重定向、视图

一.路由参数 我们已经学习了部分路由参数的功能,比如动态传递{id};那么,有时这个参数需要进行约束,我们可以使用正则来限定必须是数字; Route::get(task/read/{id}, TaskControllerread) ->where(id, …

Chapter7-6_Text Style Transfer

文章目录1 什么是Text Style Transfer2 Cycle GAN2.1 Gumbel-softmax2.2 Continuous Input for Discriminator2.3 Reinforcement Learning2.4 效果3 Star GAN4 Feature Disentangle5 Unsupervised Abstractive Summarization6 Unsupervised Translation7 Unsupervised Speech R…

Student学生管理系统

1.定义各个层 2.添加各个层之间的引用 DAL 层调用Model BLL层调用DAL和Model UI层调用BLL和Model层 Model层供各个层调用 3.根据数据库建立实体类,每张表对应一个实体类 4.在DAL层调用MyTool类和SQLhelper类,添加system.Configuration 引用 并编写app.config 在SqlHelper类调用…

一、PHP框架Laravel——入门和安装

一.版本化方案 Laravel 框架是一款简洁、优秀且优雅的 PHP 开发框架;Laravel 到底怎么读,由于不是真实的单词,导致争论较多目前已知:[lrəvel][lɑːrəvel][lɑːrvl]有这几种;Laravel 从 6.x 开始进入到…