论文解析:Real Time Speech Enhancement in the Waveform Domain

paper:在时域波形上的实时语音增强技术
code :https://github.com/facebookresearch/denoiser
这篇文章出自Facebook AI研究院,经本人真实的新闻数据测验,具有较好的降噪效果,下面来详细介绍一下这篇论文。

一、论文

1. 摘要

本文提出了一个能够在CPU的笔记本电脑上实时运行的语音增强模型。该模型是一个带有skip-connection结构的encoder-decoder架构。利用多个损失函数,同时优化时域和频域。实验结果表明,该方法能够去除各种背景噪声,包括平稳噪声和非平稳噪声,以及室内的混响。此外,我们还发明了一些在时域波形上进行数据增强的技术,该些技术能够提高模型的最终性能。我们在几个标准上进行评估(如客观指标和人为打分),所提出的模型能够媲美因果方法和非因果方法的最好结果;
关键词:语音增强,语音降噪,神经网络,原始波形

注:因果方法:所用的数据不包含未来时刻的数据,只涉及到当下和过去的数据,如LSTM;非因果方法:所用的数据包含未来时刻的数据,如BiLSTM。

2. 引言

语音增强是一项最大化的提高语音信号的人耳感知质量的任务。大多数被记录的会议语音都有一些影响清晰度的噪音,如街道噪音、狗叫声、键盘声等等。因此,对于视听会议和人工耳蜗来说,语音增强是一项非常重要的任务,并且它也可以帮助ASR系统。对于许多这样的应用程序,语音增强系统的一个关键特性必须是实时运行的,在商用通信设备上,还必须尽可能少的减少延迟。
多年来,在语音增强领域也出现了很多可行的方案,如估计噪声模型并利用它恢复不带噪声的语音。尽管这些方法可以很好的跨领域推广,但是它们仍然很难处理一些常见的噪声,如非平稳噪声,或一群人同时说话的喋喋不休的声音。这种噪音类型的存在大大降低了人类语音的听力可理解性。近年来,基于深度神经网络(DNN)的模型在处理非平稳噪声和喋喋不休的噪声时表现明显优于传统方法,同时在客观和主观评价中产生更高质量的语音。此外,基于深度学习的方法也在单通道语音分离的结果上优于传统方法。
受到这些启发,本文提出了一个实时语音增强模型-Demucs。它由卷积网络和LSTM构成,帧长40ms,帧移16ms,并且在笔记本CPU上实时运行。以提升音频质量为目的,我们的模型从时域波形,通过分层网络(包含skip-connection的U-Net结构),最后再到时域波形。我们对模型进行了优化,直接输出干净的语音,同时最小化时域的L1 loss和频域的spec loss。此外,我们还提出了一个简单有效的数据增强技术:频带掩蔽和信号混响。尽管有着实时性的约束,但是我们的模型依旧能够和当前最先进的模型相当。
尽管有多种指标可以衡量语音增强系统,但是这些指标和人类的判断毫不相关。因此我们提交了这两样的结果。此外,我们在损失和增强的功能上进行了消融研究,以更好的强调各自的性能。最后,我们分析了增强后的语音在ASR上的错字率(WER)。
结果表明,当直接在原始波形上工作时,所提出的方法在所有指标上都可与当前最先进的模型相媲美。此外,增强的样本对噪声条件下ASR模型的改进也有帮助。

3. 模型

3.1 符号和问题设置

我们专注于在实时应用上可以运行的单通道语音增强。具体的说就是,给定一个音频信号 x ∈ R T x \in R^T x∈RT,x由一个干净的语音信号 y ∈ R T y \in R^T y∈RT和一个额外的背景信号 n ∈ R T n \in R^T n∈RT组成,即 x = y + n x=y+n x=y+n,对于样本来说,长度T并不是一个固定的数值,因为输入的句子可以有不同的时长。我们的目标就是找到一个增强的函数使得 f ( x ) = y f(x)=y f(x)=y。
在本文里,我们认为f就是Demucs模型,该模型最初被用在音乐源分离的任务上,现在调整之后用来挑战因果语音增强的任务,模型的结构如图1a所示。
论文解析:Real Time Speech Enhancement in the Waveform Domain

2.2 demucs架构

