北京物流信息联盟

YeeCall在『移动终端的实时降噪』方面取得突破性成绩

2022-02-24 10:30:32


A:什么什么听不清!你大点声!你那边太吵了

B:@#¥¥@#¥%……&**%¥¥###

A:大点声。。。。


手机在噪声环境下的通话,大概是全世界人民的痛?  利用 YeeCall最新黑科技 - 基于深度学习开发的降噪技术处理下,无论是地铁里,工地上,车水马龙的路边,嘈杂的市场中,对方都能用YeeCall清晰的和您的沟通。


现在,请竖起耳朵,一起来听听,通过YeeCall 降噪技术处理的 ? “火车站实景录制” 声音前后对比



是不是特别神奇?到底是怎么做的的呢??


背景知识:传统噪声抑制算法

?‍?


在实时语音通信中,噪音抑制是不可或缺的一环,即对采集到的含噪声的语音信号,尽可能多地消除噪音,同时对语音内容造成最小的失真。下图是传统噪声抑制算法的原理图。


传统噪音抑制原理图


语音端点检测(VAD)模块用于区分语音和噪声;噪声谱估计模块用于计算噪声的频谱特性,然后,通过谱减模块对输入音频“减去”噪声。目前在语音实时通信中广泛应用的WebRTC的降噪算法就属于此类算法。此类算法对平稳类型的噪声有较好的抑制效果,但对非平稳噪声的抑制非常有限


YeeCall 采用的噪声抑制的算法

?


在真实环境中进行语音通信,外界往往各种非平稳噪声,因此我们有必要尝试非传统噪声抑制的算法。考虑到近年来深度学习在语音信号处理领域,特别是语音识别、自然语言处理等领域,取得突破性的进展。我们也尝试在YeeCall的语音增强领域引入深度学习,其中降噪模块是成果最明显的模块之一。


几个难题

?


移动终端,特别是安卓手机上使用基于深度学习的算法,我们需要解决以下难题 :

1.计算复杂度满足ARM上实时性;

2. CPU占有率必须小,否则发热量非常大;

3. 模型大小必须控制,否则应用的体积膨胀。


几个知识点

?


深度神经网络(DNNs)的出现使得语音信号处理领域发生了翻天覆地的变化。DNN通常融合了多种已知的结构,包括卷积层或是LSTM单元卷积神经网络(CNN)和循环神经网络(RNN)是DNN的两种主要的架构类型,被广泛应用于各种各样的语音信号处理任务。


CNN 的特点是善于抽取位置不变特征,而 RNN 的特点是善于按序列对单元进行建模。通常情况下,CNN 是分层架构,RNN 是连续结构。在RNN中,神经元的输出可以在下一个时间段直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。


在进行实时语音降噪时,

我们应该怎么去选择呢?

?


考虑到在很多语音识别场合, DNN取得的不俗的表现,我们首先尝试利用多层结构的DNN进行降噪处理。为了便于提取特征,我们对输入的语音信号进行分帧,并转换为频谱图。考虑到1帧的频谱信息过少,我们每11帧作为一个处理单位,用于对语音和噪声区分。


针对不同网络架构以及优化目标函数( LSA、IRM)等进行大规模数据仿真,我们总结出一种6层的架构,DNDDND,其中N是batch归一化层,D是普通层,能够达到非常好降噪效果。从每11帧的频谱图中提取257*11维的特征作为输入,得到257维的特征作为输出。通过不断优化网络的结构和泛化性该方法目前效果已经超越最近两年公开发表的基于深度学习的语音降噪算法效果。




? 实时语音通信 的实时性意味着两方面:

时延小 & 处理时间少

----------------------

时延小


要时延小,那么必须分帧时长比较短,并且输入当前帧就能得到当前帧的处理结果。如果按照DNN的架构,我们需要缓冲11帧(当前帧+前5帧+后5帧)才能得到当前帧的降噪结果,就产生了5帧的时延,这在实时语音通信中是难以接受的。


考虑实时语音是一种时间序列,所以我们进一步尝试循环神经网络(RNN),因为RNN的特点是可以对时间序列建模,而并非只是建立输入和输出帧的映射关系。噪声估计需要对足够时长音频信号进行建模。在降噪处理中RNN相对于CNN最大的优势是输入当前帧立刻可以得到当前帧的处理结果,不需要缓冲后面的帧。早期的RNN需要通过时间反向传播导致梯度下降过程非常低效的。为了解决这个梯度消失问题,LSTM(Long Short Term Memory) 的引入可以将过去时刻发生的状态信息传递给当前时刻的计算中。LSTM对RNN隐含层的内部结构进行复杂化改造。LSTM 通过构建一些门(Gate),让网络能记住那些非常重要的信息,而这个核心的结构,就是 cell state。比如遗忘门,来选择性清空过去的记忆和更新较新的信息。

