作者:孟赛斯
音频质量的优化是一个复杂的系统工程,而降噪是这个系统工程中的一个重要环节,传统的降噪技术经过几十年的发展已经陷入了瓶颈期,尤其是对非平稳噪声的抑制越来越不能满足新场景的需求。而近几年以机器学习/深度学习为代表的 AI 技术的崛起,为特殊场景下的音频降噪带来了新的解决方案。声网 Agora 伴随着在线音视频直播服务的发展逐渐形成了自己的积淀,本文是声网 Agora 音频技术团队出品的特殊场景下的音频测评系列文章──AI 降噪篇。由于业界对于音频的评价标准尚存在不同的意见,因此声网 Agora 的实践更偏重从有参到无参的工程化落地,在此抛砖引玉、恳请业界同仁多加批评指正。
作为开发者,我们希望为用户提供高清晰度和流畅度、高保真音质的实时互动体验,但由于噪声无时无刻的存在,使得人们在通话中受到干扰。不同场合拥有的噪声也是不同的,噪声可以是平稳的也可以是非平稳或者瞬态的,平稳的噪声是不随时间的变化而变化,比如白噪声;非平稳的噪声随着时间的变化而变化,比如人说话声、马路噪声等等,瞬态噪声可以归为非平稳噪声,它是持续时间较短的、间歇性噪声,比如敲键盘声、敲桌子、关门等等。在实际互动场景中,当双方使用移动设备通话时,一方处于饭店、吵闹的街道、地铁或者机场等嘈杂的环境中,另一方就会接收到大量含有噪声的语音信号,当噪声过大时,通话双方无法听清楚对方讲话内容,容易产生烦躁的负面情绪,影响最终用户体验。因此,为了减小噪声对语音信号的干扰,提高用户通话的愉悦程度,我们往往会做 Noise suppression(NS,噪声抑制)处理,目的是从带噪语音信号中滤除掉噪声信号,最大程度的保留语音信号,使得通话双方听到的语音都不受噪声的干扰,一个理想的 NS 技术是要在去除噪声的同时保留语音的清晰度、可懂度和舒适度。
降噪的研究最早开始于上个世纪 60 年代,经过了几十年的发展,已经取得了巨大的进步,我们把降噪算法大致的分为以下几类。
(1)子空间方法,其基本思想是将含噪语音信号映射到信号子空间和噪声子空间,纯净语音信号可以通过消除噪声子空间成分和保留信号子空间成分的方式进行估计;
(2)短时谱减法,该方法假设噪声信号是平稳的且变化缓慢,使用带噪信号的频谱减去估计出的噪声信号的频谱,从而得到降噪后的语音信号;(3)维纳滤波器,算法的基本原理是根据最小均方误差准则,用维纳滤波器估计语音信号,然后从带噪信号中提取出语音信号;
(4)基于听觉掩蔽效应的方法,该方法模拟人耳的感知特性,对某一时刻某一频率确定一个人耳可感受到噪声能量的最低阈值进行计算,通过将噪声能量控制在该阈值以下,从而达到最大限度的掩蔽残留噪声和防止语音失真的目的;
(5)基于噪声估计的方法,该方法一般是基于噪声和语音特性的不同,通过 VAD(Voice Activity Detection,语音端点检测)或语音存在概率对噪声成分和语音成分进行区分,但当噪声与语音特性类似时,此算法往往不能准确区分含噪语音中语音和噪声的成分;
(6)AI 降噪, AI 降噪技术能一定程度上解决传统降噪技术存在的问题,比如在一些瞬态噪声(持续时间短、能量高的噪声,如关门声,敲击声等等)和一些非平稳噪声(随时间变化快,随机波动不可预测,如吵闹的街道)的处理上,AI 降噪的优势更明显。
无论是传统 NS 技术还是 AI NS 技术,我们在产品上线时都需要考虑包体积和算力影响,以便运用于移动端和 loT 设备,即要在保证模型是轻量级的基础上还要最大程度地保证 NS 性能,这也是实际产品上线最具挑战的地方之一,其中,模型的量级在上线后已经可以得到保证,那么 NS 的性能是否能够达标呢?这里我们把重点放在如何评估 NS 的性能上,针对 NS 的调参、NS 的重构、新 NS 算法的提出、不同 NS 性能的对比,我们如何站在用户体验角度去评估 NS 技术的性能呢?
首先,我们把测评 NS 的方法分类为主观测试方法和客观测试方法,其中客观测试又分为侵入式(Intrusive)和非侵入式(Non-intrusive),或者叫做有参的和无参的,下面解释一下其含义和优缺点。
我们认为主观测试可以直接反映用户体验,而主观测试结果和客观测试结果一致,则可以证明客观测试的正确性,此时,客观测试也可反映用户体验。下面我们看看声网是如何评估 NS 的性能的。
我们正在搭建一套全方位的、可靠的、可长期依赖的 NS 测评系统,我们相信它可以应对未来任何带噪场景(目前可覆盖超过 70 种噪声类型)和任何 NS 技术,并且我们不指定特定的测试语料、采样率和有效频谱,任何人的说话内容都可以作为被测对象。以这个目的作为出发点,我们对现有的 NS 测评技术进行了验证,发现它们并不能够覆盖我们的所有通话场景、也不能完全覆盖我们测试的噪声类型、更不能代表主观感受。因此,我们拟合了新的全参考 NS 指标,同时用深度学习的算法去做无参考的模型,两种方案同时进行。下面简单阐述一下现有的 NS 测评指标、我们的验证方法、以及我们如何去做全参考和无参考的 NS 测评模型。
1.现有的 NS 测评指标:通过调研大量文献、权威性 Paper 和一些开源网站如https://github.com/schmiph2/pysepmNS 的客观指标库,其中包含像常见的 PESQ、语音分段信噪比 SegSNR、短时可懂度 STOI 等,以及参考语音和测试语音之间某种形式的距离特征,如倒谱距离(Cepstrum,并根据我们实际的场景需求,我们开发了一个用于测评 Distance, CD)能反映非线形失真对音质的影响、对数谱距离(Log Spectral Distance,LSD)用于刻画两个频谱之间的距离度量、NCM(Normalized Covariance Measure)评价方法是计算纯净语音信号与含噪语音在频域内的包络信号之间的协方差。综合测度 Csig、Cbak、Covl 分别表示 predicted rating [1-5] of speech distortion、predicted rating [1-5] of noise distortion、predicted rating [1-5] of overall quality,是通过结合多个客观测度值形成综合测度,使用综合测度的原因是,不同的客观测度捕捉失真信号的不同特征,因此采用线性或者非线形的方式组合这些测度值可能显著改善相关性。
每个指标对应着 NS 前后音频的某些特征的变化,每个指标从不同的角度去衡量 NS 的性能。我们不禁有个疑问?这些指标是不是能与主观感受画上等号?除了算法上有合理性,我们怎么确保它跟主观的一致?是不是这些客观指标没问题了,主观测出来就不会有问题?我们怎么确保这些指标的覆盖性?
2.我们的验证方法:为了验证我们建立的客观指标库的准确性及与主观体验的相关性,我们做了基于众包的主观音频测试,并开发了一款专门用于众包主观标注的 APP,整个流程我们遵循了 P808,P835 以及借鉴 NS 挑战赛,对测试数据、时长、环境、设备、测试人员等等都做出了要求。我们主要关注三个维度,人声清晰度 SMOS,噪声舒适度 NMOS,整体质量 GMOS,范围都是 1~5 分,下面给出对应的 MOS 评分相关描述和 APP 页面设计。
那么主观标注的结果与之前我们提到的客观指标库中的指标之间有多大的相关性呢?我们对客观指标库中所有客观指标进行了统计,这里我们只给出 PESQ 与主观标注的 PLCC(Pearson linear correlation coefficient):
这里的主观 SMOS、NMOS、GMOS 是由 200 条数据/每条数据 32 人标注的均值计算得出。
3.如何去做全参考和无参考的 NS 测评模型:随着主观标注数据量的累积,我们发现现有的指标精度不足以覆盖我们的所有场景、噪声类型、更不能代表主观感受。因此我们拟合了新的综合测度 MOS 分,用于测评 NS 的性能。
我们的方案一是全参考模型,即以客观指标库中的指标作为特征输入,众包标注的结果当作标签训练三个模型,三个模型的输出分别是衡量语音、噪声、整体的分值。
以下是由 800 条数据组成的数据集,随机抽取 70% 的数据作为训练集,30% 的数据作为测试集;模型选取 GBDT(Gradient Boosting Decision Tree) 对 GMOS 的训练和测试情况,下图上半部分是训练集的 real GMOS 和训练好模型后模型预测训练集的 predicted GMOS,下半部分是测试集的 real GMOS 和训练好模型后模型预测测试集的 predicted GMOS,其中测试集的 real GMOS 和 predicted GMOS 之间的 PLCC 可达 0.945,SROCC(Spearman rank-order correlation coefficient) 可达 0.936,RMSE(Root Mean Square Error) 为 0.26.
我们的方案二是无参考模型,由于全参考的客观指标要求参考信号与测试信号之间必须按帧对齐,而实时 RTC 音频难免受到网络的影响而导致数据不按帧对齐,直接影响客观指标的准确性。为了避免这一因素的影响,我们也在做无参的 SQA(Speech Quality Assessment)模型,目前的技术核心是将音频转换为 Mel 频谱图,然后对 Mel 频谱图进行切割,利用 CNN 去提取每个切割后 segment 的质量特征,接着利用 self-attention 对特征序列在时间上建模,实现特征序列在时间上的交互,最后通过 attention 模型计算每个 segment 对整个 MOS 分的贡献度,从而映射到最终的 MOS。
这里我们给出无参 SQA 模型目前的训练精度,训练集共 1200 条带噪声数据,70% 做训练集,30% 做测试集,横坐标表示 epoch,蓝色的线表示训练 loss 随着 epoch 的变化,红色的线表示训练集随着 epoch 的增大,和训练集标签的 PLCC,绿色的线表示测试集随着 epoch 的增大,和测试集标签的 PLCC,我们可以看出目前离线的效果是很理想的,后续我们将增加更多场景的数据进行模型训练。
未来,我们会直接进行端到端的音频质量评估(Audio Quality Assessment,AQA),而噪声只是音频中影响主观体验的一个因子。我们会在线上搭建一套完整的实时音频评价系统,这个评价系统将是长期可靠的、高精度的,用于评价用户在实时音频互动中产生的厌恶或愉悦情绪的程度。整个流程包括建立方案、数据集的构建、众包标注(标注标准的建立、标注后数据的清洗与筛选、数据分布验证)、模型训练与优化和上线反馈等等。虽然现在我们面临着一些挑战,但只要制定出 smart 目标,那么这个目标就一定能实现。
Dev for Dev(Developer for Developer)是声网 Agora 与 RTC 开发者社区共同发起的开发者互动创新实践活动。透过工程师视角的技术分享、交流碰撞、项目共建等多种形式,汇聚开发者的力量,挖掘和传递最具价值的技术内容和项目,全面释放技术的创造力。