正文字数:4854  阅读时长:7分钟

将AI算法任务模块化是一种解决AI音频处理算法应用效果不够好、通用/扩展性差、计算开销大等问题的有效方法。网易云信 资深音频算法工程师 郝一亚在LiveVideoStackCon 2020北京站的演讲中就“模块化”是怎样解决上述问题的,“模块化”工程实现的可行性等问题进行详细解析,并举例介绍了目前市场中的几个“模块化”的成功案例。

文 / 郝一亚

整理 / LiveVideoStack

大家好,我是郝一亚,来自网易云信,目前主要负责网易云信在RTC领域的音频算法的研发。本次我想要分享的题目是如何将AI音频算法应用、结合到RTC中,我会结合自己在国外的一些研究和开发的经验,包括网易云信在AI音频算法应用实战当中的一些经验总结,和大家一起聊一聊如何将AI音频算法与RTC有机结合。

01

RTC中AI音频的现状

TITTLES

首先,第一个问题是RTC中AI音频到底是处于一个什么阶段?可能大家会接收到比较极端的两种不同信息:第一种就是目前AI算法如Deep Learning等在各行业都开始广泛应用,效果也比较好;另外一种就是大家在实际的工作当中,可能会感受到AI在某些情况下,比如说在训练集和一些特定Case下的感觉还不错,但很难落地、上线到实际的产品当中,存在着各种各样的问题和困难。那么首先我们来简单分析下目前AI音频到底是处于一个怎样的阶段。

1.1 音频处理中AI的力量

先来介绍一些好的方面,例如结合CNN的降噪,最早是因为AI在Computer vision领域成功的应用,我们就可以把这种语谱图(如图所示)作为一个图像的概念。这样的方式为CNN和降噪模块的有机结合提供了一个契机。

图中展示的就是一个CNN的降噪,我们可以看到,如左上角图所示,右边是传统的降噪方法,Noisy Speech相对于原始信号,它的信噪比已经很低了。而左边是一个MMSE的算法,相比于传统方法是有一定提升的,特别是非语音段。但我们可以从中看到特别是高频的部分,还是存在很多的残留。从横向对比来看,AI算法在基于传统的方法之上,可以让我们在非语音段有对噪声有一个非常好的抑制,其结果对比原始信号,可以看到其实相似度非常高,肉眼基本很难区别。

下面的例子是一个场景的分类,说到有关分类的问题,其实我个人觉得这是AI比较擅长的一个方向。我们可以看到Noise Suppression、Sound Classification、Acoustic Echo Control,Blind Source Separation这四种方式其实都是结合神经网络的方式。如图左下角所示的AI Sound Classification是一个基于简单的模型的方式,是不涉及任何神经网络的。我们可以看到尽管因为任务的难度较大,所能达到的只有百分之六十左右的准确率,但和传统方法相比还是有很大程度的提升。

之所以列举出这两个例子,是希望让大家知道其实我们在音频上有很多的模块已经可以用AI来解决,包括这两个例子在内,以及之前提到过的AEC,还有NLP(非线性处理)模块其实现在也有很多研究是在结合AI来做,除此之外还包括BSS (盲源分离),目前我知道有些落地的项目也是基于AI的。所以总得来说AI在音频算法中的应用是多种多样的,是多点开花的。

1.2 音频处理中AI的挑战与局限

接下来介绍AI音频的一些局限,在这里我主要总结了三点:第一点我们能想到的就是AI的计算量和计算复杂度的问题。通常来说AI的模型,特别是现在神经网络的模型,它的计算量平均来说会比传统算法更大一些。对于大部分终端设备来说,其算力是有限的,PC设备相对还好一些,但是我们还需要保证实时性,因此将AI的模型全部附加在终端设备上,对于设备的硬件来说还是有比较大的压力的。第二点是泛化能力。在数据驱动的方向上,泛化能力有限一直是一个问题。比如说我们有自己的数据集,那么我们该怎么用有限的数据来cover更多的结果,特别是由于RTC覆盖的业务场景会非常多,比如教育领域、泛娱乐领域,每个领域的场景都会有所不同,AI算法要cover所有场景更是难上加难;最后一点是鲁棒性,和泛化性略有相似,但更多的是指一些突发情况,比如在某些场景中突发的噪声、时间上的跳变、参考时间的不齐等等。在这些情况的影响下,系统够不够稳定?系统会不会犯错?犯的错会不会是一个大错?这其实很考验AI的算法,就相当于我们把所有的东西丢到一个黑盒子里面,看它是否能够全部的、真正的运行正常。

