聊聊实时通信中的AI降噪技术
Part 01 概述
在实时音视频通信场景,麦克风采集用户语音的同时会采集大量环境噪声,传统降噪算法仅对平稳噪声(如电扇风声、白噪声、电路底噪等)有一定效果,对非平稳的瞬态噪声(如餐厅嘈杂噪声、地铁环境噪声、家庭厨房噪声等)降噪效果较差,严重影响用户的通话体验。针对泛家庭、办公等复杂场景中的上百种非平稳噪声问题,融合通信系统部生态赋能团队自主研发基于GRU模型的AI音频降噪技术,并通过算法和工程优化,将降噪模型尺寸从2.4MB压缩至82KB,运行内存降低约65%;计算复杂度从约186Mflops优化至42Mflops,运行效率提升77%;在现有的测试数据集中(实验环境下),可有效分离人声和噪声,将通话语音质量Mos分(平均意见值)提升至4.25。
本篇文章将介绍我们团队如何基于深度学习做实时噪声抑制,并落地于移动端和家亲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降噪技术的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

检查CentOS系统中HDFS配置的完整指南本文将指导您如何有效地检查CentOS系统上HDFS的配置和运行状态。以下步骤将帮助您全面了解HDFS的设置和运行情况。验证Hadoop环境变量:首先,确认Hadoop环境变量已正确设置。在终端执行以下命令,验证Hadoop是否已正确安装并配置:hadoopversion检查HDFS配置文件:HDFS的核心配置文件位于/etc/hadoop/conf/目录下,其中core-site.xml和hdfs-site.xml至关重要。使用

CentOS 关机命令为 shutdown,语法为 shutdown [选项] 时间 [信息]。选项包括:-h 立即停止系统;-P 关机后关电源;-r 重新启动;-t 等待时间。时间可指定为立即 (now)、分钟数 ( minutes) 或特定时间 (hh:mm)。可添加信息在系统消息中显示。

CentOS系统下GitLab的备份与恢复策略为了保障数据安全和可恢复性,CentOS上的GitLab提供了多种备份方法。本文将详细介绍几种常见的备份方法、配置参数以及恢复流程,帮助您建立完善的GitLab备份与恢复策略。一、手动备份利用gitlab-rakegitlab:backup:create命令即可执行手动备份。此命令会备份GitLab仓库、数据库、用户、用户组、密钥和权限等关键信息。默认备份文件存储于/var/opt/gitlab/backups目录,您可通过修改/etc/gitlab

在 CentOS 上安装 MySQL 涉及以下步骤:添加合适的 MySQL yum 源。执行 yum install mysql-server 命令以安装 MySQL 服务器。使用 mysql_secure_installation 命令进行安全设置,例如设置 root 用户密码。根据需要自定义 MySQL 配置文件。调整 MySQL 参数和优化数据库以提升性能。

Docker利用Linux内核特性,提供高效、隔离的应用运行环境。其工作原理如下:1. 镜像作为只读模板,包含运行应用所需的一切;2. 联合文件系统(UnionFS)层叠多个文件系统,只存储差异部分,节省空间并加快速度;3. 守护进程管理镜像和容器,客户端用于交互;4. Namespaces和cgroups实现容器隔离和资源限制;5. 多种网络模式支持容器互联。理解这些核心概念,才能更好地利用Docker。

CentOS系统下查看GitLab日志的完整指南本文将指导您如何查看CentOS系统中GitLab的各种日志,包括主要日志、异常日志以及其他相关日志。请注意,日志文件路径可能因GitLab版本和安装方式而异,若以下路径不存在,请检查GitLab安装目录及配置文件。一、查看GitLab主要日志使用以下命令查看GitLabRails应用程序的主要日志文件:命令:sudocat/var/log/gitlab/gitlab-rails/production.log此命令会显示produc

在CentOS系统上进行PyTorch分布式训练,需要按照以下步骤操作:PyTorch安装:前提是CentOS系统已安装Python和pip。根据您的CUDA版本,从PyTorch官网获取合适的安装命令。对于仅需CPU的训练,可以使用以下命令:pipinstalltorchtorchvisiontorchaudio如需GPU支持,请确保已安装对应版本的CUDA和cuDNN,并使用相应的PyTorch版本进行安装。分布式环境配置:分布式训练通常需要多台机器或单机多GPU。所

在CentOS系统上启用PyTorchGPU加速,需要安装CUDA、cuDNN以及PyTorch的GPU版本。以下步骤将引导您完成这一过程:CUDA和cuDNN安装确定CUDA版本兼容性:使用nvidia-smi命令查看您的NVIDIA显卡支持的CUDA版本。例如,您的MX450显卡可能支持CUDA11.1或更高版本。下载并安装CUDAToolkit:访问NVIDIACUDAToolkit官网,根据您显卡支持的最高CUDA版本下载并安装相应的版本。安装cuDNN库:前
