Mask Based Methods

嗯,现在正式结合着我自己的实践,开讲mask在Speech Enhancement中的应用。

开门见山,本文主要focus下面三点:

  • mask的定义
  • mask的估计
  • mask的使用

Introduction to mask

在一个存在加性噪声的场景下,我们观测到信号可以写成如下形式:

对上式变换到短时频域,有:

这里的每个时频点在文献中常常被称为一个T-F bin。如果给每个bin关联一个mask值,那么,就可以根据形成的mask矩阵$\mathbf{M} \in R^{T \times F}$,抽取到一个信号成分,即:

在这里,考虑一种简单的情况,即对于相对干净的音频,如果以每一帧的能量作为阈值判断,设置$\mathbf{M}_t = {\mathbf{0}, \mathbf{1}}$,那么,此时的mask其实就起到了一个VAD的作用。

回到原题中去,频域中,每个T-F bin上的值落在复数域,如果仅仅从幅值的角度考虑,我们需要恢复出$|\mathbf{X}|$,mask矩阵应该如下计算:

在这种情况下$\mathbf{M}(t, f) \in [0, 1]$,被称为IRM(ideal ratio mask),也是如今最常见的一种mask之一。在IRM之前,传统信号处理往往认为每个T-F bin只是独立的属于某一成分,比如以信噪比来看,认为高于阈值$\delta$的bin属于语音信号,由此,T-F mask成为一个非0即1的量,称为IBM(ideal binary mask),如下

但是,如今在NN框架中的mask常常被用来当做网络训练的target,因此,如何让网络学得更加鲁棒,更加稳健的掩蔽能力,就成为语音增强的一个方向。一种是设计新的mask,让网络进行学习,比如complex mask,phase sensitive mask等等(都是汪德亮老师他们实验室的杰作),另一方面就是设计新的训练方法,应用新的网络结构,比如GAN,T-S结构等等。

继续本文之前,先给出IRM和IBM的一个简单的例子,直观的了解一下什么是mask。我以一定的SDR混合spk1和spk2,计算IBM并在T-F bin上做mask,结果如下(简单处理,$\delta = 0$),第一行的图为原始的speaker语谱,第二行为对应的IBM,两者互补,最后一行是在T-F域上做mask的结果。

binary-mask-demo

由于IBM非零即1,因此,oracle的处理结果在语谱上看的比较别扭,实际中用IBM训练的网络推断时加入sigmoid函数,使得输出在0和1之间,因此掩蔽的效果不会像上图这样,和IRM比较类似。IRM的demo如下,简单期间,将白噪声以一定的信噪比和speech混合:

ratio-mask-demo

由上图可以看出,IRM可以很好的反应出原始speech的语谱特征,oracle的掩蔽效果也很完美。

Estimate mask

监督学习方法火起来之后,mask的估计就方便很多,一般是数据准备(加噪),计算mask,模型训练,应用评估这四步就完了,下面简单说一下每一步需要注意的地方。

  1. 加噪,从实录(noisy)的数据中是无法获得mask信息的(否则你还训模型干啥),因此,数据准备就是要造一批我们知道mask信息的数据,用于网络训练。仅仅是加性噪声的准备非常简单,定义一个信噪比(SNR)范围,从噪声数据库中抽取噪声样本$\mathbf{n}_i$,对原始数据$\mathbf{x}_j$在时域上相加即可:$\gamma_i$根据信噪比得出:
  1. mask计算,这部分不用多说,根据不同mask的定义,根据$\mathbf{x}_j​$和$\mathbf{y}_i​$进行计算即可。

  2. 模型训练,分三个点,特征,模型,损失函数。

    • 特征:一般的网络结构和mask而言,输入特征没有什么限制,fbank,lsp,ivector,mfcc以及multi-channel下的一些spatial特征(GCC,SCM,ITD等等)都可以使用。

    • 模型:目前DNN/LSTM/BLSTM结构都可以使用,multi-task,teacher-student结构等等,没有什么十分特别的地方

    • 损失函数:对于IBM,可以当成二分类任务,用binary CE,其余的mask,通常采用MSE进行优化,即:

      其中$\mathbf{M}_t,\mathbf{M}_p$分别表示target和网络的预测结果,另外一种常用的方式,优化mask的结果$\mathbf{Y}_s \odot \mathbf{M}_p$:

      $\mathbf{Y}_t$表示clean的target,$\mathbf{Y}_s$表示对应的noisy数据。这种方式得到的mask更加接近于最终我们期望的target,而且,不需要显式的计算mask作为target,得到了广泛的应用。

  3. 应用评估,得到了mask模型之后,根据不同的任务,进行不同的性能评估,一般的,通过:

    转换到时域,$\phi​$表示相位信息,对于irm/ibm这类不记录相位信息的mask而言,相位采用noisy的结果。下面给出一个网络的预测样例,一般的,如果可以看到比较清晰的共振峰脉络,那么就可以确定网络的学习结果没有什么严重的问题。

    得到时域音频之后,识别任务通过WER进行,不过由于增强之后的结果会和原始noisy数据训练的am存在较大的mismatch,因此,用增强的数据进行retrain是十分必要的。增强/分离任务通过PESQ,SNR/SDR等指标判定(但是其往往只能在模拟数据上进行,因为指标的计算需要给出相应的reference)。多通道的情况,mask往往在beamformer中用于channel之间协方差矩阵(covariance matrix)的估计(具体参见本文第三部分)。需要提一下,multi-channel情况下,模型对每一个channel都会给出一个mask预测,一般会对这些mask进行average/median等操作来获得一路mask,带入beamformer。

