Chapter3-2_Speech Separation(TasNet)

文章目录

  • 1 TasNet总体架构
  • 2 Encoder和Decoder
  • 3 Separator
  • 4 TasNet回顾
  • 5 More
    • 5.1 Unknown number of speakers
    • 5.2 Multiple microphones
    • 5.3 Visual information

本文为李弘毅老师【Speech Separation - TasNet】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

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

文章索引:

上篇 - 3-1 Deep Clustering, PIT

下篇 - 4-1 Tacotron

总目录

1 TasNet总体架构

TasNet的全程是Time-domain Audio Separation Network,它是一个可以end-to-end去train的一个网络。整个网络可以认为由三个部分组成,分别是Encoder,Separator和Decoder。Encoder相当于是一个Fourier Transformer,可以吃未经处理过的mixed audio原始声音信号,然后吐出一个特征维度为512维的特征向量。Separator会吃这个特征向量,然后吐出两个mask,这两个mask再作用到encoder吐出的feature map上,得到两个separated feature map。最后还有一个decoder,decoder吃这两个feature map。吐出separated audio。
ch3-2-1

2 Encoder和Decoder

TasNet的Encoder和Decoder都是linear transformer,可以看成是两个矩阵。Encoder的输入是一个非常短的声音讯号,只有16个samples,可以看作16维的向量,吐出的是一个512维的向量,Decoder的输入是一个512维的向量,吐出的是一个16维的向量。我们可能会很直觉的认为Encoder里的线性变换和Decoder里的线性变换应该是inverse的,但实际情况是,做了这样的限制之后,模型的效果并不好。对于Encoder而言,如果这个Encoder就是Fourier Transformer的话,那它的输出应该都是正的。但是做了这样的限制,效果也不好。

所以,就是不用做这些限制,直接train就行。
ch3-2-2

3 Separator

这个Separator是很多层dilated convolution的堆叠。它吃的是Encoder的输出,会把这个输出经过多个dilation不断成倍增长的dilated convolution。最后对得到的结果做一个transform和sigmoid得到两个mask。这个sigmoid可以不加,mask 1和mask 2中对应位置的元素之和也不需要是1。
ch3-2-3

实际情况下,这个dilated convolution是有很多层的,最后一层的dilation=128,也就是说有8层(27=1282^7=12827=128)。然后,这个过程一般会重复3次,这个repeat的次数是可以调整的超参数。这么做的目的就是,当Separator在输出某个mask值的时候,看过足够长的语音信号。比如下图的这种结构,模型单个mask值的输出会考虑1.53s长度的语音。由于用到的cnn太多了,其中还用到了Depthwise Separable Convolution的技术来轻量化模型。
ch3-2-4

在最初的时候,其实Separator用的是LSTM,但是为什么变成了CNN呢?原因就是训练的时候,我们都是从句子的开头开始放进LSTM去train的,这样一来LSTM就没法适应一句话从中间截断送进来的情况,也就是说LSTM很傲娇,刚开始看到的不是句子的开头,就坏掉了。而CNN是time invariant的,它无所谓句子的开头在哪里。从下图中不难看出,总体的表现也是CNN更好。
ch3-2-5

4 TasNet回顾

我们再来回顾一下TasNet的整个架构。如下图所示,图中用的是一个真实的例子画出来的图像,红色和蓝色分别代表不同的speaker,可见TasNet学到的mask可以很好地把两个speaker的声音给分开来。对了,TasNet在train的时候要用上篇中提到的PIT的技巧。
ch3-2-6

最后再来看一下TasNet的效果究竟如何。下图是Wavesplit这篇文章中对不同方法在WSJ0-2mix上结果的对比。不难看出TasNet比Deep Clustering要好很多。但是,在实际情况下,Deep Clustering的泛化能力会比TasNet要好。比如WSJ0-2mix是一个英文的数据集,TasNet在这个数据集上train了之后,给它说中文,它就搞不懂,但是Deep Clustering在这个数据集上train了之后可以把中文给Seperate了。这也是比较奇怪的地方。
ch3-2-7

