原创 庄恕、七琦 淘系技术 2020-09-01
背景介绍
户外旅行&户外代购&玉石市场
传统降噪算法可以部分处理这种噪声,它的方法是:
- 对时域信号做短时傅里叶变换,就得到了信号的频域表现形式,对幅度谱平方得到信号能量;
- 在计算了带噪语音的幅度谱后,会借助vad模块的结果进行噪声谱N的估计,由计算出的功率谱和估计出的噪声谱来计算先验信噪比;
- 再经过变换得到增益函数,一般取维纳增益,将计算得到的增益函数乘以带噪语音的频域形式 再经过反变换,就得到了增强后的语音的时域信号。
不难看出,这是一个比较复杂的信号分离任务,传统的信号处理方法通过一系列条件约束求得了最终的解析解或迭代解,一般假设噪声信号和语音信号之间相互独立,cosq为0,但这通常是不合理的假设,也影响了算法效果的上限;
问题与挑战
传统降噪算法面临的挑战如下:
- 非平稳突发性噪声抑制能力差,比如户外直播场景中突然出现的汽车鸣笛声,传统降噪算法就难以消除干净
- 传统算法增强后会有很多残留噪声,这些噪声会导致主观听感差,甚至影响语音信息传达的可懂度;
- 目前传统算法中求得解析解的过程中存在很多假设,难以适应复杂多变的实际场景,特别是瞬态噪声;
- 在低信噪比情况下,传统方法的降噪效果几乎是失效的,其中VAD模块误判的可能性大大增加,尤其在噪声的能量大于语音的能量时,几乎无法将语音谱恢复出来,而这对天然能量就比较低的辅音结构来说是毁灭性的
业界做法
针对传统算法存在的弊端,业界在2014年开始探索数据驱动类算法,也就是深度学习相关的算法,比较典型的是RNN Noise和 CRNN方法。
RNN Noise是一种基于传统算法改进的混合方法。整个算法为了保证实时性,训练特征主要以传统信号的特征为主,(涉及bark域的能量和pitch域的相关能量系数、pitch_index的值、带噪语音bark域的能量和带噪语音bark域倒谱相关的信息),一共42个,并没有采用深度学习算法中主流的自动提取特征机制,网络结构以GRU为主,同时有一个副产物VAD保证有效收敛,最终的输出为bark域的22个增益,经过插值平滑处理后与带噪信号的频域信号相乘,反变换后得到降噪后的时域语音信号。
这个算法的核心优势是可实时,性能消耗低,降噪能力也有所增强,但语音损伤比较严重,经过分析,认为原因主要有三个:
- 数据集问题,rnnoise的训练数据集中噪声质量是不高的,噪声中含有较多人声部分,这在一定程度上会导致语音损伤大的问题
- vad label制作的不准确性,简单的采用一些能量判断法当做vad模块的groundtruth,也会影响最终效果
- feature只有42个,网络输出只有22个,这样的设计在降低运算量的同时会损失部分详细信息,是会影响最终的效果;
CRNN方法一个典型的end2end的解决方案,输入是noisy的频域幅度谱,输出直接是降噪后的频域幅度谱,然后结合noisy的相位谱,进行时域数据的合成。网络模型采用了encoder+lstm+decoder的架构,无论是语音分离还是增强,这都是比较主流的一种网络结构,同时为了做到原理上可实时,卷积全部使用了因果卷积,CRNN在整段增强时效果是非常好的,增强后的主观听感也很好。
但存在的问题也比较大的问题:、
- 整段处理的输入无法满足流式处理的要求,在模型分帧后效果下降比较明显;
- 即使采用cache buffer的策略保证分帧后的效果,由于模型的感受野较大,性能开销也无法达到移动端实时的要求,同时,模型整段增强时本身消耗就比较大
- 中间存在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,更改数据混合方式,调整训练集中的噪声分布等改进项,从不同角度提升模型的训练效果
为了节省计算资源,我们采用了模型裁剪手段:
- 把neuron或weight剪掉,使得网络变小。通过对网络的分析会发现有些weight基本为0,对输出影响不大或有些neuron的output总是为0,那这种情况下就可以把它移除。
- 使用更少的bit来表示权重
- 调整网络的结构设计,减少参数量
- 模型可以自适应,在资源不充足的情况下,也可以输出一个还不错的结果;在资源充足时就做到最好
总结下来,传统降噪算法只能处理稳态噪声,非稳态突发噪声处理能力弱,但数据驱动类的算法稳态噪声及瞬时 非稳态噪声均可处理。在性能消耗上,传统算法是比较小的,数据驱动类算法会相对耗一些,为此,我们设计了小模型使用简单结构 以更好的发挥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等等