IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Speech Separation -> 正文阅读

[人工智能]Speech Separation

Speech Separation

  • 鸡尾酒会效应: Humans can focus on the voice produced by a single speaker in a crowded and noisy environments.
    在这里插入图片描述

Speech Separation

  • Speech Enhancement: speech-nonspeech separation (de-noising) (将人说话的声音从噪声中分离)
    在这里插入图片描述
  • Speaker Separation: multi-speaker talking (将多个人说话的音频分离开来)
    在这里插入图片描述

Speaker Separation

在这里插入图片描述

下面的讨论主要关注 Two speakersSingle microphone,并且数据集保证 Speaker independent (training and testing speakers are completely different)

  • Input and output have the same length. Seq2seq is not needed

Training Data

  • Training Data: It is easy to generate training data.

在这里插入图片描述

Evaluation

Signal-to-noise ratio (SNR)

在这里插入图片描述
S N R = 10 log ? 10 ∥ X ^ ∥ 2 ∥ E ∥ 2 S N R=10 \log _{10} \frac{\|\hat{X}\|^{2}}{\|E\|^{2}} SNR=10log10?E2X^2?

X X X is speech signal (vector) here

  • 可见, ∣ ∣ E ∣ ∣ ||E|| E 越小,SNR 越大

缺陷

  • Case 1: X ? X^* X? X ^ \hat X X^ 其实声音完全相同,只是声音大小不同,但 E E E 却很大
    在这里插入图片描述
  • Case 2: Simply larger the output can increase SNR
    在这里插入图片描述

Scale invariant signal-to-distortion ratio (SI-SDR / SI-SNR)

在这里插入图片描述
SISDR ? = 10 log ? 10 ∥ X T ∥ 2 ∥ X E ∥ 2 \operatorname{SISDR}=10 \log _{10} \frac{\left\|X_{T}\right\|^{2}}{\left\|X_{E}\right\|^{2}} SISDR=10log10?XE?2XT?2?

  • 可见, X ? X^* X? X ^ \hat X X^ 越平行,SISDR 越大

SI-SDR 解决了之前提到的 SNR 的两个缺陷

  • (1) SISDR = 10 log ? 10 ∥ X T ∥ 2 ∥ X E ∥ 2 = + ∞ \text{SISDR}=10 \log _{10} \frac{\left\|X_{T}\right\|^{2}}{\left\|X_{E}\right\|^{2}}=+\infty SISDR=10log10?XE?2XT?2?=+
    在这里插入图片描述
  • (2)
    SISDR = 10 log ? 10 ∥ X T ∥ 2 ∥ X E ∥ 2 = 10 log ? 10 ∥ k X T ∥ 2 ∥ k X E ∥ 2 \text{SISDR}=10 \log _{10} \frac{\left\|X_{T}\right\|^{2}}{\left\|X_{E}\right\|^{2}}=10 \log _{10} \frac{\left\|kX_{T}\right\|^{2}}{\left\|kX_{E}\right\|^{2}} SISDR=10log10?XE?2XT?2?=10log10?kXE?2kXT?2? (the same)
    在这里插入图片描述

SI-SDR improvement

在这里插入图片描述

  • 分别对 Mixed audio 和模型分离出的声音信号计算 SI-SDR,再计算它们的差值
    SI-SDR?improvement : SI-SDR i = SI-SDR 2 ? SI-SDR 1 \text{SI-SDR improvement}: \text{SI-SDR}_i = \text{SI-SDR}_2 - \text{SI-SDR}_1 SI-SDR?improvement:SI-SDRi?=SI-SDR2??SI-SDR1?

More…

  • Perceptual Evaluation of Speech Quality (PESQ) was designed to evaluate the quality, and the score ranges from -0.5 to 4.5.
  • Short-Time Objective Intelligibility (STOI) was designed to compute intelligibility (声音的可理解程度), and the score ranges from 0 to 1.

