导读: 2021年10月21日,「QCon 全球软件开发大会」在上海举办,网易智企技术 VP 陈功作为出品人发起了「AI 时代下的融合通信技术」专场,邀请到网易云信、网易音视频实验室、网易云音乐的技术专家与大家一起分享融合通信技术趋势和演进方向、视频通信关键技术探索及实践、音频 AI 算法在 RTC 中的实践、网易云音乐网络库跨平台化实践等话题。
我们会针对四个演讲专题逐一进行介绍与分享,本期是我们的第三期,音频 AI 算法在 RTC 中的实践。
嘉宾介绍:郝一亚,网易云信音频算法专家,IEEE 审稿人。发表学术期刊/论文 15 篇,申请专利 7 项。曾参与美国卫生局 NIH 助听器音频算法项目、Apple AirPods 音频算法研发 、Facebook Reality Labs AR/VR 音频项目、以及 Zoom Video Communications 实时音频算法研发工作。目前在网易云信主要负责音频实验室搭建、3A 算法研发、AI 音频算法研发以及 RTC 音频标准制定。
随着人工智能技术、计算机技术、神经网络等领域的不断发展,AI 音频算法也在学术界和其他行业不断涌现,包括了线上实时通信 Real-Time Communication(RTC)领域。
从2013年开始,无论什么行业都可以听到,这个东西拿 AI 做效果非常好,这个技术我要用智能化去做,感觉万物皆可 AI,万物皆可智能,所有东西都可以用 AI 去做,并且做出来的效果都非常好。
但实际上很多技术还是在用传统的方法,比如在音频领域,更多的还是用基于信号处理这些积累了数百年的方法。AI 的方法还停留在实验室阶段,停留在仿真阶段。
本次分享将从“RTC 应用 AI 音频算法的难点”、“AI 音频算法落地的解决方案”、“网易云信 AI 音频算法落地案例”三个维度,和大家分享 AI 音频算法和 RTC 的实战经验。希望大家通过这一场分享,能对这些问题有新的认识和看法,也能从中得到一些灵感,无论是在音频 AI 或 RTC,甚至于其他行业中。
下图是 Tsahi 提出的,在 RTC 领域,AI 音频算法的趋势。图中的横坐标代表时间的发展,纵坐标是算法的质量。
如果是降噪算法可以理解为这个降噪算法的降噪力度/降噪量,以及降噪同时对语音的保护。
橙色这条线代表基于数字信号处理的传统方法。这类算法发展了数百年,但是随着趋势的发展,目前这些算法在优化过程中遇到了很多瓶颈。比如传统算法需要一些预设条件,要在这种条件下才能达到目标效果。但是现在的应用中,实际的业务场景非常复杂,比如线上的娱乐场景、会议场景。在这些场景中,有用信号和噪声信号非常复杂的混叠在一起,很多情况下都无法满足算法的预设条件。因此,在优化过程中单单利用传统算法是非常难突破的。
基于 AI,或者说 data-driven 的算法,发展相对较为缓慢,我认为原因之一是受困于我们的计算机硬件的算力。但随着算力不断提升,其发展速度会越来越快,在未来会在某种程度上取代传统算法。而 Tsahi 认为,我们当前刚好处在这两者旗鼓相当的位置,我个人觉得我们的时间节点偏左一点,因为目前很多 AI 算法还不能替代传统算法,传统算法依然是目前 RTC 领域的基石。而 AI 算法,我们更多的是去利用它的特性去解决特殊问题。
为什么说最后的趋势是 AI 算法的发展会越来越快?最重要的原因之一还是算力的提升,右边这张图从一个维度展示了算力的提升。从图中可以看出,自2000年开始,supercomputer 的算力以每五年十倍的增长趋势发展。
我们现在的 AI 音频算法在 RTC 中遇到的困难是哪些呢?主要是这三个方面。
计算复杂度:当 AI 模型比较大时,算力需求也会比较大。在 RTC 服务中,很多算法是需要落地在终端设备上的,而这些设备包括了一些中低端设备。在这些设备上,AI 算法能不能有效的运行起来,是我们衡量这个 AI 算法能不能被应用的重要标准之一。除此之外, RTC 的整个处理 pipeline 中有很多算法,而一个终端设备的计算资源又是有限的,怎样合理地分配算力资源也是对 AI 算法的一个挑战。
泛化能力、鲁棒性:泛化能力是指一个 AI 模型在学习了 Training Data 所涉及的场景之后,在其他未见过的场景中的拓展能力。鲁棒性是指 AI 模型在各个场景下,它的效果能不能维持在一个比较好的水平。这两个点都是 AI 音频算法落地 RTC 的困难点,因为 RTC 中设备和场景都很多样。早期的 RTC 更多理解为会议,这个场景相对比较单一,因为整个声学场景相对比较封闭,是室内的,而且采集信号相对来说失真都比较小。这在 RTC 算是一个比较好的场景。但是我们现在面对的 RTC 场景非常丰富,比如现在网易云信主攻的三个行业之首-娱乐行业。娱乐行业的场景相比会议场景复杂很多。其一是我们的 Desired Signal 可能不仅仅是语音了,还有可能音乐信号。而现在的 WebRTC 的很多音频算法都对音乐信号不友好。除此之外,复杂场景会带来复杂的背景噪声。比如马路上汽车的噪声,不仅仅是对于降噪算法很有挑战的瞬态噪声,而且 SNR 也相当低。而要应用一个 AI 算法,需要在有限的数据集里面去考虑到多种可能出现的场景。
我们刚刚讲的是 AI 音频算法的整体趋势和挑战。下一个章节我们分两个部分来讲,第一块以 AI 降噪为例,我们讨论一下落地 AI 算法过程中,具体落地的时候会存在哪些挑战。第二部分,我们以 VAD 算法为例,通过对传统算法、Machine-Learning 算法、深度学习算法这三者之间进行比较,来分析一下 AI 算法,特别是基于深度学习算法的优势。
以 AI 降噪为例,看一下具体落地当中的一些困难。
第一个还是计算复杂度。首先,在 RTC 中,音频是需要进行实时处理的,所以输入信号都是音频流,是连续的帧。我们假设每一帧都是一组十毫秒的音频采样数据,实时处理就是要保证在 i+1 帧来之前,处理完第 i 帧的数据。而这十毫秒就是最大的 process time。如果出现了在 process time 无法处理完的情况,就会出现丢失采样点,这对音质有非常严重影响。AI 算法要达到实时处理,对于稍微大一点模型是比较有难度的,所以在很多 AI 音频比赛里面会专门有一个能 real-time 的 track。但是实时运行对于 RTC 来说只是非常基础的第一步,只是保证我们能实时处理了,但是没有触及实时率的问题。纵观整个音频 APM 处理,AI 降噪只是其中的一个模块,其他还包括了 AEC、AGC、VAD 等模块。
除此之外,在音频处理之外,还有其他的模块处理,比如视频处理、网络拥塞控制等等。我们的工作是,需要让这么多算法同时满足 real-time 的要求,并且要同时尽量去降低处理 CPU 的占用率,去降低我们的 SDK 在用户设备上的 CPU 开销和耗电量。
第二个难点就是 Data。可以说 AI 算法最重要的就是 Data。实现一个 AI 算法,只要有 Data,就已经成功了一大半了。但音频算法的 Data 相比其他的一些领域相对较少。我们在开发 AI 算法时候,主要通过一些开源数据集和实验室真实设备录制来建立数据集。同时,我们也运用了一些数据增强的方法去扩充数据集。在音频算法中,AI 降噪的数据集是相对比较好做的,因为开源数据相对较多,数据 label 也比较好操作。但是对于另一些音频算法来说,收集、label 数据集是一个相当艰难的任务,比如我们的 AI 啸叫检测算法,目前在互联网上是基本没有关于啸叫的数据集的,而且啸叫信号的采集和 label 也是比较有挑战的。
虽然有这么多挑战,我们云信音频实验室也一直在不断积累数据,不断的去扩充语料库。我们也遍历不同的终端设备,用它们的麦克风去采集,这样可以把更真实的麦克风和房间响应加入数据集中。这对于要应用在不同终端设备上的 AI 算法来说非常重要,因为我们需要 AI 模型在训练中去学习不同的麦克风和房间的响应。
有了数据后,我们在调参过程中也遇到了困难。
对比一下传统算法,这是一个基于 MMSE 的传统降噪算法:左上角信号进来了,通过 FFT 我们可以拿到信号的幅度和相位,然后我们可以算出先验/后验信噪比,算出 Gain,然后把 Gain 作用在信号幅度上,之后和相位叠加做 iFFT 得到输出的时域信号。我们在调试这个算法时,如果发现误把语音当做噪声给压掉的情况,我们可以把那几帧信号拿出来,分段的对算法中每个模块的输出值来分析,找出问题。为什么我们可以这样做?原因是这里的每个参数都有具体的物理意义。但是针对深度学习的方法,整个算法其实是一个黑盒,例如一个卷积神经网络,入参被一层一层卷起来,每一层的中间参数无法对应一个具有物理意义的值,那我们在优化过程中也无法去定位问题。虽然我们在算法优化中遇到了这些问题,但是我们也通过不断的经验总结,积累了非常多的调参方法。虽然调参依然是一个挑战,但是通过积累我们已经有方法可以快速找的合适的模型和对应参数,去解决不同的音频问题。
以上就是实际落地 AI 降噪的时候遇到的这三个最困难的点。讲那么多 AI 算法的不好和困难,AI 算法能带给我们什么收益呢?
我们结合 VAD(Voice Activity Detection)来讲一讲各个算法之间的选择。
下图中右图展示了一个 VAD 对比结果,上面部分是干净的语音信号,VAD 要做的事情是把语音信号检测出来,在时间维度上标为1,其他就是0,代表噪声。
我们来看一下传统的 VAD 一般是怎么做的,这篇文章里面比较有代表性,大家看左边的流程图,左边分为两块,右边是一个基于能量的 VAD,这是最通俗易懂的。比如现在在这个会场我在说话,大家听到我的声音,声音肯定是比环境的底噪要高的,SNR 是大于0的,那我们就设一个能量门限值,高于这个能量的就是语音,低于这个能量的就是噪声。当然这里基于能量的 VAD 还做了很多其他的工作,包括能量怎么更准确的估计,门限值不断的适应新的环境和噪声。左边的这个方法是基于语音的其他 feature 的,比如频谱 Peak 等谐波信息。最后的这种方法是既结合了能量 VAD,又结合了频谱 Feature VAD 的一个方法,这也是这篇文章 propose 的方法,检测效果在这段音频中也是最好的。
再拿能量 VAD 举例,高于门限的是我们的语音,低于门限的是噪声,那么这个就可以看作一个单 Feature的 Classifier。如果用两个 feature,就可以像下面左上角的那张图那样表示。我们可以认为红色的点就是噪声,蓝色的点就是语音。传统算法大多都是线性的区分,就可能这样去切一刀,这样分了过后有很多蓝色的点会落在噪声的那边,也有很多红色的点会落在语音这边,这些就是错判和漏判。
有没有方法能把这个东西更高维度地把这两者区分开呢?我们可以引入 machine learning,可以更高维度的把这些点给抠出来,就像后面几张图展示的方法。我们这里只提到用两个 feature,在解决实际问题中,我们也常常用到更多的 feature,并结合不同的模型,从不同维度去做处理。
在云信的音频处理中,我们有很多不同的 VAD,这些 VAD 的职责不一样,效果也不一样。下面我来介绍一下其中的一个 VAD。我们先来看到中间的这两张图,这是两个时域的连续语音图,上面的语音和下面对比,可以看到被框出的这一段语音更密集,中间的噪声缝隙更小。我们把这框出的五秒左右的音频切成一千份很小的时段,然后去统计每一小段的能量,统计完的能量放在右边这个直方图里。
可以看到上面这个直方图中,靠右边 -10dB 这个地方有一个峰,-35dB 也有一个峰。那么这里的 -10dB 的代表语音的平均能量是 -10dB,-35dB 代表中间的这些噪声间隙能量是 -35dB。如果是统计下面这段语音,可以清楚的看到下面直方图中 -10dB 也有一个峰,但是比上面直方图里 -10dB 位置的峰要小,说明 -10dB 出现的次数少,而 -35dB 的峰相对变得明显了,因为它的噪声间隙次数增多了。在这个基础上,我们增加了一步,基于数据用机器学习的模型去学习这两个峰,把这两个峰估计出来。所以即便是 SNR 比较低,两个峰重叠的很厉害的情况,机器学习的方法也能把两者区分开。
既然我们用到了机器学习的思想,那我们能否用更复杂的模型去学习更多数据呢?那么下面我们讲讲怎么用神经网络的方法去实现 VAD。这里介绍一个基于 CNN 的 VAD 算法,这个模型用到了三个卷积层和一个全链接层,使用了 Log-Mel Energy 作为输入特征,没有其他复杂的设计,算是一个很直接的解决方法了。我们可以看一下右边的结果,选择这个结果是因为它是一个比较难的 case,第一是因为 SNR 是 0dB,第二是因为它的噪声都是生活中的非平稳噪声。对比的方法中,G729 和我们刚才介绍的基于信号处理的 VAD 类似,Sohn 和 Random Forest 是基于统计学的方法,CNN 就是这个基于神经网络的方法。分析结果我们可以看到,基于统计学的方法在大部分噪声中不够好,反而还比 G729 低,而 CNN 的 VAD 在各个噪声中都是表现最好的。
我想总结一下,基于深度学习的 AI VAD 的优势在于可以更深度的去区分语音和噪声,算法能力上限会更高。比如瞬态噪声,传统算法基本上不去 cover 这种情况,但是 AI VAD 是可以解决的。但是它的弱点依然是我们之前分析的复杂度、泛化能力等问题。
刚才讲了具体落地的时候遇到的具体困难和为什么在这些困难下,我们还是要选择 AI 算法。我们现在来讲一讲云信是怎么解决这些问题的。
刚才有讲到 AI 降噪的问题,我们的解决办法主要是左边这三点。
第一采用更适合的输入特征,一方面尽量减小输入特征量,以此来减小整个 model 的复杂度;另一方面是采用更适合当下问题的 feature 来作为模型的输入特征,选择更能代表信号特性的 feature。这是我们的第一个手段。
第二我们采用轻量级、更合适的网络,比如我们在降噪问题中,选择了 GRU 模型,因为它具有前后时序的记忆,并且相比 LSTM 更轻量级。在调参过程中,我们也尽量去压缩网络层数,保证运算速度。
第三个手段是定向优化,定向优化东西包含比较多,比如数据集优化,它包括了数据增强、数据清洗等工作。还有对模型压缩,来减小模型大小。在将算法集成进 SDK 的过程中,我们云信所有的基于 AI 的算法,都用的是我们自研的 NENN 推理框架,进一步加速了我们的 AI 模型的运算速度,降低了开销。最终,在不同终端设备上,包括了很多中低端的移动设备,我们的 AI 降噪在每10毫秒的帧上的运算时间差不多是 100-200 微秒之间,实时率接近 0.01。
还有一点值得一提,我们的 AI 算法很多时候需要配合传统算法进行处理。比如在回声消除中,我们可以把近远端信号和远端信号全部扔给 model 让它去训练,然后让这个 model 直接去处理整个 AEC 链路;我们也可以把时延估计和线性处理用传统方法去做,把非线性处理单独拿出来用一个 AI 模型去训练。后者做到了几个任务之间的解耦,所以最后能够达到算法效果得到了提升,且运算开销相对前者也小很多。
我们现在落地的 AI 算法包括了 AI 降噪、AI 音频场景检测,还有一个 AI 啸叫检测,和 3D 音效没有放到 PPT 里面。AI 回声消除这一个模块正在落地。下面是 AI 降噪的 demo 视频。
点击观看视频https://mp.weixin.qq.com/s/WcRPRcm1cYFlQRUeJuxsRw
从这个 demo 可以看到,里面有很多难处理的突发噪声,但是我们的算法都抑制的非常好。不过在降噪的同时,我们的人声也有发闷的感觉,针对这个问题,我们现在 AI 降噪2.0 也正在落地中,计划年底上线。新的这一版 AI 降噪在保护语音质量上做得更好,对于干净语音能做到基本无损。
最后还有一点想跟大家分享一下,借着现在很火的元宇宙,聊聊云信的 3D 音效。网易云信现在是唯一一家实现了 6DoF 空间音效的 RTC 厂商。
Facebook 最近发布一个完整的空间音效技术(MSA),这张图展示了 MSA 能达到的所有能力,而云信的 3D 音效也达到了图中的所有能力,比如房间反射、远场衰减等。这里介绍两个云信 3D 音效的落地案例,左下这个是 FPS 游戏“荒野行动”,在这类游戏中,特效声比如枪声的方向感大家都很熟悉,而云信的 3D 音效是在特效声之上,让开黑的队友语音也具有实时的方向感。
第二应用案例是网易雷火开发的沉浸式活动系统-瑶台,这个系统可以承接比如像 Qcon 这样的大型会议,把它变成一个全线上、全虚拟的场景。参会者可以以一个虚拟角色,以第一人称视角,沉浸式地去参加会议。云信 3D 音效在这个系统中提供了实时的空间音效,让参会者可以听到虚拟角色周围的实时语音,提供了更深入、真实的沉浸式的体验。