降噪算法是语音增强3A算法中的常用算法,传统降噪算法可以很好的消除稳态噪声但无法准确处理瞬态噪声,近年来AI降噪做法取得了不错的效果,尤其是对变化很快的瞬态噪声取得很好的效果,但也面临着链条长、模型算力大、落地难的情况。本文以GruNet降噪模型为例,由浅入深,介绍算法模型、损失函数,后续也打算做个系列,介绍更多模型结构、数据工程、工程化落地技巧,以及超宽带和全带降噪算法等。

一、模型结构

GruNet是一个轻量级的网络结构。

特征方面,使用全频点的log功率谱作为特征。

图片

网络方面,先进行归一化,然后使用两层GRU层,实现对时间序列历史信息建模,dropout防止过拟合。最后加上三层全连接。通过sigmoid预测全频点real mask。

图片

前向代码如下,最后估计的mask作用到幅度谱,达到降噪。

图片

二、损失函数

使用signal approching的方式进行训练,使用Negative SI-SNR作为损失函数。

三、工程化

工程化是个辛苦活,需要考虑相应的落地平台,一般不同的平台需要不同的工程化方案,如dsp一般需要定点化,arm芯片可以做neon指令集优化等。资源有限的平台,需要更多工程上的优化。

四、测试数据和处理结果

键盘鼠标和风噪:

图片

图片

无法张贴测试音频,更多测试音频和下载链接,见微信公众号“算法晓记”。

五、代码

包括训练代码和工程代码,后续考虑公开。

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