本篇文章将介绍我们团队如何基于深度学习做实时噪声抑制,并落地于移动端和家亲app的过程。全文将按照如下组织,介绍噪声的分类,如何选择算法去解决这些噪声的问题;如何通过深度学习的方式去设计算法,训练ai模型;最后会介绍目前ai降噪能达到什么样效果和重点应用场景。
part 02 噪声分类和降噪算法选择 实时音视频的应用场景中,设备处于复杂的声学环境,麦克风采集语音信号的同时还会采集大量噪声,对实时音视频质量来说是一个非常大的挑战。噪声的种类是多种多样的。根据噪声的数学统计特性可以将噪声分为两类:
平稳噪声:噪声的统计特性在比较长的时间里不会随时间而变化,比如白噪声、电风扇、空调、车内噪声等;
非平稳噪声:噪声的统计特性随时间在变化,如餐厅嘈杂噪声、地铁站、办公室、家庭厨房等。
在实时音视频应用中,通话易受到各类噪声干扰从而影响体验,因此实时音频降噪已经成为实时音视频中的一个重要功能。对于平稳的噪声 ,比如空调出风口呼呼声或者录制设备的底噪,它不会随着时间变化而产生较大变化,可以将其估计预测出来,通过简单的减法的方式把它去掉,常见的有谱减法、维纳滤波以及小波变换。对于非平稳噪声,例如马路上车子呼啸而过的声音、餐厅内餐盘的撞击声、家庭厨房内的锅具的敲击声,都是随机突发出现,是不可能通过估计预测的方式去解决的。传统算法对于非平稳噪声难以估计和消除,这也是我们采用深度学习算法的原因。
part 03 深度学习降噪算法设计
为了提高音频sdk对于各种噪声场景的降噪能力,弥补传统降噪算法的不足,我们研发了基于rnn的ai降噪模块,结合传统降噪技术和深度学习技术。重点针对家庭和办公室使用场景的降噪处理,在噪声数据集中加入大量的室内噪声类型,诸如办公室内的键盘敲击、办公桌与办公用品拖拉的摩擦声、座椅拖动、家庭中的厨房嘈杂声、地板撞击声等等。
与此同时,为了在移动端的实时语音处理落地,该ai音频降噪算法将计算开销和库的尺寸控制在一个非常低的量级。在计算开销上,以48khz为例,每帧语音的rnn网络处理处理仅需约17.5mflops,fft和ifft每帧语音需要约7.5mflops,特征提取需要约12mflops,总计约42mflops,计算复杂度约和48khz的opus编解码相当,在某品牌中端手机型号,统计rnn降噪模块cpu占用约为4%。在音频库的尺寸上,开启rnn降噪编译后,音频引擎库的体积仅仅增加约108kb。
part 04 网络模型及处理流程 该模块采用rnn 模型,原因是 rnn 相比其他学习模型(例如 cnn)携带时间信息,可以对时序信号进行建模,而不仅仅是单独的音频输入和输出帧。同时,模型采用门控循环单元(gru,如图1所示),实验表明,gru在语音降噪任务上的性能略好于lstm,并且由于gru的权值参数更少,可以节省计算资源。与简单的循环单元相比,gru有两个额外的门。重置门控制状态是否用于计算新状态,而更新门控制状态将根据新输入改变的程度。这个更新门使gru可以长时间记忆时序信息,这也是gru比简单的循环单元表现更好的原因。
图 1 左侧为简单循环单元,右侧为gru
模型的结构如图2所示。训练后的模型会被嵌入到音视频通信 sdk 中,通过读取硬件设备的音频流,对音频流进行分帧处理并送入 ai 降噪预处理模块中,预处理模块会将对应的特征(feature)计算出来,并输出到训练好的模型中,通过模型计算出对应的增益(gain)值,使用增益值对信号进行调整,最终达到降噪的目的(如图3所示)。
图 2. 基于gru的rnn网络模型
图3. 上方为模型训练流程,下方为实时降噪流程
part 05 ai降噪处理效果和落地 图4为带有键盘敲击噪声的降噪前后语音语谱图的对比,上半部分为降噪前的带噪语音信号,其中红色矩形框内为键盘敲击噪声。下半部分为降噪后的语音信号,通过观测可以发现,绝大部分键盘敲击声均可以被抑制,同时语音损伤控制在较低的程度。
图4. 带噪语音(通话过程伴随着键盘敲击声)降噪前后对比
目前的ai降噪模型,已经在手机端和家亲上线,改善手机端和家亲app通话降噪效果,对泛家庭、办公室等100多种噪声场景具备优秀的抑制能力,同时保持语音不失真。下一阶段,将将持续优化ai降噪模型的计算复杂度,以在iot低功耗设备上能够推广使用。
以上就是聊聊实时通信中的ai降噪技术的详细内容。