总结上面提到的两点,我认为AI的效果,它的优势其实已经被证实了,但由于算力和数据等各方面的问题以及AI模型本身的一些问题,它现在还达不到完全替换传统信号处理方法的阶段。

RTC领域的Tsahi专门就这一问题做了很多的评估,这里我们引用了Tsahi的一张图,根据他的分析目前我们的位置刚好是处于一个临界点。也就是从现在向后走,当我们的算力得到进一步提升,或者是我们在数学或各个基础学科上有所突破,可能会迎来整个AI的一个大爆发,但就目前看来看我们正处于一个临界的位置。所以今天我想和大家一起探讨的是如何在临界位置去扬长避短,如何应用AI的优势,然后将它有机的结合在我们的RTC里面。

02

“模块化”

TITTLES

“模块化”就是其中的一个有效途径,模块化对应的主要是:例如我们有一个端到端的长链路,有一个降噪的算法。长链路就是说从数据的输入一直到数据的输出,如果我们直接将其当成黑盒来训练,这就是一个非常长的端到端的算法。那对应的模块化就是我们“能不能将这个长链路分解成一些小的模块”,其中一些小的模块是很适合用AI去做的,我们用小的模块去做,既节省了开销,也能够解决很多之前我们提到的问题,就像是让专业的人去做对应专业的事情。

示例一:音频降噪中的AI算法

举个例子,这里是一个比较通用的端到端的AI降噪算法。我们来看如图下方所示的训练的过程,首先将输入的信号放到频域STFT,然后就直接拿它的Magnitude,先不用相位,直接把它的一些频点拿去,将它的一些Feature提取出来做Training,这是一个非常直观的训练过程。

训练完成后直接放在我们的实时的系统里面,在实时系统里进行同样的操作。然后我们将相位拿出来,先放在这里不做任何操作。接着我们可以通过做一个Noisy Floor 或者是简单的VAD判断一下,然后同样进行特征提取,放到预先训练并Frozen好的降噪的模块里进行处理,最后和我们的Phase结合,得到我们的输出。

其实很多的AI算法如果从宏观的角度来考虑,只需要有一个输入,有一个输出,其它的就都可以全部交给机器,让它自己去训练。但这就会遇到我们刚才提的三个问题:计算复杂度,泛化能力和鲁棒性,也许我们可以简单的做一些权衡,比如牺牲一些计算时间去换取更高鲁棒性,但其实整体上还是很难突破这个瓶颈。

那么,怎么有效的解决这个问题呢?这里我们看一个传统信号处理中的降噪算法,跟刚才介绍到的方法比较像,唯一不同的地方是它分别添加了一个Speech Estimation的模型和Noise Estimation模型,这里面会有比如说类似于先验概率(Prior-SNR)这样的计算,再通过后面的结合就会有类似于对于每个频点有一个gain计算出来,结合起来后处理然后再输出。

那我们看一下,这里的Noise Estimation模块,其实是比较适合拿出来单独做深度学习训练的小模块,特别是假设噪声是一个Stationary Noise的稳态噪声,是更适合的。在这里,我们可以不用端到端的去训练整个AI的模型,而是把这个noise estimation训练成一个噪声估计模型。后面我们在实时系统里面,每次遇到Noise Estimation,我们就不再是一个传统的Noise Estimation,我们就会用这个训练好的Model 去把我们想要的一些参数和feature都计算出来。

还有一个就是VAD模块,这里的VAD不是时域上的VAD,而是对于每个频点有一个判断。这种Classification的问题是很适合通过AI 的Model 来做的,这也是可以单独拿出来做训练的模块。

我们再回顾一下这三个问题:计算复杂度、鲁棒性和泛化能力,通过模块化,计算复杂度的问题我们可以用一个轻量级的网络来解决。刚才我们看了端到端的NS图,我们要解决这个问题,一般会用到层数稍微偏多的网络,因为我们要解决的问题是比较复杂的,需要从噪声和语音叠加的信号里面,将噪声给抑制掉。但是如果我们换作只对Noise 去进行一个Estimation,那本身的问题就会比较简单,也就是我们提到的一个简单的训练目标。对于这种训练目标,这些问题本身也会更适合DNN的Model 去学习。

示例二:声音场景检测