Permutation Issue

  • 有了训练数据和评估方法,看起来我们可以直接训练一个模型,只需要最小化生成向量与 Ground-truth 的 L1 / L2 误差或者最大化 SI-SDR 即可
    在这里插入图片描述
  • 但事情并没有那么简单,混合音频包含两段音频,我们模型的第一个分支应该输出红色音频还是蓝色音频呢?也就是按怎样的顺序摆放正确答案呢 (Permutation Issue)
    在这里插入图片描述如果数据集里只有红色和蓝色这两种音频,那么我们只需要固定一种就好,但问题是数据集里有很多不同的 speaker,如果我们仍然对每两个 speaker 固定一个输出顺序,模型训练就可能产生问题,例如下图中,我们规定模型第一个分支输出红色和黄色音频,第二个分支输出蓝色和绿色音频,但蓝色、绿色音频对应的性别是不同的,红色、黄色音频对应的性别也是不同的,在训练时模型就会被要求在输入一段混合男女声时有时在第一分支输出男声 (黄绿),有时在第一分支输出女声 (红蓝),这可能会给模型训练带来问题,我们更想要第一个分支固定输出男声,第二个分支固定生成女声,因此想到先对音频按性别进行分类
    在这里插入图片描述而有的男声可能会比较高亢,有的女声可能会比较低沉,此时我们又想按音调进行分类。但其实分类标准有很多,例如性别、声调、声音大小,怎么才能正确选择分类标准呢?一个好的方法是 Deep Clustering,它使得 Deep learning 可以被用于 Speaker independent 的情况

Deep Clustering

Masking

  • Speeker Separation 其实就是由一个矩阵 X X X 生成另外两个矩阵 X 1 , X 2 X_1,X_2 X1?,X2?
    在这里插入图片描述 X 1 , X 2 X_1,X_2 X1?,X2? 其实与 X X X 是很相似的,因此可以简化一下模型的结构,只训练一个 Mask Generator,生成两个掩码矩阵分别与 X X X 作逐元素乘来得到 X 1 , X 2 X_1,X_2 X1?,X2? (Mask can be binary or continuous)
    在这里插入图片描述

Ideal Binary Mask (IBM)

在这里插入图片描述

Each audio is represented by its spectrogram.

  • Ideal Binary Mask (IBM): 将两段声音的频谱图对应矩阵中的每个元素进行比较,如果一个矩阵的某一位置的元素比另一矩阵的相同位置元素更大,mask 就为 1,反之为 0。由此可以生成两段声音信号对应的 mask matrix,mask matrix 与混合声音频谱图对应矩阵进行逐元素相乘即可还原出原有声音 (效果还不错)

  • 现在我们要做的就是让模型在给定混合音频的频谱图时,生成 IBM
    在这里插入图片描述

Deep Clustering

在这里插入图片描述

  • Deep Clustering: 先由混合音频 D × T D\times T D×T 的频谱图生成 D × T × A D\times T\times A D×T×A 的 Embedding matrix (为频谱图上的每一个点都生成一个 Embedding),然后再对这些 Embedding 进行 K-means 聚类,将它们分为两类,两类 vector 对应的位置就可以形成两个 Binary Mask

Deep Clustering – Training

在这里插入图片描述

在这里插入图片描述

  • 在训练时,只需要根据真正的 IBM,使得 Embedding Generation 生成的向量满足 IBM 中不同元素对应的 Embedding 尽量远离,相同元素对应的 Embedding 相互靠近即可。这样之后的 K-means 聚类就能生成正确的 IBM
    在这里插入图片描述
  • 值得注意的是:It is possible to train with two speakers, but test on three speakers ( K = 3 K=3 K=3 during k k k-means)! 这说明 Embedding Generation 成功捕捉到了声音信号频谱图的特征

  • 虽然 Deep clustering 效果不错,但它还有一个缺憾:训练过程并不是 end-to-end 的

Permutation Invariant Training (PIT)


  • Given a speaker separation model θ i \theta^i θi, we can determine the permutation (choose the permutation with smaller loss)
    在这里插入图片描述
  • But we need permutation to train speaker separation model … 这似乎就成了一个鸡生蛋、蛋生鸡的问题