LSTM单元的结构图


新的问题来了:如何在手机上实时处理大计算量?


但是考虑到手机运算能力和资源,LSTM在运算量及存储上要求较高,因此在噪声抑制算法中我们使用执行效率更高的GRU(Gated Recurrent Unit,门限循环单元),而且GRU需要的运算资源更少。与一般的循环单元相比,GRU有两个额外的门,使得GRU可以长时间地记住信息。

GRU的结构图


已有的基于深度学习的噪声抑制方法使用具有数千个神经元和数千万个权重来执行噪声抑制,这样导致不仅庞大的计算量,还有模型过大,可能需要几十MB保存各种权重。这些方法都无法满足在手机上实时处理语音的要求。


如何才能大大的减少神经元和权重的数量?我们发现已有方法通常使用样本或频谱作为输入和输出,从而需要大量的输入输出节点。因此我们的做法是:训练的语音和噪声都是分帧提取特征后再送入RNN,RNN的输出是能量的修正权重,这样RNN的输入输出都只有几十维。这样整个RNN架构我们只需要使用几个GRU层,几千个权重就能完成任务。这很大程度上解决了我们手机上应用深度学习算法的两大难题CPU占有率必须小和模型体积必须小。


处理时间必须少


至此我们还有一个实时性的处理时间必须少的问题没有解决RNN的架构实现和训练都是利用TensorFlow和Python语言完成的。模型可以通过这样离线方式训练得到,但语音通话过程必须实时处理语音帧。考虑到Python在实时系统运行效率比不上C语言,我们调用模型对实时语音帧处理的模块使用C语言实现。考虑到手机CPU对浮点数处理能力不足,我们在进行处理时统一使用字节类型保存权重,这样大大降低运行内存,同时有效提高运算效率


OPPO F3(8核1.5G CPU, 4G RAM)上进行YeeCall的语音通话,每20ms的语音数据进行降噪处理所用平均时间为1.43ms,实时通话过程中开启降噪CPU占用率平均提高约1%。相比已有的深度学习降噪算法,动辄几十M的模型,我们模型的体积只有几十kb。将其添加到手机应用中,并不会引起应用体积膨胀。


对于基于深度学习的算法来说,训练数据集的规模是永远绕不过去的问题。多少训练数据才足够?训练数据越多越好?具体到降噪这个问题上,需要生成各种噪声强度的带噪语音(至少覆盖SNR=0dB~ 10dB),假设10000段长度为10s的干净语音,至少需要生成100000段带噪语音。这样造成了训练数据集爆炸性膨胀。


我们的做法是以帧为单位产生训练数据集干净语音帧和噪声帧随机组合产生带噪语音帧,考虑到干净语音帧和噪声帧的存在各种大小幅度,这样只要随机生成了足够的带噪语音帧,例如10000000帧,里面必然包含了各种噪声强度的带噪语音。通过这种方法,我们就能够得到规模远小于已有深度学习方法训练集的训练数据集,大大加快训练速度。那为了得到一个比较好的模型,我们需要训练多久呢?我们使用了10000000帧的语音数据,在GPU机器(Titan X *2,64G RAM,i7 6700K)上利用TensorFlow训练,约23个小时就得到了一个降噪效果非常不错模型,当然工程使用的训练数据要考虑的地方还很多,最终我们使用了近100G的语料进行训练


Ok,介绍了这么多,如果这个RNN的降噪效果非常一般,甚至比不上现在广泛使用的开源的WebRTC降噪算法,那就没有任何价值了。下面我们来详细看看RNN降噪在手机上的表现,特别是与WebRTC降噪的对比。


干净语音

  含噪语音 SNR = 5dB,噪声类型为马路噪声

WebRTC降噪处理得到的语音

使用RNN降噪处理得到的语音



从语谱图和波形上,可以看出使用RNN降噪后,噪声明显被抑制,并且RNN的抑制效果相比WebRTC的算法更强。从语音主观听觉上,RNN降噪后残留马路噪声明显比WebRTC降噪后残留的弱


