Chapter3-1_Speech Separation(Deep Clustering, PIT)

文章目录

  • 1 内容简述
  • 2 评价指标
    • 2.1 Signal-to-noise ratio (SNR)
    • 2.2 Scale invariant signal-to-distortion ratio (SI-SDR)
    • 2.3 其他的评价指标
    • 3 Permutation Issue
  • 4 Deep Clustering
  • 5 PIT

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

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

文章索引:

上篇 - 2-2 CycleGAN and StarGAN

下篇 - 3-2 TasNet

总目录

1 内容简述

人在一个嘈杂的环境下听别人说话的时候,可以很神奇的抽取到说话人说话的信息,换而言之,也就是把说话人发出的声音和说话人之外的声音给分开了。而Speech Separation要做的事情,也就是把不同物体发出的声音给分开。

Speech Separation可以分为两大类:

  • Speech Enhancement
    把人的声音和其他的声音给分开来,也被称为denoising

  • Speaker Separation
    把不同人说话的声音分开来

本篇的着重点在于Speaker Separation,而且在讨论的时候,都以两个speakers单一麦克风的情况为例子。同时,要说明的是,用于训练和验证的声音数据来自于不同的speaker,也就是说,训练集是A,B,C,D说的,验证集是E,F说的,这样子。
ch3-1-1
Speaker Separation有一个特点,就是它的输入和输出的长度必然是一致的,所以可以不使用seq2seq的模型来解,用seq2seq的模型有一种杀鸡用牛刀的感觉。

Speaker Separation有一个好处就是,数据集很容易构造,我们只需要找一堆单个speaker的声音信号过来,然后两两合成一下,就可以了。

2 评价指标

2.1 Signal-to-noise ratio (SNR)

有一种评估模型输出质量的方法叫做SNR,SNR的目的是让模型的输出X∗X^*XX^\hat{X}X^越接近越好。SNR的计算公式如下所示

SNR=10log10∣∣X^∣∣2∣∣E∣∣2SNR=10 log_{10} \frac{||\hat{X}||^2}{||E||^2} SNR=10log10E2X^2

其中,X∗X^*XX^\hat{X}X^均为向量,且

E=X^−X∗E=\hat{X}-X^* E=X^X

不难看出,当EEE越大的时候,SNRSNRSNR就小,也就是SNRSNRSNR认为模型的结果越差,反之越好。
ch3-1-2
这种简单粗暴的评价方式,在面对声音的时候,会存在一个致命的问题。比如模型输出的X∗X^*XX^\hat{X}X^向量几乎是平行的,只不过X∗X^*X短了一点(音量小了一点),这个时候SNR却认为模型学的不好,这其实是不合理的,不我们只要把音量调大一点就可以了。

又比如说,模型输出的X∗X^*XX^\hat{X}X^偏差比较大,但是当X∗X^*X被调大了音量之后,这个SNRSNRSNR就认为模型变好了,这也是我们不希望看到的。

总而言之,SNRSNRSNR受音量大小的干扰太大。
ch3-1-3

2.2 Scale invariant signal-to-distortion ratio (SI-SDR)

另一种文献中常用的评价指标叫做SI-SDR,SI-SDR也被称为SI-SNR,知道这两个是同一个东西就可以了。SI-SDR的计算公式为

SISDR=10log10∣∣XT∣∣2∣∣XE∣∣2SISDR=10log_{10} \frac{||X_T||^2}{||X_E||^2} SISDR=10log10XE2XT2

其中

