https://blog.csdn.net/dakeboy/article/details/88065399
这篇文章主要介绍如何进行RNNoise的训练和测试
1、网络结构
RNNoise分为三层嵌入式网络,由全连接层,GRU网络构成
包含了215个units
4个hidden layers
Largest:96 units
GRU VS LSTM
GRU容易执行去噪任务,需要更少的计算资源,较少参数,训练快
RNN可以对时间序列建模,而噪声抑制需要在时域获得良好的噪声估计。很长时间以来,RNN的能力受到很大的限制,因为它们长期不能保存信息,并且由于当通过时间反向传播时涉及的梯度下降过程是非常低效的(消失的梯度问题)。门控单元(LSTM和GRU)解决了简单RNN不能长期保存信息和梯度消失的问题。与简单RNN相比,GRU有两个额外的门。复位门决定是否将状态(记忆)用于计算新状态,而更新门决定状态将根据新输入改变多少。当更新门关闭时,GRU可以长时间地记住信息。
网络顺序
首先对语音数据分帧,每帧10ms,160个数据点,对这个数据点提取42维的特征,输入网络,经过第一层GRU,输出24维与原始输入42维concate进入第二层GRU,输出48维与原始输入concate,进入第三层GRU,最终输出22维的点(每个点是语音还是噪声的概率),将这个结果作为权重对原始输入进行加权,最后拟合出256的频谱用于恢复时域语音信号,这个信号就是降噪后的结果。
2、数据集
需要准备好训练集,在本项目中可以很简单的准备训练数据和label,只需要两个长文件,一个是仅包含噪声的文件,noise_only.wav,一个是仅包含语音的文件speech_only.wav,在训练开始前,需要将噪声加入到语音,合成含噪语音noisy.wav,
将这个noisy.wav的特征送入到网络。
噪声Noise_only:人群噪声(30min),街道汽车噪声(20min),路面噪声(10min), 16k
语音Speech_only : Haitian_data 60min, 16k (可以尝试各种开源语音数据集,讯飞有很多)
需要去噪的语音Noisy:lumian,tingche, gaojia 16k(用于测试)
3、更改采样率
工程的音频限制为单声道,16bit,采样率48k,需要修改训练数据
**下载语音转换工具:
~/rnnoise$ git clone https://github.com/smallmuou/wavutils
~/rnnoise/wav$ …/wavutils/bin/wavinfo speech_only.wav**
1
2
3
运行以下脚本
xx@ubuntu::~/bin$ wavinfo no_music.wav1
+