降噪算法是语音增强3A算法中的常用算法,传统降噪算法可以很好的消除稳态噪声但无法准确处理瞬态噪声,近年来AI降噪做法取得了不错的效果,尤其是对变化很快的瞬态噪声取得很好的效果,但也面临着链条长、模型算力大、落地难的情况。本文以GruNet降噪模型为例,由浅入深,介绍算法模型、损失函数,后续也打算做个系列,介绍更多模型结构、数据工程、工程化落地技巧,以及超宽带和全带降噪算法等。
一、模型结构
GruNet是一个轻量级的网络结构。
特征方面,使用全频点的log功率谱作为特征。
网络方面,先进行归一化,然后使用两层GRU层,实现对时间序列历史信息建模,dropout防止过拟合。最后加上三层全连接。通过sigmoid预测全频点real mask。
前向代码如下,最后估计的mask作用到幅度谱,达到降噪。
二、损失函数
使用signal approching的方式进行训练,使用Negative SI-SNR作为损失函数。
三、工程化
工程化是个辛苦活,需要考虑相应的落地平台,一般不同的平台需要不同的工程化方案,如dsp一般需要定点化,arm芯片可以做neon指令集优化等。资源有限的平台,需要更多工程上的优化。
四、测试数据和处理结果
键盘鼠标和风噪:
无法张贴测试音频,更多测试音频和下载链接,见微信公众号“算法晓记”。
五、代码
包括训练代码和工程代码,后续考虑公开。