PIT

  • PIT 用一个 loop 来解决上述问题,先随机初始化模型参数,然后根据这个随机初始化的参数对 label 的顺序进行排序,然后用这个顺序来训练模型。然后再用新的模型重新进行 label 排序,依次循环往复…
    在这里插入图片描述

Results

  • paper: Interrupted and cascaded permutation invariant training for speech separation
  • 由下图可以看到,刚开始训练时,同一对样本的 label 顺序经常被对调,但随着训练的进行,label 排放的顺序逐渐被固定
    在这里插入图片描述
  • 下图展示了 PIT 学出的 label 排列顺序是很有效的。对比 (a) (b) ?,人为固定 label 顺序并没有 PIT 的效果好。同时,还可以用一个已经训练好的 PIT 来生成固定的 label 顺序,以供模型进行学习,这样就形成了 Cascaded PIT,能取得较好的效果
    在这里插入图片描述

TasNet – Time-domain Audio Separation Network


TasNet

  • TasNet 特别的地方在于它是直接在时域中进行的,也就是输入、输出直接就是声音信号 (a 16- d d d vector (2ms 的声音信号))。输入的时域信号首先通过 Encoder 变成一个 Feature map,这个 Encoder 的作用和傅里叶变换类似,但它是直接由模型学出来的。Separator 根据 Feature map 产生两个 Mask,Mask 与 Feature map 作逐元素相乘后再送入 Decoder 就得到了分离的时域声音信号,这里的 Decoder 就类似逆傅里叶变换
    在这里插入图片描述

如果数据集是 Speaker independent 的,那么训练时就需要用到 PIT


Encoder and Decoder

  • Encoder 和 Decoder 其实就是两个线性层,分别将 16 维的声音信号 vector 转成 512 维的 feature vector,再将 feature vector 重新转回声音信号
    在这里插入图片描述

Separator

  • Separator 的输入为 Encoder 的输出,也就是很多个 512- d d d 的向量,每个向量都对应着 2ms 的声音信号。Separator 由若干层的 1-D conv 组成。每一个 1-D conv 层都由上一层输出的两个相邻 vector 得到一个新的 vector。如下图所示,经过若干 conv 层之后再加上 transform + sigmoid (sigmoid 保证 mask 的值在 0 ~ 1 之间,比较符合直觉),就能得到两个 mask,这两个 mask 分别与 Encoder 的输出相乘,结果输入 Decoder 后就能得到分离出的时域声音信号
    在这里插入图片描述
  • 实际的 Separator 结构更加复杂一些,它的一个基础模块一直叠加到了 d = 128 d=128 d=128,也就是输出的 mask vector 看到了 128 个输入声音向量
    在这里插入图片描述Separator 叠加了多个这样的基础模块,当叠加 3 个时,模型输出的 mask 考虑了 1.53s 的输入声音信号
    在这里插入图片描述

这里看视频没有看的特别明白,有时间再看看 paper 吧


Depthwise Separable Convolution

  • TasNet 还使用了 Depthwise Separable Convolution 来轻量化网络 (Ref: youtube)

SepFormer - Attention is All You Need in Speech Separation


More …

Unknown number of speakers


  • idea: recursively separating a speaker
    在这里插入图片描述

Multiple Microphones


在这里插入图片描述

Visual Information

在这里插入图片描述
在这里插入图片描述

Task-oriented Optimization

Who would listen to the results of speech enhancement or speaker separation?

在这里插入图片描述

paper

  • [Fu, et al., ICML’19] MetricGAN: Generative Adversarial Networks based Black-box Metric Scores Optimization for Speech Enhancement, ICML, 2019
  • [Shon, et al., INTERSPEECH’19] VoiceID Loss: Speech Enhancement for Speaker Verification, INTERSPEECH, 2019

To learn more ……

References

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:43:23  更:2021-12-11 15:45:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 0:47:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码