前言
我将通过几篇文章来介绍一下RNN用于降噪的实例。
综合论文和项目介绍及代码编写
原文链接:https://people.xiph.org/~jm/demo/rnnoise/
上图显示了前后音频噪声抑制的频谱图。(上:noisy,中:RNNoise,下:clean speech)
RNNoise
该演示介绍了RNNoise项目,显示了如何将深度学习应用于噪声抑制。主要思想是将经典信号处理与深度学习结合起来,创建一个小而快速的实时噪声抑制算法。不需要昂贵的GPU,可以在Raspberry Pi上轻松运行。结果更简单(更容易调谐),听起来比传统的噪音抑制系统更好。
噪声抑制
噪音抑制是言语处理中的一个相当古老的话题,至少可以追溯到70年代。顾名思义,这个想法是采取嘈杂的信号,并尽可能多地消除噪音,同时对感兴趣的语音造成最小的失真。
传统噪音抑制
这是传统噪声抑制算法的概念图。语音活动检测(VAD)模块检测信号何时包含声音以及何时只是噪声。这被噪声谱估计模块用于计算噪声的频谱特性(每个频率多少功率)。然后,知道噪声模型,它可以从输入音频“减去”(并没有那么简单)。
从上图看,噪声抑制看起来很简单:只是三个概念上简单的任务,任何本科EE学生都可以写一个噪音抑制算法,有时困难的是在任何时间,各种噪音情况下使系统工作正常。这需要非常仔细地调整算法中的每个参数,需要在包含大量特殊信号的情况下进行大量的测试。speexdsp库中的噪音抑制器做了一些工作,但不是很好。
深度学习和循环神经网络
深度学习是一种新思想的新版本:人工神经网络。虽然自六十年代以来一直存在,但近年来有了很多重要的新发展:
我们现在知道如何使使用比两个隐藏层更深的网络;
我们知道如何让循环网络在过去很长时间记住状态;
我们有实际训练他们的计算资源。
循环神经网络(RNN)很好地应用于语音处理,因为它们可以对时间序列建模,而不是仅仅考虑输入和输出帧。这对噪声抑制特别重要,因为我们需要在时间尺度上获得较好的噪声估计。长期以来,RNN的能力受到很大的限制,因为它们长期不能保存信息,并且通过时间进行反向传播时涉及的梯度下降过程是非常低效的(梯度消失问题)。这两个问题都通过门控单元来解决,如长期记忆(LSTM),门控循环单元(GRU)及多种变体。
RNNoise使用门控循