荔枝音质高保真的降噪技术实践与研究
作者:邱威
简介
当前直播行业愈发火热,用户通常处于不同的环境中,身边的键盘声,敲击声,空调声,喧哗声等噪声有时会对实时互动产生严重的干扰。然而传统的降噪算法针对平稳噪声有比较好的降噪效果,针对上述这一类非平稳噪声,比较难处理,收效甚微,降噪效果很差。
随着近年深度学习的广泛应用,使用神经网络的降噪算法喷涌而出,而且这类算法不管是在降噪力度上,还是鲁棒性上,都要优于传统降噪,是当前处理各种不同场景噪音的首选方案。
但是,在实时互动环境下,对于音频实时处理和性能要求比较高,这对于AI模型的设计和效果的平衡带来了的巨大的挑战。
基于上述挑战,荔枝集团音频团队提出了一种轻量的降噪方案--LizhiAiDenoiser,该方案不仅能处理日常生活中常见的平稳和非平稳噪声,而且能很好的保留语音的音质,同时该AI降噪模型在运行时占用的内存和cpu消耗都极低,满足了全量iPhone机型以及大部分Android中低端机型。
一、基本原理
LizhiAiDenoiser采用传统算法和深度学习结合的混合结构。为了可实际在移动端部署,LizhiAiDenoiser采用了比较精细的模型结构,主要使用低性能消耗的CNN-RNN结构。
1. 数据和增强
训练深度学习降噪模型的数据集是通过混合纯净语音和噪音音频的方式。纯净语音主要使用的是开源数据集,包括英文数据集和中文数据集,英文数据集300小时,中文数据集200小时。噪音音频由两部分构成,一部分是开源噪音集audioset,大约120小时,一部分是自己录制的噪音集,大约60小时。数据增强的方法被应用于语音和噪声样本,目的是进一步扩展模型在训练的过程中看到的数据分布。当前,LizhiAiDenoiser支持以下随机增强的方法:
- 重采样速度和改变pitch
- 添加混响,在纯净语音中添加少量混响
- 使用[-5,25]的信噪比来混合纯净语音和噪音
2. 模型目标
语音降噪通常采用有噪声语音的短时傅里叶变换(STFT),只增强幅度谱,而保持相位谱不变。这样做是因为人们相信,相位谱对语音增强并不重要。然而,最近的研究表明,相位对感知质量很重要。我们的方法使用深度神经网络来估计在复数域中的理想比值Mask的实部分量和虚部分量,这种方法更好的保留了语音的质量
同时以更小的模型参数达到了大模型同样的降噪效果。原始的AI降噪模型,模型大小大概3M,固定测试集mos分为3.1。对模型做一些剪枝同时调整模型结构,再针对模型输出目标进行调整,在保持3.1的mos的情况下,最终模型大小降为900k。
复数理想比值Mask的推导过程如下:
公式(1)中代表纯净语音,
代表带噪语音,
代表模型估计出来的复数域中的理想比值
为了方便起见,上式没有体现出时间和频率的下标,但给出了每个T-F单元的定义。公式(1)可以扩展为:
纯净语音的实部分量和虚部分量为:
根据公式(3)和公式(4)可以得到M的实部和虚部分量:
从而得到复数域理想比值的Mask:
3. 网络模型
从上图可以看出,我们使用的模型结构极其简单,并且CNN能够很好的提取local feature,GRU能够学习时序上的特征,这对于模型的泛化和推理实时性都起到了很好的正向作用。
二、效果和性能
效果
在效果验证上,我们采用日常常见的八种噪音不同的信噪比与传统降噪进行对比测试,使用POLQA测试降噪后的音频mos分,对比结果如下:
| 0db | 10db | 25db | 40db | 50db |
传统降噪 | 1.366 | 2.117 | 4.276 | 4.61 | 4.72 |
LizhiAiDenoiser | 1.959 | 2.744 | 4.446 | 4.74 | 4.75 |
如上效果所示,LizhiAiDenoiser在不同信噪比和场景下,取得了不错的效果。
这里测试40db和50db的音频,主要是为了测试LizhiAiDenoiser对近乎纯净语音有没有损伤,从最终结果能够看出,LizhiAiDenoiser对于纯净语音几乎不产生损伤情况。
音质保护示例
带噪音频 |
|
有损伤 |
|
LizhiAiDenoiser |
|
结论:在语音的中频部分能看到LizhiAiDenoiser降噪后对语音保留的更好。
降噪示例
| 稳态噪音 | 非稳态噪声 |
带噪音频 |
|
|
传统降噪 |
|
|
LizhiAiDenoiser |
|
|
性能
在LizhiDenoiser的模型前向推理过程中,我们没有使用开源的推理框架,而是使用自研的推理框架,不使用开源推理框架原因有:
- 不依赖第三方推理框架,使得前向推理更加灵活多变;
- 减少LizhiDenoiser模块占包大小;
- 更加自由灵活的针对模型结构做极致的推理速度优化
分别测试了iPhone和Android较低机型的性能,这里主要采用cpu消耗和实时率来度量LizhiAiDenoiser的性能。
cpu消耗
因为模型设计比较精细,参数占用比较小,cpu占用不超过3%。
实时率
实时率是指处理每帧音频所要花费的时间,通常是处理整个音频来统计总的耗时,再除以音频的总帧数,得到平均每帧耗时,这种方式在实时率要求比较高的任务中是很难有说服力的,因为此时任务比较单一,CPU利用率比较高,所以总的耗时统计大大减少。
我们在统计实时率时采用最真实的统计方法,即在RTC应用中统计每帧音频的真实耗时情况。统计情况如下:
Vivo X9 | iPhone7 |
|
说明:上图中横坐标是音频帧数,每一帧10毫秒,纵坐标是每一帧经过LizhiAiDenoiser降噪耗时,单位是微秒。
从图中可以看出,android较低机型实时率不超过0.3,iPhone较低机型实时率不超过0.2。
三、规划
AI降噪在RTC任务中还有很多优化的空间:
- 实时率的优化
进一步对模型进行剪枝和使用更低计算消耗的网络,同时进一步优化我们的AI推理框架,以及对模型进行量化,通过这几个维度的优化来进一步提升我们AI降噪的实时率。
- 全频带AI降噪
因为全频带AI降噪不管是在特征输入上还是网络结构设计上都比较大,很难在RTC这种对实时率要求比较高的任务达到好的效果,所以我们接下来准备将音频转换到比较小的特征维度上,通过设计比较小的网络来拟合该任务。
- 模型的压缩
在算法落地上,对于模型大小有时也有一定的要求,同时也是模型轻量的一个体现,更少的占用设备资源。所以在模型落地时,一般会对模型大小进行压缩,接下来我们会使用占用内存更小的数据类型来存储数据,优化模型存储的格式以进一步减少模型存储的大小。
作者:
邱威:荔枝音视频研发中心高级音频算法工程师,主要从事音频相关AI算法研究和AI模型在移动端部署的工作。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
机器学习在基于 URL 的客户端监控分析中的优化和实践
本文首发于微信公众号“Shopee技术团队” 摘要 传统的客户端监控分析场景中,采用按照具体的 URL 进行统计分析的方法,在面对一个应用可能会访问成千上万条 URL 时,结果就差强人意,不能明显地标识出应用访问的哪些 URL 存在潜在问题。 MDAP 平台在进行客户端监控分析时,通过使用概率统计和机器学习的方案,将若干条相似的 URL 归一化成同一条规则模型,然后基于该规则模型进行相关统计分析,从而提高了基于 URL 的客户端监控分析的可用性及准确性,进而提高了 MDAP 用户对自己应用质量的监控分析。 这是 MDAP 系列的第二篇文章,前文回顾:《MDAP:可观测性数据分析平台设计与实践》 1. 引言 URL 作为客户端监控分析的一个重要元素,传统的基于 URL 的统计分析方式直接使用原始 URL 值进行统计分析,比如: SELECT `url`, count(1) as `cnt` FROM `web_analysis_tab` WHERE `app_name` = 'app_1' GROUP BY `url`; 使用上述查询语句进行统计分析的结果是非常糟糕的,主要表现...
- 下一篇
企业数据现状分析:为什么需要实时数据?如何高效挖掘实时数据价值?
如今,数据的时效性会真正影响到一个企业的生存。 一直以来,以传统 BI 报表、数据大屏、标签画像等为代表的分析型业务(OLAP),都是企业数据资源的重点应用场景。但 AP 型业务并不是企业的全部,同时还存在对数据实时性要求更高的新一代的运营型分析(Operational Analytics)以及越来越多的交互型业务场景(OLTP 或 Operational Applications),更是企业的核心命脉。 本期分享将从企业当前的实时场景需求出发,围绕以下几个要点,具体解析实时数据的内涵与新时期的方案选择: 回顾当下企业的数据现状 介绍已有的实时数据集成场景 盘点常用的实时数据集成架构和中间件 新老数据集成架构的技术对比,以及新一代企业级数据平台的技术架构详解 一、企业为什么越来越需要实时数据? 从依赖“人肉手工”写代码,到消息总线开始出现,再升级到后来的事件流中间件……数据集成架构在演进的过程中,解决了一些旧的问题,又逐渐遇上一些新的问题。对数据实时性要求的提高,就是眼下很多企业遇到的一个新的挑战。 企业数据现状与实时数据场景 以制造业和零售行业真实环境下的典型场景为例: ①...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Hadoop3单机部署,实现最简伪集群