写点什么

打破传统降噪算法,AliDenoise 的背后技术

2020 年 9 月 11 日

打破传统降噪算法,AliDenoise的背后技术

近年电商直播越来越火热,同时移动端直播变得越来越普及,直播场景也越来越多样化,不再限于传统的直播间,开阔喧嚷的户外、喧闹的商场甚至是市场都可以变成主播直播的根据地。影响直播最终观感最直接的两个因素就是画面和声音,场景的复杂化对传统的实时音频信号处理算法提出了更大的挑战,其中最直观的一个现象就是,场景变吵了,声音听起来不干净,这就是音频 3A 算法中的降噪算法需要处理的问题。


背景介绍


户外旅行 &户外代购 &玉石市场


传统降噪算法可以部分处理这种噪声,它的方法是:


  1. 对时域信号做短时傅里叶变换,就得到了信号的频域表现形式,对幅度谱平方得到信号能量;

  2. 在计算了带噪语音的幅度谱后,会借助 vad 模块的结果进行噪声谱 N 的估计,由计算出的功率谱和估计出的噪声谱来计算先验信噪比;

  3. 再经过变换得到增益函数,一般取维纳增益,将计算得到的增益函数乘以带噪语音的频域形式 再经过反变换,就得到了增强后的语音的时域信号。


不难看出,这是一个比较复杂的信号分离任务,传统的信号处理方法通过一系列条件约束求得了最终的解析解或迭代解,一般假设噪声信号和语音信号之间相互独立,cosq 为 0,但这通常是不合理的假设,也影响了算法效果的上限;



问题与挑战


传统降噪算法面临的挑战如下:


  1. 非平稳突发性噪声抑制能力差,比如户外直播场景中突然出现的汽车鸣笛声,传统降噪算法就难以消除干净

  2. 传统算法增强后会有很多残留噪声,这些噪声会导致主观听感差,甚至影响语音信息传达的可懂度;

  3. 目前传统算法中求得解析解的过程中存在很多假设,难以适应复杂多变的实际场景,特别是瞬态噪声;

  4. 在低信噪比情况下,传统方法的降噪效果几乎是失效的,其中 VAD 模块误判的可能性大大增加,尤其在噪声的能量大于语音的能量时,几乎无法将语音谱恢复出来,而这对天然能量就比较低的辅音结构来说是毁灭性的


业界做法

针对传统算法存在的弊端,业界在 2014 年开始探索数据驱动类算法,也就是深度学习相关的算法,比较典型的是 RNN Noise 和 CRNN 方法。


RNN Noise 是一种基于传统算法改进的混合方法。整个算法为了保证实时性,训练特征主要以传统信号的特征为主,(涉及 bark 域的能量和 pitch 域的相关能量系数、pitch_index 的值、带噪语音 bark 域的能量和带噪语音 bark 域倒谱相关的信息),一共 42 个,并没有采用深度学习算法中主流的自动提取特征机制,网络结构以 GRU 为主,同时有一个副产物 VAD 保证有效收敛,最终的输出为 bark 域的 22 个增益,经过插值平滑处理后与带噪信号的频域信号相乘,反变换后得到降噪后的时域语音信号。



这个算法的核心优势是可实时,性能消耗低,降噪能力也有所增强,但语音损伤比较严重,经过分析,认为原因主要有三个:


  1. 数据集问题,rnnoise 的训练数据集中噪声质量是不高的,噪声中含有较多人声部分,这在一定程度上会导致语音损伤大的问题

  2. vad label 制作的不准确性,简单的采用一些能量判断法当做 vad 模块的 groundtruth,也会影响最终效果

  3. feature 只有 42 个,网络输出只有 22 个,这样的设计在降低运算量的同时会损失部分详细信息,是会影响最终的效果;


CRNN 方法一个典型的 end2end 的解决方案,输入是 noisy 的频域幅度谱,输出直接是降噪后的频域幅度谱,然后结合 noisy 的相位谱,进行时域数据的合成。网络模型采用了 encoder+lstm+decoder 的架构,无论是语音分离还是增强,这都是比较主流的一种网络结构,同时为了做到原理上可实时,卷积全部使用了因果卷积,CRNN 在整段增强时效果是非常好的,增强后的主观听感也很好。



