Application of deep learning methods in speech enhancement

语音增强中的深度学习应用

按:

本文是DNS,AEC,PLC等国际级语音竞赛的主办方——Microsoft Research Labs音频与声学研究组(Audio and Acoustics Research Group)于2021年发表的Sound capture and speech enhancement for speech-enabled devices中节选的一章,总结了该组今年来在语音增强领域的工作。该报告的作者为Ivan Tashev和Sebastian Braun。本篇所有图片均源自该报告及其引文。

1. (基于时频域监督学习的)语音增强模块



该模块主要展示了时频域语音增强的流程,包括短时傅里叶变换(STFT)、特征提取、神经网络、预测目标、增强/变换(过程)、短时傅里叶反变换(iSTFT)和损失函数几部分。其中自图中第二行开始只在训练阶段进行,本图建议与该组之前的一篇工作中的图(见下图)结合使用。



这里主要有以下几点可以讨论:

  • STFT: 由于噪声模态的多样性导致语音增强任务天然与语音分离任务有区别,利用傅里叶变换基函数将噪声和语音成分变换到特定的空间中区分模式可能更利于网络的训练和鲁棒性;此外,由于混响情况下时域算法的劣势以及阵列增强中可能的与传统波束形成技术的级联;当然还有从传统语音增强技术中发展而来的习惯;还有最最重要地,目前DNS Challenge的比赛结果。尽管有一些如demucs等优秀的基于时域的语音增强算法,基于时频域的语音增强算法可能更具优势(tips:此处为个人见解)。
  • 特征提取:特征提取部分除了直接的复数谱和幅度谱,微软特别提到了对数功率谱和(幂律)压缩复数谱,在说明这两个特征之前,需要说明请注意在报告中预测目标并没有对应的对数幅度谱或者压缩复数谱,而是原始STFT域的谱或掩蔽,这点与之前网络输出与输入对应的一些文献是有区别的,其想表达的是输入经过压缩变换(不论是对数压缩还是指数压缩)的特征将有助于系统性能。

    这里简要说明一下对数功率谱和(幂律)压缩复数谱,其中对数幅度谱的使用见于该组的这篇这篇,定义为\(P = log10(|X(k, n)|^2)\) P = torch.log10(torch.norm(x_stft, dim=-1) + 1e-9);

    而幂律压缩复数谱可参考这篇,定义为\(X_{cprs}=\frac{X(k,n)}{|X(k,n)|}|X(k,n)|^{c}\)
    x_mag = torch.norm(x_stft, dim=-1) + 1e-9
    x_cprs_mag = x_mag ** c
    x_cprs = torch.stack((x_stft[..., 0] / x_mag * x_cprs_mag, x_stft[..., 1] / x_mag * x_cprs_mag), dim=-1)
  • 损失函数:报告中推荐的是压缩谱损失,其他损失包括mask的距离、能量损失(SDR/SI-SDR)、谱距离、感知加权损失和(以上几项或以上几项和其他项的)联合损失。

    损失函数分别定义和测评在文献文献中,其中一部分见下图



    推测压缩谱损失推荐的是幅度正则的压缩谱损失(Magnitude-regularized compressed spectral loss):\(\mathcal{L}=\frac{1}{\sigma_S^{c}}(\lambda\sum_{k,n}{|S^c-\widehat{S}^c|^2+(1-\lambda\sum_{k,n}{||S|^c-|\widehat{S}|^c|^2})})\),其中\(\sigma_S\)是纯净语音有声段的能量,压缩谱的操作与上文定义一致,\(c\)和\(\lambda\)微软推荐都为0.3。

2. 训练数据的生成与增广



微软推荐的数据生成方式如上图,先不考虑混响情况,纯净语音和噪声分别计算其能量,根据信噪比混合得到带噪数据,而后<带噪数据,纯净语音>用相同的滤波器进行谱增广,最后调节语音音量的动态范围。需要注意的是:

  • 纯净语音要进行清洗,选择MOS高的,排除“脏”数据
  • 每条预料要足够长(微软推荐10s一句,根据其测评在其模型、特征和loss下至少应长于5s,当条件改变句子最短长度也可能变化)
  • 该报告推荐的信噪比按均值5 dB,方差10 dB的高斯分布随机选取
  • 该报告推荐的dBFS音量增广按均值-28 dB,方差10 dB的高斯分布随机选取
  • 谱增广是指RNNoise中使用的滤波器:\(H(z)=\frac{1+r_1z^{-1}+r_2z^{-2}}{1+r_3z^{-1}+r_4z^{-2}}\),其中\(r_i\sim\mathcal{U}(-\frac{3}{8},\frac{3}{8})\)。但是该报告引用文献中指出由于数据量重足,谱增广是不必要的

    最后考虑混响情况(图中绿色区域):和其他文章一样,房间冲激响应(RIR)卷积纯净语音得到混响语音。而为了使语音听起来自然,目标语音仍带少量混响,具体的实现上是令语音与经加权函数加权的RIR卷积,其中加权函数的定位为:\(w_{RIR}(t)=exp(-(t-t_0)\frac{6log(10)}{0.3}), if\quad t \ge t_0,(otherwise\quad w_{RIR}(t)=1)\)

