Abstract
深度学习给语音增强带来很多益处,传统的时频域(TF)方法主要通过朴素卷积神经网络(CNN)或递归神经网络(RNN)预测TF掩码或语音频谱。一些研究将将复值谱图作为训练目标,在实值网络中训练,分别预测幅值和相位分量或实部和虚部。特别是卷积递归网络(CRN)集成了卷积编解码器(CED)结构和长短期记忆(LSTM),已被证明对复杂目标有帮助。为了更好的训练复杂目标,本文提出了Deep Complex Convolution Recurrent Network(DCCRN)模型。该模型在Interspeech 2020 Deep Noise Suppression (DNS)比赛上的real-time-track取得了第一和non-real-time-track的第二。
Paper地址
代码地址
Introduction
噪音对于语音相关任务有很大的影响,因此语音增强有很大的价值。近年来,深度学习在语音增强取得了很好的表现,特别是在具有挑战性的条件下处理非平稳噪声方面。本文主要研究基于深度学习的单通道语音增强,以获得更好的感知质量和可理解性,特别是针对低模型复杂度的实时处理。
Related work
神经网络可以在时频域或者时域对语音增强,时域方法可以进一步分为两类:直接回归和自适应前端方法。前者通常通过一维卷积神经网络直接从语音波形提取特征,学习回归函数从而达到实验目标。后一种自适应前端方法对时域信号进行输入和输出,通常采用卷积编解码(CED)或u-net框架,类似于短时傅里叶变换(STFT)及其逆变换(iSTFT),然后在编码器和解码器之间插入增强网络,通常是通过使用具有时间建模能力的网络,如时间卷积网络(TCN)和长短期记忆(LSTM)。
另一种主流方法,时频域方法在谱图上工作,在经过STFT之后,通过学习时频域的精细结构,可以更好的分离语音和噪声。卷积循环网络(CRN)是最近的一种方法,它也采用了类似于时域方法的编解码结构,使用二维CNN从声谱图提取了高水平的特征从而得到了更好的分离结果。编解码器以复数或者实数谱作为输入,而复数谱图在极坐标下可分解为幅值和相位,在笛卡尔坐标下可分解为实部和虚部。以前,研究者大多认为相位难以估计,因此早期的算法大多关注幅度而不关注相位,这给大大的限制了模型的效果。 尽管最近提出了许多相位重构方法来解决这个问题,但神经网络仍然是实数的。通常,在时频域中定义的训练目标主要分为两类,一类是描述干净语音与背景噪声时频关系的mask目标,另一类是对应干净语音频谱表示的映射目标。在mask族中, ideal binary mask(IBM)、ideal ratio mask(IRM)和光谱幅值mask(SMM)只使用纯净语音和混合语音之间的幅值,忽略了相位信息。而phase-sensitive mask是第一个利用相位信息进行相位估计的掩mask,证明了相位估计的可行性。接着,complex ratio mask(CRM)被提出,该模型通过同时增强纯净语音和混合语音谱图分割的实部和虚部,实现了对语音的完美重构。随后,Tan等人提出了CRN,一种一编两解码器的复谱映射(CSM),用于同时估计混合语音的真实和虚谱图。值得注意的是,CRM和CSM具有语音信号的完整信息,理论上可以达到最好的语音增强性能。
虽然考虑了相位信息,但上述方法是在一个实值网络下学习的。最近,深度复杂u-net结合了深度复杂网络和u-net的优点来处理复值谱图。DCUNET通过iSTFT将输出的时频域谱图转换为时域波形后,经过训练来估计CRM并优化尺度不变的信噪比(SI-SNR)损失。在实现了最先进的性能和时间建模能力的同时,采用了许多层卷积来提取重要的上下文信息,导致模型规模大、复杂度高,限制了其在效率敏感应用中的实际应用。
Contributions
该论文提出了一个结合DCUNET和CRN的网络模型,叫DCCRN,并且使用LSTM来获取上下文信息从而减少模型参数量。DCCRN优于DCUNET和CRN,参数量相同的情况下,DCCRN耗时是DCUNET的 1 / 6 1/6 1/6,且具体相似的性能表现。
The DCCRN Model
Convolution recurrent network architecture
CRN最开始是一个有两层LSTM的编解码器,在这里,LSTM 专门用于对时间依赖性进行建模。编码器由五个 Conv2d 块组成,旨在从输入特征中提取高级特征,或降低分辨率。随后,解码器将低分辨率特征重构为输入的原始尺寸,从而使编码器-解码器结构达到对称设计。编码器/解码器的Conv2d块由卷积/反卷积层组成,然后是批处理归一化和激活函数。Skip-connection有利于梯度流动。不同于原始CRN的幅度映射,Tan等人使用一个编码器,两个解码器用来分别对混合语音和清洁语音的复杂SFTF谱进行建模,这样在考虑相位的情况下显著的提高了模型性能。但它们将实部和虚部视为两个输入通道,只采用一个共享实值卷积滤波器的实值卷积运算,不受复数乘法规则的限制。因此,网络可以在没有先验知识的情况下学习实部和虚部。为了解决这个问题,本文提出的DCCRN对CRN进行了大量的修改,使用了复杂的CNN和编码器/解码器中的复杂批处理归一化层,并考虑使用复杂的LSTM来替代传统的LSTM。具体地说,复模通过复乘法的模拟来模拟幅值和相位之间的关系。
Encoder and decoder with complex network
复数编码器模块包括复数 Conv2d,复数BN1和实值PReLU2,复数BN和实值PReLU继承了原论文实现,本文在DCUNET的基础上设计了复数 Conv2d模块。Complex Conv2d由四个传统的Conv2d操作组成,它们控制着整个编码器的复杂信息流。Complex-valued卷积滤波器W定义为: W = W r + j W i W = W_{r}+j W_{i} W=Wr+jWi,其中实值矩阵 W r W_r Wr和 W i W_i Wi分别表示复卷积核的实部和虚部。同时,定义了输入复矩阵: X = X r + j X i X = X_{r}+j X_{i} X=Xr+jXi。因此,我们可以通过复卷积运算 X ⊛ W X \circledast W X⊛W得到复输出 Y Y Y:
F out = ( X r ∗ W r − X i ∗ W i ) + j ( X r ∗ W i + X i ∗ W r ) ( 1 ) F_{\text {out }}=\left(X_{r} * W_{r}-X_{i} * W_{i}\right)+j\left(X_{r} * W_{i}+X_{i} * W_{r}\right) \quad\quad(1) Fout =(Xr∗Wr−Xi∗Wi)+j(Xr∗Wi+Xi∗Wr)(1)
其中 F out F_{\text {out }} Fout 为一个复杂层的输出特征。与复卷积相似,给定复输入 X r X_{r} Xr和 X i X_{i} Xi的实部和虚部,则复LSTM输出 F out F_{\text {out }} Fout 可定义为:
F r r = LSTM r ( X r ) ; F i r = LSTM r ( X i ) ( 2 ) F r i = LSTM i ( X r ) ; F i i = LSTM i ( X i ) ( 3 ) F out = ( F r r − F i i ) + j ( F r i + F i r ) ( 4 ) \begin{aligned} &F_{r r}=\operatorname{LSTM}_{r}\left(X_{r}\right) ; \quad F_{i r}=\operatorname{LSTM}_{r}\left(X_{i}\right) \quad\quad(2)\\ &F_{r i}=\operatorname{LSTM}_{i}\left(X_{r}\right) ; \quad F_{i i}=\operatorname{LSTM}_{i}\left(X_{i}\right) \quad\quad(3)\\ &F_{\text {out }}=\left(F_{r r}-F_{i i}\right)+j\left(F_{r i}+F_{i r}\right) \quad\quad\quad\quad\quad(4) \end{aligned} Frr=LSTMr(Xr);Fir=LSTMr(Xi)(2)Fri=LSTMi(Xr);Fii=LSTMi(Xi)(3)Fout =(Frr−Fii)+j(Fri+Fir)(4)
其中 L S T M r LSTM_r LSTMr和 L S T M i LSTM_i LSTMi分别代表 L S T M s LSTM_s LSTMs的实部和虚部,用 L S T M i LSTM_i LSTMi和输入 X r X_r Xr计算 F r i F_{ri} Fri。
Training target
DCCRN模型估计complex ratio maskCRM,并通过信号近似(SA)进行优化。给出干净语音 S S S和噪音 Y Y Y的复值STFT谱图,CRM可定义为:
C R M = Y r S r + Y i S i Y r 2 + Y i 2 + j Y r S i − Y i S r Y r 2 + Y i 2 ( 5 ) \mathrm{CRM}=\frac{Y_{r} S_{r}+Y_{i} S_{i}}{Y_{r}^{2}+Y_{i}^{2}}+j \frac{Y_{r} S_{i}-Y_{i} S_{r}}{Y_{r}^{2}+Y_{i}^{2}} \quad\quad(5) CRM=Yr2+Yi2YrSr+YiSi+jYr2+Yi2YrSi−YiSr(5)
其中 Y r Y_r Yr和 Y i Y_i Yi分别表示噪音复谱图的实部和虚部。干净声音复谱图的实部和虚部分别用 S − r S-r S−r和 S i S_i Si表示。振幅目标SMM也可用于比较: S M M = ∣ S ∣ ∣ Y ∣ \mathrm{SMM}=\frac{|S|}{|Y|} SMM=∣Y∣∣S∣,其中 ∣ S ∣ |S| ∣S∣和 ∣ Y ∣ |Y | ∣Y∣分别表示干净语音和嘈杂语音的振幅。我们应用信号近似,直接最小化干净语音和带掩码的噪声语音的幅度或复杂谱图之间的差异。SA的损失函数变为: C S A = Loss ( M ~ ⋅ Y , S ) \mathrm{CSA}=\operatorname{Loss}(\tilde{M} \cdot Y, S) CSA=Loss(M~⋅Y,S)和 MSA = Loss ( ∣ M ~ ∣ ⋅ ∣ Y ∣ , ∣ S ∣ ) \operatorname{MSA}=\operatorname{Loss}(|\tilde{M}| \cdot|Y|,|S|) MSA=Loss(∣M~∣⋅∣Y∣,∣S∣),式中CSA和MSA分别表示基于CRM的SA和基于SMM的SA。或者,笛卡尔坐标表示 M ~ = M ~ r + j M ~ i \tilde{M} = \tilde{M}_{r}+j \tilde{M}_{i} M~=M~r+jM~i,也可以用极坐标表示:
{ M ~ m a g = M ~ r 2 + M ~ i 2 M ~ p h a s e = arctan 2 ( M ~ i , M ~ r ) ( 6 ) \left\{\begin{array}{l} \tilde{M}_{\mathrm{mag}}=\sqrt{\tilde{M}_{r}^{2}+\tilde{M}_{i}^{2}} \\ \tilde{M}_{\mathrm{phase}}=\arctan 2\left(\tilde{M}_{i}, \tilde{M}_{r}\right) \end{array}\right. \quad\quad(6) ⎩⎨⎧M~mag=M~r2+M~i2M~phase=arctan2(M~i,M~r)(6)
对于DCCRN,我们可以使用三种乘法模式,稍后将与实验进行比较。具体来说,估计的clean speech S S S可以计算如下:
- DCCRN-R:
S ~ = ( Y r ⋅ M ~ r ) + j ( Y i ⋅ M ~ i ) ( 7 ) \tilde{S}=\left(Y_{r} \cdot \tilde{M}_{r}\right)+j\left(Y_{i} \cdot \tilde{M}_{i}\right) \quad\quad(7) S~=(Yr⋅M~r)+j(Yi⋅M~i)(7) - DCCRN-C:
S ~ = ( Y r ⋅ M ~ r − Y i ⋅ M ~ i ) + j ( Y r ⋅ M ~ i + Y i ⋅ M ~ r ) ( 8 ) \tilde{S}=\left(Y_{r} \cdot \tilde{M}_{r}-Y_{i} \cdot \tilde{M}_{i}\right)+j\left(Y_{r} \cdot \tilde{M}_{i}+Y_{i} \cdot \tilde{M}_{r}\right)\quad\quad(8) S~=(Yr⋅M~r−Yi⋅M~i)+j(Yr⋅M~i+Yi⋅M~r)(8) - DCCRN-E:
S ~ = Y m a g ⋅ M ~ m a g ⋅ e Y phase + M ~ phase ( 9 ) \tilde{S}=Y_{\mathrm{mag}} \cdot \tilde{M}_{\mathrm{mag}} \cdot e^{Y_{\text {phase }}+\tilde{M}_{\text {phase }}}\quad\quad(9) S~=Ymag⋅M~mag⋅eYphase +M~phase (9)
DCCRN-C通过CSA的方式得到 S ~ \tilde{S} S~, DCCRN-R分别估计 Y ~ \tilde{Y} Y~的实部和虚部的掩模。此外,DCCRN-E在极坐标下执行,它在数学上类似于DCCRN-C。不同之处在于DCCRN-E使用 t a n h tanh tanh激活函数将掩模大小限制在0到1之间。
Loss function
模型训练的损失函数为SI-SNR,常用SI-SNR代替均方误差(mean square error, MSE)作为评价指标。定义为:
{ s target : = ( < s ~ , s > ⋅ s ) / ∥ s ∥ 2 2 e noise : = s ~ − s target SI-SNR : = 10 log 10 ( ∥ s target ∥ 2 2 ∥ e noise ∥ 2 2 ) ( 10 ) \begin{cases}\boldsymbol{s}_{\text {target }} & :=(<\tilde{\boldsymbol{s}}, \boldsymbol{s}>\cdot \boldsymbol{s}) /\|\boldsymbol{s}\|_{2}^{2} \\ \boldsymbol{e}_{\text {noise }} & :=\tilde{\boldsymbol{s}}-\boldsymbol{s}_{\text {target }} \\ \text { SI-SNR } & :=10 \log 10\left(\frac{\left\|\boldsymbol{s}_{\text {target }}\right\|_{2}^{2}}{\left\|\boldsymbol{e}_{\text {noise }}\right\|_{2}^{2}}\right)\end{cases} \quad\quad(10) ⎩⎪⎪⎨⎪⎪⎧starget enoise SI-SNR :=(<s~,s>⋅s)/∥s∥22:=s~−starget :=10log10(∥enoise ∥22∥starget ∥22)(10)
式中, s s s和 s ~ \tilde{s} s~分别为清晰的、估计的时域波形。 ⟨ ⋅ , ⋅ ⟩ \langle\cdot, \cdot\rangle ⟨⋅,⋅⟩表示两个向量之间的点积, ∥ ⋅ ∥ 2 \|\cdot\|_{2} ∥⋅∥2是欧几里得范数( L 2 L_2 L2范数)。本文使用STFT核初始化的卷积/反卷积模块对波形进行分析/合成后再发送到网络,并计算损失函数。
Experiments
Datasets
首先在数据集WSJ0上进行学习调参并跑出相应的baseline,然后选择最好的模型在Interspeech2020 DNS Challenge的数据集上进行评估。在WSJ0数据集上选择24500个语音(约50小时),131个说话者(66名男性和65名女性)。训练集、验证集和评价集分别打乱和分割为20000个、3000个和1500个语音。噪声数据集包含6.2小时的自由声音噪声和42.6小时来自MUSAN的音乐,其中41.8小时用于训练和验证,其余7小时用于评估。训练和验证中的语音噪声混合是通过从语音集和噪声集中随机选择语音,在-5 dB ~ 20 dB的随机信噪比下混合生成的。评估集在5个典型信噪比(0 dB、5 dB、10 dB、15 dB、20 dB)下生成。
第二个大数据集是基于DNS挑战提供的数据。180小时DNS挑战噪声集包括150个类和65,000个噪声片段,而干净的语音集包括来自2150个扬声器的超过500小时的片段。为了充分利用数据集,我们在模型训练过程中采用动态混合的方法模拟语音噪声混合。具体来说,在每个训练的epoch,我们通过镜像的方法随机重新卷积干净语音和伴有房间脉冲信号的噪音,这些噪音为随机选择的3000模拟房间脉冲信号,然后在-5 ~ 20 dB的随机信噪比下,将混响语音与噪声动态混合生成语音-噪声混合物。
Training setup and baselines
所有模型的窗长和跳长分别为25 ms和6.25 ms, FFT长度为512。我们用Pytorch来训练模型,优化器是Adam。初始学习率设置为0.001,当验证损耗增大时,学习率衰减0.5。所有波形以16k Hz重新采样。为了选择适合DNS挑战的模型,我们在WSJ0仿真数据集上比较了几种模型,如下所述。
- LSTM:半因果模型包含两个LSTM层,每层有800个单元;我们添加了一个Conv1d层,其中内核大小在时间维度为7,而前瞻是6帧,以实现半因果。输出层是一个257单元全连接层。输入和输出分别是噪声谱图和估计干净的MSA谱图。
- CRN:半因果模型包含3中配置最好的一个编码器和两个解码器。输入和输出是噪声和估计的STFT复谱图的实部和虚部。两个解码器分别处理实部和虚部。核大小在频率维度和时间维度上也是(3,2),步幅设置为(2,1)。对于编码器,我们在通道维度上连接实部和虚部,因此输入特征的形状为[BatchSize, 2, Frequency, Time]。编码器中每层的输出通道为{16,32,64,128,256,256}。隐藏的LSTM有256个单位,最后一个LSTM之后是一个密集层,有1280单元。由于跳接,实译码器或虚译码器输入通道的每一层为{512,512,2566,128,64,32}。
- DCCRN:四个模型由DCCRN-R、DCCRN-C、DCCRN-E和DCCRN-CL(类似DCCRN-E mask)组成。所有这些模型的直流分量都被去掉了。前三个DCCRN的通道数为{32,64,128,128,256,256},而DCCRN- CL的通道数为{32,64,128,256,256,256}。kernel size和stride分别设为(5,2)和(2,1)。前三个DCCRN的实LSTM为256个单位的两层,DCCRN-CL的实部和虚部分别使用128个单位的复LSTM。最后一个LSTM之后是1024个单位的致密层。
- DCUNET:我们使用DCUNET-16进行比较,并将时间维度的stride设置为1,以适应DNS挑战规则,编码器中的通道设置为[72,72,144,144,160,160,180]。
对于半因果卷积的实现,在实践中与常用的因果卷积只有两个区别。首先,我们在编码器中每个Conv2ds的时间维度前加零。其次,对于解码器,我们在每个卷积层中提前一帧。这最终导致6帧lookhead,总共 6 × 6.25 = 37.5 6 \times 6.25=37.5 6×6.25=37.5毫秒,受DNS挑战限制40毫秒。
Experimental results
简单的看一下实验结果。