5 More

上一篇,以及这篇讲的只是Speech Separation中的沧海一粟,还有很多的东西可以讲,这里再稍微拓展一下。

5.1 Unknown number of speakers

当我们不知道输入的信号中有多少speakers的时候,Deep Clustering也许还可以尝试一下调整一下cluster的个数,但TasNet就真的失效了。那当我们不知道speaker的个数的时候,该咋办?下图提供了一种思路,就是我们train一个network,这个network每次只分离出一个人的声音,然后不断循环下去,同时这个network还要神奇地知道我分到什么时候的时候,声音中就剩下2个speakers了,它就可以停了。
ch3-2-8

5.2 Multiple microphones

当我们有多个麦克风的时候该怎么办?其实我们现在使用的大部分设备都是多个麦克风的,用传统的做法的话,有一些处理的技巧,但是用deep learning的话,就直接多输入硬train一发就结束了。
ch3-2-9

5.3 Visual information

在视频当中,我们还可以用到图像的信息。Google有给出过这样面的一个Demo,可见 Looking to Listen: Audio-Visual Speech Separation。大致的思想是在训练的时候加入了人脸的信息,这样的做法,就可以用PIT的训练方式了。这里不做太多的介绍。
ch3-2-10

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

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

相关文章

Node 中的开发环境与生产环境 和 使用Morgan打印请求信息

一、什么是开发环境与生产环境 环境,就是指项目运行的地方,当项目处于开发阶段,项目运行在开发人员的电脑上,项目所处的环境就是开发环境。当项目开发完成以后,要将项目放到真实的网站服务器电脑中运行,项…

Chapter4-1_Speech_Synthesis(Tacotron)

文章目录1 TTS before End-to-end2 Tacotron2.1 Encoder2.2 Attention2.3 Decoder2.4 Post processing3 How good is Tacotron?本文为李弘毅老师【Speech Synthesis - Tacotron】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中…

第三方模块config的使用

作用:允许开发人员将不同运行环境下的应用配置信息抽离到单独的文件中,模块内部自动判断当前应用的运行环境, 并读取对应的配置信息,极大提供应用配置信息的维护成本,避免了当运行环境重复的多次切换时,手动…

Chapter4-2_Speech_Synthesis(More than Tacotron)

文章目录1 Mispronunciation2 More information for Encoder3 Attention4 Fast Speech and DurIAN5 Dual Learning5 Controllable TTSSpeaker EmbeddingGST-TacotronTwo-stage Training本文为李弘毅老师【Speech Synthesis - More than Tacotron】的课程笔记,课程视…

【代码笔记】iOS-清除图片缓存UIActionSheet

一,效果图。 二,代码。 RootViewController.m //点击任何处出现sheet -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {UIActionSheet * sheet [[UIActionSheet alloc] initWithTitle:"确定要清空图片缓存?" d…

Chapter5_Speaker_Verification

文章目录1 Task Introduction2 模型架构3 模型介绍3.1 i-vector3.2 d-vector3.3 x-vector3.4 more4 End to End本文为李弘毅老师【Speaker Verification】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅…

python如何读取字典的关键字_python提取字典key列表的方法

python提取字典key列表的方法 更新时间:2015年07月11日 12:04:48 作者:企鹅不笨 这篇文章主要介绍了python提取字典key列表的方法,涉及Python中keys方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python提取字典key列表的方法…

使用express搭建服务器获取MySQL数据库数据

一、原始的mysql查询方法 先安装mysql cnpm install mysql --save 引入这个db.js之后,才能对数据库进行查询 进行查询 查询结果如下: 二、ORM 介绍 ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库…

Chapter6_Vocoder

文章目录1 Introduction2 WaveNet2.1 WaveNet的架构2.2 Softmax Distribution2.3 Causal Convolution和Dilated Convolution2.4 Gated Activation Unit2.5 小结3 FFTNet4 WaveRNN4.1 Dual Softmax Layer4.2 Model Coarse4.3 Model Fine4.4 小结5 WaveGlow本文为李弘毅老师【Voc…

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…