注:mask这个东西和传统信号处理中的一个概念十分相似,叫做SPP(speech presence probability),有兴趣的读者可以查阅一下传统的方法如何进行SPP的估计的。

从上面的第四点也可以看出,mask的应用不仅仅在于single channel processing,也广泛存在于multi-channel的场景下。DL方法诞生之前,如果可以获取多通道的数据,那么mask可以通过NMF,TF-clustering等方法等获得,下面以NTT比较新的CGMM方法,介绍一下TF-clustering的思路。

CGMM可以参考如下两篇论文

[1]. Higuchi, Takuya, et al. “Online MVDR beamformer based on complex gaussian mixture model with spatial prior for noise robust ASR.” IEEE/ACM Transactions on Audio, Speech, and Language Processing 25.4 (2017): 780-793.

[2]. Higuchi, Takuya, et al. “Robust MVDR beamforming using time-frequency masks for online/offline ASR in noise.” Acoustics, Speech and Signal Processing (ICASSP), 2016 IEEE International Conference on. IEEE, 2016.

假设现有$M$路信号(即一个$M$麦的阵列)$\mathbf{Y}$,target成分$K + 1$($K$个speaker,1个噪声成分),其中

TF-clustering需要引入一个先验,比如在CGMM里面,假设target成分$k$的每个T-F bin服从均值为0,方差为$\phi_{ft}^k$的Complex Gaussian分布,即:

令$\mathbf{r}_f^k \in \mathbf{C}^{M \times 1}$表示第$k$个目标成分到每个麦克风,在频率$f$处的响应,将每个T-F bin上,所有channel形成的观测向量称为$\mathbf{y}_{ft}$:

那么有:

其中$\mathbf{y}_f^k = \mathbf{r}_f^k x_{ft}^k​$,根据$x_{ft}^k​$的分布,有:

$\mathbf{y}_{ft}$用$K + 1$个成分的Complex Gaussian Mixture Model(CGMM)建模:

如果成功的估计了上式中的$\alpha_f^k, \phi_{ft}^k, \mathbf{R}_f^k$,那么,target $k$的mask $m_{ft}^k$可以通过:

计算得到,之后的事情就行用EM算法估计这三个参数量了,这部分可以参考原始论文,这里不做赘述。

这种在时频域进行聚类的方法有一个严重的问题就是permutation problem(置换问题),这里解释一下:在进行EM过程中,每个频点是完全独立的进行迭代(实现的时候,对频域进行一次扫描,每个频点上独立的进行EM算法估计),因此,不能保证在频率$f_1, f_2$处,$m_{f_1 t}^k$和$m_{f_2t}^k$对应同一个目标成分(比如初始化的原因,可能造成两者的进化方向不同),这就是所谓的置换问题,需要专门的后处理算法解决,将每个频点的mask进行对齐。

假设只有一个target,那么后处理的方式简单很多,正确的初始化也可以解决置换问题,比如论文中建议的,采用单位矩阵初始化$\mathbf{R}_f^n$,观测信号channel之间的协方差矩阵初始化$\mathbf{R}_f^s$,在实践中表现的较好。我的实现最终版本未做后续处理,也取得了不错的结果。下面给出一个CGMM方法估计出的mask,我们可以从中清晰的看出语谱(target speech)的脉络。

cgmm-mask-demo

我的实现在cgmm-mask-estimator,感兴趣的看观可以参阅一下。

Using mask

第二部分也提到了一些,得到mask之后,如何使用,主要取决于自己的任务(实际上这一点在表明需要mask之前就应该已经明确)。目前我接触的主要是两点:

  1. 去除噪声/语音分离:

    在T-F域上,将target mask和观测信号做Hadamard Product,之后配合相位信息做iSTFT即可。iSTFT一般用overlap add算法实现。

  2. Adaptive beamformer的相应target的相关矩阵估计

    主要看使用什么beamformer了,相关矩阵的估计方法上面也已经提到:

Conclusion

TF-mask被研究的时间比较久了,目前在很多地方都可以看到它的身影,比如single channel的分离任务上,uPIT,DAnet等等都有mask相关的东西在里面。传统的BSS方法,很多也是构建生成模型,在T-F bin上做clustering的思路。目前来看,新的mask类型和应用点也还有产生(比如结合NMF和mask),感兴趣的可以关注一下汪德亮老师的实验室主页,前端的一些论文,包括speech separation/enhancement, beamforming在内,以及在CHiME数据集上的一些实验结果和探索。