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=10log10E2X^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=10log10XE2XT2

  • 可见, 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=10log10XE2XT2=+
    在这里插入图片描述
  • (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=10log10XE2XT2=10log10kXE2kXT2 (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-SDR2SI-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 ClusteringPIT,它们使得 Deep learning 可以被用于 Speaker independent 的情况

permutation problem: predicted channels are well separated but inconsistent along time (This occurs when the sources to separate are similar to each other)

Deep Clustering

Deep Clustering: Learning deep embeddings for 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×Aspectrogram embeddings (为频谱图上的每一个点都生成一个 Embedding),同时每个元素对应 embedding 的 L2 norm 都为 1。然后再对这些 Embedding 进行 K-means 聚类,将它们分为两类,两类 vector 对应的位置就可以形成两个 Binary Mask
    • The segmentations are therefore implicitly encoded in the embeddings, and can be ”decoded” by clustering.

Deep Clustering – Training

在这里插入图片描述

在这里插入图片描述

  • 在训练时,只需要根据真正的 IBM,使得 Embedding Generation 生成的向量满足 IBM 中不同元素对应的 Embedding 尽量远离,相同元素对应的 Embedding 相互靠近即可 (i.e. We need an objective function that minimizes the distances between embeddings of elements within a partition, while maximizing the distances between embeddings for elements in different partitions)。这样之后的 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 成功捕捉到了声音信号频谱图的特征

Math Form

  • 假设 V = f θ ( x ) ∈ R N × D V=f_\theta(x)\in\R^{N\times D} V=fθ(x)RN×D N N N 个输入信号的 embedding,其中每一个输入信号都是一个 time-frequency bin ( t , f ) (t,f) (t,f) f θ f_\theta fθ 为神经网络。 V V T ∈ R N × N VV^T\in\R^{N\times N} VVTRN×N 即为 embedding 之间的相似度矩阵 (affinity matrix)
  • 假设 Y ∈ R N × C Y\in \R^{N\times C} YRN×C 用于指示每个输入信号对应的类 (cluster),由 N N N 个 one-hot vector 组成,其中 C C C 为总的类别数。因此, Y Y T YY^T YYT 即为 binary affinity matrix,如果两个输入信号属于同一类,则对应元素为 1,反之为 0
  • 损失函数即可表示为下式:
    C Y ( V ) = ∥ V V T − Y Y T ∥ F 2 = ∑ i , j ( ⟨ v i , v j ⟩ − ⟨ y i , y j ⟩ ) 2 \begin{aligned} \mathcal{C}_{Y}(V) &=\left\|V V^{T}-Y Y^{T}\right\|_{\mathrm{F}}^{2}=\sum_{i, j}\left(\left\langle v_{i}, v_{j}\right\rangle-\left\langle y_{i}, y_{j}\right\rangle\right)^{2} \\ \end{aligned} CY(V)=VVTYYTF2=i,j(vi,vjyi,yj)2假设每个输入信号的 embedding v i v_i vi 为 unit-norm embedding,即 ∣ v i ∣ 2 = 1 |v_i|^2=1 vi2=1,则
    C Y ( V ) = ∑ i , j : y i = y j ( 1 − 2 ⟨ v i , v j ⟩ ) + ∑ i , j ⟨ v i , v j ⟩ 2 = ∑ i , j : y i = y j ( ∣ v i − v j ∣ 2 − 1 ) + ∑ i , j ⟨ v i , v j ⟩ 2 \begin{aligned} \mathcal{C}_{Y}(V) &=\sum_{i, j: y_{i}=y_{j}}\left(1-2\left\langle v_{i}, v_{j}\right\rangle\right)+\sum_{i, j}\left\langle v_{i}, v_{j}\right\rangle^{2} \\ &=\sum_{i, j: y_{i}=y_{j}}\left(\left|v_{i}-v_{j}\right|^{2}-1\right)+\sum_{i, j}\left\langle v_{i}, v_{j}\right\rangle^{2} \end{aligned} CY(V)=i,j:yi=yj(12vi,vj)+i,jvi,vj2=i,j:yi=yj(vivj21)+i,jvi,vj2由上式可知,损失函数使得属于同一类的 embedding 相互靠近的同时还保证了所有 embedding 尽量各不相同,防止陷入平凡解 (prevent collapse to a trivial solution)
  • 上述损失函数由于需要计算 N × N N\times N N×N 的相似度矩阵,计算量太大,可以利用 ∣ ∣ A ∣ ∣ F 2 = t r ( A T A ) ||A||^2_F=tr(A^TA) AF2=tr(ATA) 进一步进行化简降低计算量
    C Y ( V ) = ∥ V V T − Y Y T ∥ F 2 = t r ( ( V V T − Y Y T ) ( V V T − Y Y T ) ) = t r ( V V T V V T ) − 2 t r ( V V T Y Y T ) + t r ( Y Y T Y Y T ) = t r ( V T V V T V ) − 2 t r ( Y T V V T Y ) + t r ( Y T Y Y T Y ) = ∣ ∣ V T V ∣ ∣ F 2 − 2 ∣ ∣ V T Y ∣ ∣ F 2 + ∣ ∣ Y T Y ∣ ∣ F 2 \begin{aligned} \mathcal{C}_{Y}(V) &=\left\|V V^{T}-Y Y^{T}\right\|_{\mathrm{F}}^{2} \\&=tr\left((V V^{T}-Y Y^{T})(V V^{T}-Y Y^{T})\right) \\&=tr(V V^{T}V V^{T})-2tr(V V^{T}Y Y^{T})+tr(Y Y^{T}Y Y^{T}) \\&=tr( V^{T}VV^{T}V )-2tr(Y^{T}V V^{T}Y )+tr(Y^{T}Y Y^{T}Y) \\&=||V^TV||_F^2-2||V^TY||_F^2+||Y^TY||_F^2 \end{aligned} CY(V)=VVTYYTF2=tr((VVTYYT)(VVTYYT))=tr(VVTVVT)2tr(VVTYYT)+tr(YYTYYT)=tr(VTVVTV)2tr(YTVVTY)+tr(YTYYTY)=VTVF22VTYF2+YTYF2

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

如果数据集是 Speaker independent 的,那么训练 TasNet 时就需要用到 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值