再来看一个例子,这个是一个声音的场景检测分类。刚才现场也有朋友提到过,如果回声消除里是音乐声怎么办?如果是场景检测的话,我们会有一个Music Detection,如果检测出是音乐类的场景,我们会有另外的一套机制来处理。例如我们NS中有一套对于音乐声的标准,最直观的就是弱处理,还可以通过NLP里面的一些相应的处理方式;第二个就是我们简单对Noise 进行分类,然后对应刚才提到的Noise Model的Training。比如说我们可以分类检测出现在平稳噪声是什么类型的平稳噪声,或者是检测出现一些非平稳的噪声的类型,我们会有针对不同噪声的预训练的Model,可以结合不同场景优化NS;第三个场景是针对底噪的估计,底噪是一个比较严重的问题,特别是在会议场景,开放的办公环境下。那么应该如何来估计底噪?因为底噪较常见的是平稳的噪声,如果我们有一个Noise Detection来辅助,底噪估计的准确性会大幅提高,对系统来说是一个整体的优化。在这里我列出了场景检测的三种不同形式,虽然场景检测是一个很小的模块,是原本不属于例如RTC的3A算法、长链路中的模板,是额外附加的子模块。但当我们有了这个模块后,可能会有更多的东西和更多的应用场景可以来优化我们的3A算法中的各个模块。

示例三:波到达方向估计

Direction of Arrival-DOA,

在现在的RTC中,DOA一般会搭载着Beamforming和Microphone Array

如图中Demo所示,使用的是圆阵,有八个麦克风,一般对应的是会议室的场景,大家可能会比较容易联想到类似形状的麦克风,或者是八爪鱼的形状的麦克风。除了这种形式之外,还有一些平板的电视一般是线阵的,也同样是阵列的麦克风。它是通过阵列麦克风形成不同的Beam,然后通过DOA来选择Active Speaker 是在哪个Beam上,并且增强它的SNR,而其它噪声的因为在旁瓣上,就会被自然地抑制掉。而且Beamforming是一个线性的,不存在非线性的失帧。

关于DOA, 其实传统算法有GCC-PHAT和SRP等,是高精度的,能够从数学上精确判断具体的多少度。

但在实际的场景中beamforming自己有宽度,一般我们会做二十多度,或者是十五度,相邻的beam会有一些重叠,其实我们不需要那么高的精度。现在有一个方法就是通过Beam Selection直接去判断应该选择哪个Beam。DOA会多出来这样的一个分支,在这个分支上有很多传统的算法。我自己在这方面也进行了很多的研究,比如在Beam的能量上,哪个能量大我就用哪个。我自己也提出过两个方法,都是关于频域信息提取的,但是后面通过对于传统算法和DNN算法的比较和研究,尝试了通过CNN、RNN或者CNN结合一些之前帧的信息的方式,也用不同的feature,lost function,基本上大部分的效果都会比传统的方法要好很多,包括一些轻量级的一些网络。

03

未来展望

TITTLES

刚才我们讲了几个例子,其实在整个的模块化当中还会有很多的一些其它小的子模块,可以拿出来,不仅限于之前提到的那些。比如说我们最近研究的AEC中的NLP(非线性处理)模块中,尝试的结合BSS的方法,比如ICA。ICA中有一些子模块可以提取出来,做一些AI 的Training,这个也是我们目前认为比较可行的路,从结果上来看效果都会比之前的好很多。

对于未来,分享开始的时候我们就提到了Tsahi的预测,未来可能会有更多的AI算法融合进来,未来的爆发点可能是更先进的神经网络模型,更高效的GPU,但是有一项关键点不会变,会一直被需要,那就是数据。

数据目前我们可以大致分为几个部分,比如Open Source,在学术界大家会分享,会推动整体的进程,可能会有第三方公司提供一些数据,同时我们自己可能也会收集一些数据。现在网易云信在做的就是针对很不同的NS场景进行AI的降噪,这一部分噪声对于我们而言其实是比较难寻找到的,尤其是前两个途径中。一是因为这些噪声本来就会很特别,Open Source很有限。如果和第三方合作,我们是考虑到验证和收集的过程中会有很多沟通成本。所以我们大部分都是自己收集的。自己收集就需要有自己的一些基础设备,可能会要求有自己的消声室,自己的录音棚环境,还有一些工具:人工头、人工嘴来播放,还需要一些收集的设备,比如标准麦克风等。还需要很多其他配套的自动化工具,比如Labeling的工具。目前我们网易云信已经配备了全套工具和环境,我们现在已经自己采集了很多数据集,并且应用到了我们AI算法中。

下面我们来给大家演示一个demo,大家可以体验一下从没有降噪到降噪的处理过程。

除了音频之外,在视频方面我们也有很多算法是由AI驱动的,以下是我们在视频超分方面的一个Demo演示视频,黄线右边是原始图像,左边是经过超分处理的,大家可以看到,左右两边的效果对比还是非常明显的。

湾区最原汁原味的技术,全球最前沿的应用实践