3. 有效的网络架构



微软提供了两个网络架构,分别为NSNet2(DNS Challenge的baseline)和CRUSE(DNS Challenge中微软提交的比赛方案Microsoft-2)。

以上两个网络分别是RNNoise(by Valin)-style的幅度谱域模型和GCRN(by Tan)-style的复数谱域模型,RNNoise和GCRN将在之后的博客中将进行详细介绍,这两个网络的介绍请参见博客博客中介绍。最后是他们的结果:

[报告] Microsoft :Application of deep learning methods in speech enhancement的更多相关文章

  1. 视觉中的深度学习方法CVPR 2012 Tutorial Deep Learning Methods for Vision

    Deep Learning Methods for Vision CVPR 2012 Tutorial  9:00am-5:30pm, Sunday June 17th, Ballroom D (Fu ...

  2. NLP related basic knowledge with deep learning methods

    NLP related basic knowledge with deep learning methods  2017-06-22   First things first >>> ...

  3. 论文阅读:Face Recognition: From Traditional to Deep Learning Methods 《人脸识别综述:从传统方法到深度学习》

     论文阅读:Face Recognition: From Traditional to Deep Learning Methods  <人脸识别综述:从传统方法到深度学习>     一.引 ...

  4. 论文翻译:2022_PACDNN: A phase-aware composite deep neural network for speech enhancement

    论文地址:PACDNN:一种用于语音增强的相位感知复合深度神经网络 引用格式:Hasannezhad M,Yu H,Zhu W P,et al. PACDNN: A phase-aware compo ...

  5. Why are very few schools involved in deep learning research? Why are they still hooked on to Bayesian methods?

    Why are very few schools involved in deep learning research? Why are they still hooked on to Bayesia ...

  6. deep learning 的综述

    从13年11月初开始接触DL,奈何boss忙or 各种问题,对DL理解没有CSDN大神 比如 zouxy09等 深刻,主要是自己觉得没啥进展,感觉荒废时日(丢脸啊,这么久....)开始开文,即为记录自 ...

  7. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  8. What are some good books/papers for learning deep learning?

    What's the most effective way to get started with deep learning?       29 Answers     Yoshua Bengio, ...

  9. 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)

    转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...

随机推荐

  1. C++设计模式 - 总结

    一个目标:管理变化,提高复用 掌握设计模式一个核心目标:管理变化,提高复用.在使用设计模式中发现并没有实现复用,这就和设计初衷相违背了,说明代买写的不好. 两种手段:分解VS.抽象 在代码设计中,该开 ...

  2. K8S原来如此简单(八)ServiceAccount+RBAC

    ServiceAccount ServiceAccount是给运行在Pod的程序使用的身份认证,Pod容器的进程需要访问API Server时用的就是ServiceAccount账户. Service ...

  3. Vue中图片的加载方式

    一.前言 VUE项目中图片的加载是必须的,那么vue中图片的加载方式有哪些呢,今天博主就抽点时间来为大家大概地捋一捋. 二.图片的加载方法 1.在本地加载图片(静态加载) 图片存放assets文件夹中 ...

  4. 12.16 JAVA swing

    ------------恢复内容开始------------ 12.16JAVA swing 1.框架 JFrame>JPanel>组件JButton JTestfilled JTable ...

  5. 修道士与野人问题(BFS广度搜索)

    #include "iostream.h" #include "string.h" //定义一个状态节点 typedef struct //存储各个状态 { i ...

  6. linux-安装zookeeper及相关操作

    下载两个安装包并解压: 配置jdk环境变量: [root@VM-0-10-centos zookeeper]# cat /root/.bash_profile # .bash_profile # Ge ...

  7. 上传文件到阿里云linux服务器(windows到Linux的文件上传)

    在"运行"中输入cmd,打开控制台,切换到刚才Putty的安装目录下,我的是E:\Putty,然后输入pscp命令,我们需要这个命令来实现文件的上传.如下命令格式: F:\PuTT ...

  8. (转载)MySQL删除所有表的外键约束、禁用外键约束

    其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...

  9. Spring 的 jdbcTemplate 操作

    1.Spring框架是一站式框架 (1)针对 JavaEE 三层,每一层都有解决技术 (2)在 dao 层,使用 jdbcTemplate 2.Spring对不同的持久化层的技术都进行了封装 (1)j ...

  10. Netty学习摘记 —— ByteBuf详解

    本文参考 本篇文章是对<Netty In Action>一书第五章"ByteBuf"的学习摘记,主要内容为JDK 的ByteBuffer替代品ByteBuf的优越性 你 ...