demucs包含一个多层的带有u-net跳步连接的卷积编码器和解码器,以及一个LSTM网络,位于编码器和解码器之间。特征参数:编码器和解码器都有L层,初始化hidden_size为H,卷积核大小K,步长S,以及重采样因子U。编码和解码层被通过1到L编号(解码层的编号相反,因此可以知道:相同缩放范围的层上有着相同的索引)。因此我们集中注意力于单通道语音增强,模型的输入和输出仅有一个通道
形式上可以看到,编码网络Encoder将原始波形作为输入,输出一个潜在的表示 E n c o d e r ( x ) = z Encoder(x)=z Encoder(x)=z,编码器的每一层包含:一个卷积核大小为K,步长是S,输出通道是 2 i − 1 H 2^{i-1}H 2i−1H个输出通道;一个Relu层,一个输出通道是 2 i H 2^{i}H 2iH的1x1卷积,和一个GLU激活层(将输出通道重新变为 2 i − 1 H 2^{i-1}H 2i−1H),架构如图1b所示。
编码网络之后,紧接着是序列网络模型R,将z作为输入,输出的是相同大小的非线性转化: R ( z ) = L S T M ( z ) + z R(z)=LSTM(z) + z R(z)=LSTM(z)+z,定义为 z ^ \hat{z} z^,LSTM网络共有两层,hidden_size为 2 L − 1 2^{L-1} 2L−1层。对于因果预测来说,我们使用一个非双向的LSTM网络,当是非因果预测的时候,我们就使用biLSTM,然后接一个线性层去融合biLSTM的两个输出。
最后,一个解码网络D,将 z ^ \hat{z} z^作为输入,输出一个干净的信号 D ( z ^ ) = y ^ D(\hat{z})=\hat{y} D(z^)=y^​。解码器的第i层的输入有着 2 i − 1 H 2^{i-1}H 2i−1H个通道,应用一个 2 i H 2^{i}H 2iH个通道的1x1卷积。然后接一个GLU层将通道还原到 2 i − 1 H 2^{i-1}H 2i−1H;最后接一个转置卷积,K=8,S=4,输出通道是 2 i − 2 H 2^{i-2}H 2i−2H,再接一个relu层。对于最后一层来说,输出是一个单通道且没有relu层。skip connection连接了encoder的第i层和decoder的第i层,详细结构看图1a。
我们使用[16]中提出的方法初始化所有的参数。最后,我们注意到,对音频根据一个因子U进行上采样,然后再输入到encoder中能够提高准确率。然后以相同的方法对模型的输出进行下采样。重采样是使用sinc插值滤波器完成的[17]。将这部分也作为端到端训练的一部分,而不是预处理步骤。

2.3 目标

我们在时域波形上使用L1损失函数,在频域上,使用[13]、[14]中提出的多分辨率STFT损失。形式上来说,给定 y y y和 y ^ \hat{y} y^​,分别是干净的信号和增强之后的信号。我们将STFT损失定义为spectral convergence loss 和 magnitude loss的和:
L s t f t = L s c ( y , y ^ ) + L m a g ( y , y ^ ) L_{stft} = L_{sc}(y,\hat{y})+L_{mag}(y,\hat{y}) Lstft​=Lsc​(y,y^​)+Lmag​(y,y^​)

L s c = ∣ ∣ ∣ S T F T ( y ) ∣ − ∣ S T F T ( y ^ ) ∣ ∣ ∣ F ∣ ∣ ∣ S T F T ( y ) ∣ ∣ ∣ F L_{sc} = \frac{|||STFT(y)|-|STFT(\hat{y})|||_F}{|||STFT(y)|||_F} Lsc​=∣∣∣STFT(y)∣∣∣F​∣∣∣STFT(y)∣−∣STFT(y^​)∣∣∣F​​