另外我们通过以下四项指标来评价降噪效果,分别为:SNR(Signal-to-noise ratio,信噪比),segSNR(分段信噪比),LSD(Log Spectral Distance,对数谱距离),PESQ(Perceptual Evaluation of Speech Quality,主观语音质量评估)。通常情况下,SNR、segSNR、PESQ的值越大表示语音质量越好LSD的值越小表示语音失真越小。各项指标的具体说明如下:


1)信噪比(Signal-to-Noise Ratio,SNR)



SNR是衡量语音增强效果的常规方法,计算整个时间轴上的语音信号与噪声信号的平均功率之比。其定义为信号功率与噪声功率的比率,以分贝(dB)为单位表示。

其中:

为降噪前信号功率;

为噪声功率,即降噪前信号功率减去降噪后信号功率。


2)分段信噪比(Segment Signal-to-Noise Ratio,SegSNR)




由于语音信号是一种缓慢变化的短时平稳信号,因而在不同时间段上的信噪比也应不一样。为了改善上面的问题,可以采用分段信噪比。分段长度一般为10到20ms。

其中:

s为降噪前信号,ŝ为降噪后信号,T为分段的个数,R为每段长度。


3)  PESQ(Perceptual Evaluation of Speech Quality) 



ITU-T P.862 推荐使用语音质量感知评价PESQ算法,是基于输入-输出方式的典型算法,效果良好。 PESQ算法将两个待比较的语音信号经过电平调整、输入滤波器滤波、时间对准和补偿、听觉变换之后, 分别提取两路信号的参数, 综合其时频特性, 得到PESQ分数, 最终将这个分数映射到主观平均意见分(MOS)。PESQ得分范围在-0.5--4.5之间,得分越高表示语音质量越好。


4)对数谱距离(Log Spectral Distance,LSD)


计算公式:

其中:

M为分段的个数,L为每段长度,s为降噪前信号,ŝ为降噪后信号。


表1:降噪前后语音的音质对比


除了离线的客观评价指标外,我们在全球不同地区的真实数据采样上分别采用RNN降噪和WebRTC降噪,从大数据角度观测两种降噪方法在真实环境中运行效果。降噪效果受通话环境、手机硬件、系统版本等因素影响,其效果在线数据比较只能依靠大量通话的中位统计数据来最低限度削弱环境因素和系统版本的影响,手机硬件因素的影响则通过相同型号手机不同降噪模式来消除。因此设计在线指标nRed表示每个手机型号进行降噪处理后噪声减少的比例(大量通话的中位统计数据)。对非静音帧音频统计降噪后噪声减少比例R,再对同一型号手机通话得到的R值计算中位数。

其中:

L为分帧长度,s为降噪前信号,ŝ为降噪后信号,T为判定阈值,根据手机采集音量自适应设定。

在采样统计数据中,共分析了739个手机型号。降噪效果对比如下,其中横坐标表示不同手机型号,纵坐标表示噪声减少的比例,WebRTC降噪数据对应绿色,RNN降噪数据对应红色:

不同型号手机的WebRTC降噪和RNN降噪效果对比

 

可以看出,除了个别型号,RNN对噪声的消除比例明显高于WebRTC降噪。基于上述的比较,我们可以得到结论:在真实环境中手机端RNN降噪效果明显优于WebRTC降噪效果。

另外值得一提的是,RNN降噪在YeeCall实时通话中已经稳定有效的运行了近半年的时间。后续YeeCall还将在BSS上面进行尝试,希望能给用户带来最佳的通话体验。



?  另外6种常见场景噪声的降噪对比:

每组3个频谱图,上为未降噪,中为WebRTC降噪,下为RNN降噪


1. 引擎噪声

2. 工地噪声

3. 金属敲击噪声

4. 鸣笛噪声

5. 切割噪声

6. 电话忙噪声



YeeCall致力于提供高清视频通话,

让你与最爱的人永不断线。

?


猜你想看

如果您可以看懂此文,并对我们的事业感兴趣, 

欢迎加入我们


YeeCall长期招聘语音识别、图像识别、自然语言处理以及区块链方面的开发,产品和运营人才

股票期权+千元餐补+下午茶

+高标准商业保险+高标准年度体检

+超国家标准带薪年假+弹性工作制

hr@yeecall.com


想了解  YeeCall 更多?

请长按识别二维码关注即可

点击『阅读原文』立即体验YeeCall


友情链接

Copyright © 2023 All Rights Reserved 版权所有 北京物流信息联盟