但存在的问题也比较大的问题:、


  1. 整段处理的输入无法满足流式处理的要求,在模型分帧后效果下降比较明显;

  2. 即使采用 cache buffer 的策略保证分帧后的效果,由于模型的感受野较大,性能开销也无法达到移动端实时的要求,同时,模型整段增强时本身消耗就比较大

  3. 中间存在 lstm 层,模型的轻量化比较困难;


AliDenoise

AliDenoise 是综合 RNNNoise 和 CRNN 的一种自研算法,首先为了可实际部署,去除了中间的 lstm 层,此时如果训练目标还是具有时序关系的降噪后频谱,效果会大大受到影响,所以我们更改了降噪策略,进行反向降噪,改为 speech_based denoise method,只利用 CNN 较强的提取特征能力,学习比较有特色的语谱纹路,将输出抽象为传统信号处理中的先验信噪比这一概念,本质上也是一种增益,这一转化也有益于提升模型对未见噪声的泛化能力,可以通过大量纯净语音的训练反向应对未见过的噪声达到降噪的目的,在保证可实时处理方面,首先更改了模型 norm 的方式,由 layer norm 变为 frame norm,从原理上保证可实时处理,同时客观指标并没有下降,还有轻微的提升;然后在工程实践中,采用 cache buffer 策略,实现了 CNN 的流式处理,同时保证分帧后的效果,可以支持任意延时,这也是目前线上应用的版本。


网络结构以 1D 卷积为主,同时加入了 res 结构,在每一个 blocks 中实现了三个卷积单元,通过调整 kernel size 实现不同维度的特征提取,将不同 blocks 连接起来,达到推进抽象特征的深入过程,最终得出期望的时频域上的先验信噪比。除此之外,我还进行了去除 seq_len,添加 highpass,更改数据混合方式,调整训练集中的噪声分布等改进项,从不同角度提升模型的训练效果



为了节省计算资源,我们采用了模型裁剪手段:


  1. 把 neuron 或 weight 剪掉,使得网络变小。通过对网络的分析会发现有些 weight 基本为 0,对输出影响不大或有些 neuron 的 output 总是为 0,那这种情况下就可以把它移除。

  2. 使用更少的 bit 来表示权重

  3. 调整网络的结构设计,减少参数量

  4. 模型可以自适应,在资源不充足的情况下,也可以输出一个还不错的结果;在资源充足时就做到最好



总结下来,传统降噪算法只能处理稳态噪声,非稳态突发噪声处理能力弱,但数据驱动类的算法稳态噪声及瞬时 非稳态噪声均可处理。在性能消耗上,传统算法是比较小的,数据驱动类算法会相对耗一些,为此,我们设计了小模型使用简单结构 以更好的发挥 MNN 的优化效果的策略为主,在实用性上,传统算法经验参数多,场景适应性差,而数据驱动类算法,场景适应性是比较好。


算法效果


我们看一下算法效果,客观指标主要通过 PESQ 语音质量与 STOI 语音可懂度来衡量,我们构建了 ali_test_datasets,含有 1w 多条带噪语音,涵盖街道、咖啡馆等日常环境,分为四个子测试集,_itu 表示数据集中的纯净语音为 itu 标准测试序列,_objective 表示数据集中的噪声为 训练集中未见 但是同分布噪声,相对应的就是数据集中的噪声为训练集中未见且不同分布的噪声,环境噪声强度为-5 到 15db,最大降噪力度控制在-25db,我们和业界标杆的竞品进行对比,最终可以看到在 STOI 可懂度方面的提升中 ali_denoise 和竞品明显优于传统信号处理算法,而 ali_denoise 略高于竞品,在 PESQ 语音质量方面的提升中, ali_denoise >竞品>rtc,同时在性能消耗方面,ali_denoise 可以支持 iphone6 及以上的机型,竞品目前可以支持 iphone8 及以上的机型。



ali_denoise 算法在算法应用落地上主要具有 5 大优势:


第一 利用开源的中英文纯净语音数据集、噪声集,自录噪声并进行数据清洗,同时针对淘宝直播场景构建突发瞬时噪声数据集,构建了我们私有化数据集


第二 通过 cache buffer 策略,可实时输出增强后的语音,契合直播场景,同时支持任意延时


第三 目前深度学习类的增强算法只支持 16khz,ali_denoise 支持 48khz 全频带语音增强处理,其中 0-16k 采用神经网络处理,16-48k 采用传统算法+神经网络混合方式处理