L m a g = 1 T ∣ ∣ l o g ∣ S T F T ( y ) ∣ − l o g ∣ S T F T ( y ^ ) ∣ ∣ ∣ 1 L_{mag} = \frac{1}{T}||log|STFT(y)|-log|STFT(\hat{y})|||_1 Lmag​=T1​∣∣log∣STFT(y)∣−log∣STFT(y^​)∣∣∣1​
其中, ∣ ∣ ∗ ∣ ∣ || * || ∣∣∗∣∣是L1范数。我们定义多分辨率STFT损失为所有的STFT损失函数之和(使用不同的STFT参数)。总的来说,我们希望最终最小化下列式子:
1 T [ ∣ ∣ y − y ^ ∣ ∣ 1 + ∑ i = 1 M L s t f t ( i ) ( y , y ^ ) ] \frac{1}{T}[||y-\hat{y}||_1+\sum_{i=1}^ML_{stft}^{(i)}(y, \hat{y})] T1​[∣∣y−y^​∣∣1​+i=1∑M​Lstft(i)​(y,y^​)]
上式中,M是STFT loss的个数,每一个 L s t f t ( i ) L_{stft}^{(i)} Lstft(i)​有着不同分辨率(即不同参数)的STFT loss,FFT的bins:{512,1024,2048},hop size:{50,120,240},最后一个窗长是:{240,600,1200}。

本节总结:

  • 理解demucs的架构以及每层的输入输出的形状
  • 理解GLU层原理和转置卷积原理;
  • 理解初始化方法:MSRA初始化,若能对比着Xavier初始化方法看更好;
  • 理解sinc 插值原理
  • 理解STFT loss的计算方法;

实验

我们对我们提出的模型进行了相关实验,并且和目前的模型进行比较。最后,我们对增强和损失功能进行了消融研究。最后,我们评估了增强后的样本对于在噪声环境下提升ASR性能的可用性。代码和例子可以在github上发现。

3.1 实施细节

评估方法:我们使用客观和主观的方法来衡量增强后的样本的作用。
客观的方法,我们使用的是:

  • (i)PESQ:语音质量感知评价(Perceptual evaluation of speech quality),使用的是宽带版本(打分范围:0.5-4.5);
  • (ii)Short-Time Objective Intelligibility:短时客观智力(打分范围:0-100);
  • (iii)CSIG:仅针对语音信号的信号失真的平均意见分(MOS)预测(打分范围1-5);
  • (iv)背景噪声干扰的MOS预测(打分范围从1-5);
  • (v)COVL:总体影响的MOS预测(打分范围:1-5)

主观的方法里,我们参考了ITU-T P.835里所推荐的MOS研究。为此,我们使用CrowdMOS软件包启动了一个众源评估。我们随机抽取100个句子,由15个评价者从3个方面打分:失真程度、背景噪声干扰和总体质量;所有参与者结果的平均值为最终的分数。

训练:我们训练模型,在Valentini上迭代了400次,在DNS数据集上迭代了250次。我们使用L1损失来预测真实值和预测值之间的差距,并且对于Valentini数据集来说,还增加了STFT损失(权重0.5,式2.3)。优化方法为Adam,step size:3e-4,动量学习率是0.9,衰减学习率是0.999。对于Valentini数据集来说,我们使用了原始的验证数据集去得到最好的模型,对于DNS数据集来说,我们没有用验证集去训练模型。音频倍采样到16khz。
模型:我们使用了3个demucs结构。对于非因果demucs来说,我们设置的参数是U=2,S=2,K=8,L=5和H=64。对于因果模型来说,U=4,S=4,K=8,L=5,H=48或64。在输入到模型之前,我们对Input标准化,再按同样的比例还原模型的输出。在这种设置下,因果demucs的音频帧长是37ms和16ms。
注:

名词 解释
U 采样因子
K 卷积核大小
S 步长
L encoder、decoder的层数
H 第一层卷积的通道数

数据增强:我们也应用一个随机的平移0到S秒。Remix augmentation(混音增强):打乱一个batch里的噪声,形成新的噪声混合物。Band-Mask是一个频带-停止滤波器,滤除。这相当于SpecAug augmentation数据增强方法。回声消除:
我们使用了随机移位在所有的数据集上,remix和ban-mask作用于Valentini数据集,revecho只作用于DNS数据集。
因果流评价:为了测试我们的因果模型在真实情况中的性能,在测试的时候,我们使用了一个特殊的流实施。我们使用到当前位置的标准偏差(累积标准偏差),而不是通过音频的标准偏差去标准化。为了对输入上采样,我们也使用了一个3ms的未来数据,这使得模型的总帧长是40ms了。当应用模型到给定信号的时候,输出的最右边部分是无效的,因为未来的音频需要正确的计算转置卷积后的输出。尽管如此,我们注意到使用这个无效的部分作为下采样的填充也可以极大的提高PESQ。由于不同层之间的重叠,需要谨慎的缓存不同层之间的输出。

