Deep Complex Convolution Recurrent Network(DCCRN模型)

news/2024/11/9 1:51:21/

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。具体地说,复模通过复乘法的模拟来模拟幅值和相位之间的关系。
 Figure 1: DCCRN network

Figure 1: DCCRN network

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 XW得到复输出 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 =(XrWrXiWi)+j(XrWi+XiWr)(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 =(FrrFii)+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+Yi2YrSiYiSr(5)

其中 Y r Y_r Yr Y i Y_i Yi分别表示噪音复谱图的实部和虚部。干净声音复谱图的实部和虚部分别用 S − r S-r Sr S i S_i Si表示。振幅目标SMM也可用于比较: S M M = ∣ S ∣ ∣ Y ∣ \mathrm{SMM}=\frac{|S|}{|Y|} SMM=YS,其中 ∣ 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~i2 M~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~=(YrM~r)+j(YiM~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~=(YrM~rYiM~i)+j(YrM~i+YiM~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~=YmagM~mageYphase +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)/s22:=s~starget :=10log10(enoise 22starget 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

简单的看一下实验结果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Reference

1. C. Trabelsi, O. Bilaniuk, Y. Zhang, D. Serdyuk, S. Subramanian, J. F. Santos, S. Mehri, N. Rostamzadeh, Y. Bengio, and C. J. Pal, “Deep complex networks,” arXiv preprint arXiv:1705.09792, 2017.
2. K. He, X. Zhang, S. Ren, and J. Sun, “Delving deep into rectifiers: Surpassing human-level performance on imagenet classification,” in Proceedings of the IEEE international conference on computer vision, 2015, pp. 1026–1034.
3. K. Tan and D. Wang, “Complex spectral mapping with a convolutional recurrent network for monaural speech enhancement,” in ICASSP 2019-2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019, pp. 6865–6869.

http://www.ppmy.cn/news/335128.html

相关文章

RK3588 Android平台SPI NOR+PCIE SSD实现大容量存储方案

RK3588 Android平台SPI NORPCIE SSD实现大容量存储方案 硬件配置 硬件方案是基于RK3588S自研平板方案实现。 CPU: RK3588S DDR: LPDDR5 8GB NOR: SPI接口 32MB容量 SSD&#xff1a; PCIE接口 256GB容量 软件版本要求 RK3588 Android12 SDK 升级到RKR8及以上版本RKTools/lin…

CPU、GPU、CUDA,CuDNN 介绍

原http://blog.csdn.net/fangjin_kl/article/details/53906874 一、CPU和GPU的区别 CPU (Central Processing Unit) 即中央处理器GPU (Graphics Processing Unit) 即图形处理器GPGPU全称General Purpose GPU&#xff0c;即通用计算图形处理器。其中第一个“GP”通用目的&#…

Rockchip RK3588 kernel dts解析之电源模块

Rockchip RK3588 kernel dts解析之电源模块 文章目录 Rockchip RK3588 kernel dts解析之电源模块RK3588搭配的电源方案有2种注意单PIMC核双PMIC的软件不能兼容单pmic方案双pmic方案 RK3588搭配的电源方案有2种 单PMIC方案&#xff1a;1个PMIC(RK806)3个DCDC&#xff08;RK860&…

cin和cout

cin和cout 本节教你怎么用C的方式输入输出&#xff0c;比如输出怎么“hello world”。当然&#xff0c;你也可以向你的女朋友输出“I Love you”! 流和缓存区 先别急&#xff0c;要想明白输入输出是怎么回事&#xff0c;就不得不提流和缓冲区 流 “流”即是流动的意思&#…

什么是CUDA与CUDNN

什么是CUDA&#xff1f; CUDA(Compute Unified Device Architecture)&#xff0c;是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU能够解决复杂的计算问题。 什么是CUDNN? NVIDIA cuDNN是用于深度神经网络的GPU加速库。…

c++中cin与cout 详解

cin与cout 一&#xff1a;标准输入函数cin 不知道说它是个函数对还是不对&#xff0c;它是代表标准的输入设备--键盘。他是属于流的&#xff0c;他的用法和流的用法是一样的。也就是&#xff1a;cin>>变量; 小小的说明一下&#xff0c;输入多个变量可以写在一行&…

linux使用DEVICE_ATTR创建设备节点(常用)

DEVICE_ATTR是一个宏&#xff0c;其定义在include/linux/device.h文件&#xff1a; #define DEVICE_ATTR(_name, _mode, _show, _store) \ struct device_attribute dev_attr_##_name __ATTR(_name, _mode, _show, _store)__ATTR宏定义在include/linux/sysfs.h&#xff1a; …

基于OneNet平台设计的多节点温度采集系统-有人云4G模块+STM32

一、设计说明 设计思路: 每个测量点采用4G+STM32+温度测量模块组成;采集温度数据之后直接上传到OneNet物联网云平台,在OneNET云平台上设计可视化界面进行显示,并且也可以在手机APP设备云上显示。 当前采用的物联网平台是OneNET云平台,OneNET中国移动物联网开放平台是由中…