无需漂洋过海,我们在线上等您!

LiveVideoStackCon 2020 美国站

2020年12月10日-12月11日

点击【阅读原文】了解更多详细信息

如何将RTC中基于AI的音频算法有效的产品化相关推荐

  1. 游戏中的AI及实用算法逻辑

    这篇文章就不加具体的项目代码了,毕竟"敲代码是只是在一栋大楼设计好后具体的搬砖工作",程序猿贵在对这张图纸的设计好坏.再者这个话题我这车开的还不够稳,讲多了就翻车了.所以就跟大家分 ...

  2. Dubbo中基于权重的随机算法

    转载自dubbo源码解析-LoadBalance dubbo的源码地址:https://github.com/alibaba/dubbo Dubbo中的RandomLoadBalance采用基于权重的 ...

  3. ICASSP 2023 | 解密实时通话中基于 AI 的一些语音增强技术

    ‍ 动手点关注 干货不迷路 背景介绍 实时音视频通信 RTC 在成为人们生活和工作中不可或缺的基础设施后,其中所涉及的各类技术也在不断演进以应对处理复杂多场景问题,比如音频场景中,如何在多设备.多人. ...

  4. Algorand中基于VRF的抽签算法深入理解

    论文原文:https://dl.acm.org/doi/pdf/10.1145/3132747.3132757 一.算法介绍 此算法要做的事 从一群参选者中选出一些当选者,每一个参选者都事先有一个权重 ...

  5. 一文全面了解基于内容的推荐算法

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) 这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文 ...

  6. 一文看懂基于内容的推荐算法

    作者 | gongyouliu 来源 | 数据与智能 从本篇开始我们来详细讲解各类推荐算法.这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文会 ...

  7. 常用的基于内容的推荐算法实现原理

    这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文会从什么是基于内容的推荐算法.算法基本原理.应用场景.基于内容的推荐算法的优缺点.算法落地需要 ...

  8. 网易云信亮相LiveVideoStackCon2020,分享RTC中AI音频算法产品化经验

    10月31日-11月1日,LiveVideoStackCon2020音视频技术大会在北京隆重举办.本次大会以"多媒体开启新视界"为主题,聚焦在音频.视频.图像等技术的最新探索与应用 ...

  9. 浅谈语音质量保障:如何测试 RTC 中的音频质量?

    简介:日常音视频开会中我们或多或少会遭遇这些场景:"喂喂喂,可以听到我说话吗?我听你的声音断断续续的","咦,我怎么可以听到回声?","太吵啦,我听不 ...

最新文章

  1. js选择checkbox值,组织成key-value形式,传值到后台
  2. c语言寻找James,[semi-tutorial]某亚里亚写在JamesM边上的OS笔记
  3. java emma_java-使用emmarun(找不到主要方法)
  4. 怎么将数据进行正太转化_想要将电脑音频进行录制怎么操作
  5. CodeForces - 1561E Bottom-Tier Reversals(构造)
  6. JavaSE各阶段练习题----多线程-垃圾回收
  7. java togglebutton_ToggleButton和Switch使用大全
  8. 计算机申报专业怎么写,给申请计算机专业的学生的建议
  9. 一晃眼这个blog已经丢弃两年。。。
  10. H5编辑器核心算法和思想-遁地龙卷风
  11. openCV无法打开源文件opencv2\opencv.hpp
  12. python文本文件加密_Python 文本加密解密 中文TXT数据
  13. html设置ie兼容性视图,如何用脚本配置IE兼容性视图设置
  14. IE8补充前后缀快捷键
  15. python 数据可视化sns作图
  16. GNSS 周跳探测方法 之 TurboEdit
  17. 什么是云中台系统_“生于云中”的优势是真实的,但不是绝对的
  18. 开源办公开发平台丨Mysql5.7两套四节点主从结构环境搭建教程(一)
  19. 中粮、益海品牌集中度提高,中小米企机会在高端细分市场
  20. Unity赛车码表原理

热门文章

  1. 常用LINQ关键字用法汇总
  2. 手把手讲解 Android Hook入门Demo
  3. Java开源诊断工具 Arthas 发布v3.1.0
  4. java实现int类型数组元素拷贝
  5. 命令行开启windows下的iis信息服务,开启及配置http端口,开启及配置ftp端口
  6. Python命令行自动补全和记录历史命令
  7. 修改ECSHOP,支持图片云存储化(分离到专用图片服务器)
  8. memset函数具体说明
  9. CodeForces - 1354F Summoning Minions(最大费用最大流)
  10. 牛客 - 汉诺塔(思维+dp)