3.2 结果

表1展示了Valentini数据集在因果模型和非因果模型上的结果。结果表明:demucs能够和当前最好的模型DeepMMSE相媲美,并且是直接作用于原始波形,也没有使用其他的额外数据。此外,demucs也优于其他的基线模型(因果、非因果)。
论文解析:Real Time Speech Enhancement in the Waveform Domain
我们也增加了一个语音增强的概率,我们输出。这能够控制信号去除和保存之间的平衡。我们注意到少量的降低参数可以改善整体的听觉质量。我们在表2中呈现出了在DNS数据集上blind test set上三个类别的MOS评估效果:无混响、混响和真实唱片。我们测试了不同的策略。

3.3 消融研究

为了更好的理解不同部分对总体性能的影响,我们实施了一个消融研究,我们使用因果模型,汇报PESQ和STQI。结果如表3所示。结果表明,每个组件都对整体性能有贡献,STFT loss和time shift augmentation产生了最大的贡献。注意,令人惊讶的是,remix增强函数对整体的贡献很小。
论文解析:Real Time Speech Enhancement in the Waveform Domain

3.4 实时评估

我们计算了实时因子(RTF,例如时间增强帧除以步长)在流设置下,以更好地匹配现实世界的条件。我们在一个四核Intel i5 CPU上对这个实现进行基准测试。若H=64,则RTF为1.5,而当H=48的时候,RTF为0.6。当将执行限制到单核时,H=48模型仍然可以达到0.8的RTF,使他在真实的情况下可以使用,例如在视频通话软件上。我们不提供Deeep-mmse模型的RTF结果,由于作者没有提供流媒体实现,因此这是一个不公平的比较。

3.5 对ASR模型的影响

最后,我们评估了增强样本的可用性,以改善噪声条件下的ASR性能。为实现这一目标,我们使用LIBRISPEECH数据集合成了有噪声的数据,再加上DNS[19]基准测试集的噪声。我们在一个可控的设置中创建了噪声样本,在那里我们混合了清洁和噪声文件, S N R ∈ 0 , 10 , 20 , 30 SNR \in {0,10,20,30} SNR∈0,10,20,30。对于ASR模型,我们使用了基于卷积和transformer的声学模型在librisspeech上获得了最先进的结果。为了得到单词错误率(WERs),我们使用了一个简单的维特比算法解码(不用语言模型和beam-search)。通过该方法,我们可以更好的理解升学模型上增强样本的结果。结果在表4里。demucs模型在SNR为0的时候可以恢复51%的WER。在dev-clean数据集和dev-other数据集上的恢复率为41%和31%。由于没有在去噪后的数据上对声学模型进行再训练。这些结果表明了对于ASR系统来说语音增强的直接适用性。可以作为该ASR黑盒系统的预处理步骤。

4. 相关工作

传统的语音增强方法要么生成幅度谱的增强版本,要么生成理想二进制掩码(IBM),然后用于增强幅度谱。
在过去的几年里,人们对基于DNN的语音增强方法越来越有兴趣。在[34]中,作者使用一个深度前馈网络生成频谱二进制掩码,并直接使用在时域上的损失函数;在[43]中,作者使用了一个多目标损失函数来提高语音的质量;在[44,35]中,作者使用了一个RNN来进行语音增强,在[7]中,作者提出了一个端到端的结构-SEGAN,直接作用于波形;[41,8,42,21]也继续改进了这种优化模型。在[37]中,作者建议使用WaveNet模型学习噪声到干净信号之间的映射来进行语音降噪。

5. 结论

我们已经展示了DEMUCS,一种在波形域为音乐源分离而开发的最先进的架构,如何可以转化为一种因果语音增强器,在消费级CPU上实时处理音频。我们在标准的Valentini基准上测试了DEMUCS,并在不使用额外的训练数据的情况下取得了最先进的结果。我们也用DNS数据集在真实的混响环境中测试我们的模型。我们证明了增强技术(有2个源的混响)如何产生一个理想的想过。最后,我们证明了我们的模型可以提高ASR在噪声条件下的性能,即使没有再训练模型。

6. 代码

后续会努力复现代码

上一篇:3GPP RAN架构与O-RAN架构的区别


下一篇:RT-PCR、QPCR、Real-time PCR、Real-time RT-PCR区别(自用)