第四 为了保证线上音视频同步,独立智能降噪模块,和采集线程解耦,iphone6 以上机型直播无异常;


第五 由于采用了小型化模型设计和裁剪工作,性能消耗较低;




受新冠疫情的影响,互联网进入全民直播大时代,教育直播,旅游直播,助农直播,电商直播,政务直播等空前兴起。团队研发的智能降噪技术应用到阿里集团内的多个场景。在助农直播中,我们的算法有效去除田间机械的噪声,还原清晰语音;在钉钉在线课堂中,我们智能降噪结合盲源回声消除,助力 2 亿中小学生在家上课,提供高质量的声音体验;在电商直播中,我们的算法支撑了海外代购,户外运动,乐器直播,音乐晚会等全场景语音处理需求。我们秉承“让声音更清晰,让沟通更有效”的理念,追求更高质量的语音体验。


未来展望

AI+实时音频处理这个方向其实还有很多可以探索的,在前端处理算法中,除了我们已经优化的 ANS 算法外,AEC 的非线性残留部分也可以结合深度学习类算法进行优化,可以将参考信号和观测信号的频域特征 concat 起来作为输入,观测信号的类 IRM 指标作为输出,进而得到估计的近端信号;类似的任务还有啸叫抑制及后端处理算法中的带宽扩展、智能 PLC 等等



本文转载自公众号淘系技术(ID:AlibabaMTT)。


原文链接


打破传统降噪算法,AliDenoise的背后技术


2020 年 9 月 11 日 10:082411

评论

发布
暂无评论
发现更多内容

阅读笔记:Python A-Z 技巧

小匚

Python 读书笔记 日常思考

容器 & 服务:Jenkins本地及docker安装部署

程序员架构进阶

容器 jenkins 七日更 28天写作 2月春节不断更

OpenCV--平移与旋转

IT蜗壳-Tango

七日更 2月春节不断更

图文详解网络基础知识

第四章学习总结

Kasn

产品经理 产品经理训练

日记 2021年2月7日(周日)

Changing Lin

个人感悟 2月春节不断更

5G花式过年指南

脑极体

尝试从用户的角度思考(PO的姿势)

Bruce Talk

Scrum 敏捷开发 Agile Product Owner

2 期架构师训练营 - 第八周作业与总结

Vicente

架构师训练营第2期

2 期架构师训练营 - 第九周作业与总结

Vicente

架构师训练营第2期

极客大学架构师训练营第6周作业

cafebaby

最新版gradle安装使用简介

程序那些事

Gradle 程序那些事 构建工具 build 打包工具

浪潮云洲:从工业互联网实践想开去

浪潮云

工业互联网

第十一周 安全稳定 作业 「架构师训练营 3 期」

feiyun123

物流系统抢单简单设计

DL

白话Mysql的锁和事务隔离级别!死锁、间隙锁你都知道吗?

Java鱼仔

MySQL 高可用

Linux Lab 进阶: Rootfs 文件系统 &Linux 与 Uboot 调试

贾献华

Linux Linux Kenel rootfs uboot usb

驱动力读书笔记之五

张老蔫

28天写作

sql注入竟然把我们的系统搞挂了,怎么办?

苏三说技术

java安全

架构师训练营 4 期 第6周

引花眠

架构师训练营 4 期

【LeetCode】盒子中小球的最大数量

HQ数字卡

算法 LeetCode 2月春节不断更

Java函数式编程Stream.collect()为什么这么受欢迎?

码农架构

Java 架构 函数式编程

2 期架构师训练营 - 第六周作业与总结

Vicente

架构师训练营第2期

2 期架构师训练营 - 第七周作业与总结

Vicente

架构师训练营第2期

【Python】给PDF添加水印

AXYZdong

Python 2月春节不断更

产品经理训练营--第四周作业

月亮 😝

大作业(二)-知识点

hunk

架构师训练营第2期

第四章作业

Kasn

产品经理 产品经理训练营

《未来呼啸而来》- 技术改变生活

石云升

2月春节不断更 技术改变生活 未来呼啸而来

2 期架构师训练营 - 第四周作业与总结

Vicente

架构师训练营第2期

协会组织如何实现数字化落地应用?

boshi

数字化转型 七日更

打破传统降噪算法,AliDenoise的背后技术-InfoQ