{XE=X∗−XTXT=X∗⋅X^∣∣X^∣∣2X^\left\{ \begin{aligned} X_E = X^* - X_T \\ X_T = \frac{X^* \cdot \hat{X}}{||\hat{X}||^2}\hat{X} \end{aligned} \right. XE=XXTXT=X^2XX^X^

这个评价指标就是在看X∗X^*XX^\hat{X}X^的平行程度,解决了SNR被音量大小干扰的问题。
ch3-1-4
而在实际使用的时候,我们看的,往往是SI-SDR的improvement。什么是improvement?比如我们要看下图中蓝色信号的improvement,那么我们就要先把输入mixed audio和蓝色信号的ground truth做一个SI-SDR得到SI-SDR1,然后再把蓝色信号对应的输出和蓝色信号的ground truth算一个SI-SDR2,再用SI-SDR2减去SI-SDR1来看这个增量。

为什么要这么做?因为有些时候,mixed audio的红色信号可能音量较低,这使得SI-SDR1本身就会比较大,SI-SDR2自然也就是大的,这个时候看增量improvement会更有意义。
ch3-1-5

2.3 其他的评价指标

除了SNR和SI-SDR之外,还有其他很多评价指标,比如用来评价输出声音质量的Perceptual evaluation of speech quality (PESQ),用来评价声音清晰度的short-time objective intelligibility (STOI)。这些评价指标都比较复杂,这里不多做介绍。

3 Permutation Issue

讲完了评价指标之后,我们就可以像正常了模型那样开始train了,我们的Loss就用L1或者L2或者SI-SDR都是可以的,SI-SDR是可以微分的。我们就输入一个mixed audio然后经过一个speaker Separation的model,出来一个X1X_1X1X2X_2X2,再算一下loss,然后反向传播,就结束了。真的就么就结束了吗?错错错

我们仔细来思考一下,输出X1X_1X1的这端和X2X_2X2的这端是连接着固定的weights的,为什么X1X_1X1一定是红色信号,X2X_2X2一定是蓝色信号。这两个不能换一下吗?加入我们又来了一个橙色信号,那这个橙色信号应该在哪个输出?仔细想一下,这样子网络是没法train起来的。这个其实就是Speech Separation中的Permutation Issue。

它不能像其他问题那样直接转变为一个可以直接train的神经网络。
ch3-1-6
那怎么办?下面来介绍一下Deep Clustering和PIT。

4 Deep Clustering

在介绍deep clustering之前,我们先来说一下其中用到的mask。由于Speech Separation只是对于输入声音信号的一个拆分,所以我们可以不生成声音信号,而是生成两个mask。这两个mask是互斥的,即M1=1−M2M_1 = 1 - M_2M1=1M2,mask中的值可以是binary的(0和1),也是可以是continuous的(0至1)。如果是binary的,X1X_1X1就是XXXM1M_1M1对应元素为1的元素的组合,即X1=M1⋅XX_1 = M_1 \cdot XX1=M1XX2X_2X2就是X−X1=M2⋅XX-X_1 = M_2 \cdot XXX1=M2X
ch3-17

这种binary的方式,显得非常简单粗暴,这样难道不会造成很多信息的丢失吗?不管你信不信,实际情况下,这种做法是work的。不过既然要把我们的训练目标变成一个mask,那在处理数据,生成label的时候,也有一些相应的操作。

如下图中,我们有蓝色的声音和红色的声音,然后合成了左上角红蓝结合的声音。蓝色和红色的矩阵表示声音信号转换之后得到的spectrogram,红蓝矩阵的shape是一样的,矩阵中每个元素之间比个大小,蓝的大的话,蓝色mask相应为止的值就是1,反之是0。红色的也是一样。mask就是用这种方式构造出来的。

然后用这种方式得到的mask在mixed audio上去取值,得到左下角的信号,这个信号的声音,和蓝色信号的声音,人听起来,是没什么区别的。这样的mask叫做Ideal Binary Mask (IBM)。
ch3-1-8

也就是说,我们的模型只要能学到这样的两个IBM,就可以实现Speech Separation了。那么,我们的模型就变成了下图这样。

c3-1-9
但是!到现在为止,我们仍旧没有解决Permutation Issue。别急,马上给你搞定。

先来说一下Deep Clustering的Inference的过程。我们的输入是一个代表mixed audio的D×TD \times TD×T的矩阵,经过一个Embedding的网络之后,生成了一个D×T×AD \times T \times AD×T×A的矩阵,这个AAA就是embedding之后的特征维度。然后,我们会对这个输出做k-means clustering,如果有2个说话人,就把cluster的个数设置为2即可,然后每个cluster就代表一个speaker的Ideal Binary Mask。是不是很机智!完美解决Permutation Issue。
ch3-1-10
不过这个东西训练该怎么train呢?k-means clustering是额外的算法,且不可导,要做loss的话,就要在D×T×AD \times T \times AD×T×A的这个矩阵上做文章。

我们是有Ideal Binary Mask这个label的,那么,我们呢就可以让mask上值一样的feature的距离越大越好,mask值上值不同的feature越远越好,这样的loss是可以做成可导的。
ch3-1-11
神奇的是,用2个speakers的声音mix的的数据和deep clustering模型train出来的结果,针对于3个speakers的输入,也是有效的!这真的是很了不起。

5 PIT

PIT是一种训练的方法,全称为Permutation Invariant Training。这种训练方式就可以end-to-end去训练,总体思想很直觉,就是我先随便假设一个speakers对应于输出的X1X_1X1X2X_2X2的顺序,稍微train几下,得到一个model。然后,下一次train的时候,我会算两次SI-SDR之类的评价指标,分别是红1,蓝2和蓝1,红2,然后把Loss小的那个作为排序,然后按这个顺序train下去。
ch3-1-12
每train一次,这个排序都可能会发生变化,所以刚开始的时候,是非常不稳定的,但只要这样train下去,最终,是可以收敛的。感觉这个真的要靠做实验做出来。
ch3-1-13
还有就是,PIT相比于按照某种方式,假定一个顺序的训练方式是要好一点的。
ch3-1-14

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

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

相关文章

Joi验证模块的使用

1. 安装 官网中文文档:https://joi.dev/api/?v12.1.0#validatevalue-schema-options-callback //下载14.3.1 npm install 14.3.1注意:下载14.3.1,在npm install joi的时候默认下载的是最新版本 joi17.1.1,对于一些API高版本会舍弃从而出现…

Chapter3-2_Speech Separation(TasNet)

文章目录1 TasNet总体架构2 Encoder和Decoder3 Separator4 TasNet回顾5 More5.1 Unknown number of speakers5.2 Multiple microphones5.3 Visual information本文为李弘毅老师【Speech Separation - TasNet】的课程笔记,课程视频youtube地址,点这里&…

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)版本,因此…