【rnnoise快速体验】rnnoise从编译到训练

本文介绍了如何在Ubuntu18.04上编译和使用RNNoise库进行噪声抑制。首先从GitHub下载源码,安装必要的编译工具,然后编译源码生成训练用的特征数据和动态链接库。接着,将C程序输出的特征值文件转换为h5格式,并使用Keras构建RNN网络进行训练。虽然训练结果不准确,但展示了完整的流程,适合初学者学习。
摘要由CSDN通过智能技术生成

运行环境为Ubuntu18.04

C部分

  1. 下载源码
    从github上下载源码,目前只有master分支,就拿master分支下来。

  2. 准备编译环境
    干净的linux环境可能会没有安装gcc等编译工具
    所以要把下列编译所需的东西装好

apt-get install build-essential
apt-get install autoconf libtool
  1. 编译rnnoise的C部分源码
unzip rnnoise-master.zip
cd rnnoise-master/src
./compile.sh

执行后会生成文件denoise_training

complie.sh编译脚本也很简单
compile.sh

然后准备一些简单的数据,来跑一下denoise_training。

它有三个入参,第一个是干净的说话语音,第二个是加噪的说话语音,第三个是个数。
因为所有的干净样本数据和加噪样本数据是分别串联拼在两个文件里,所以这两个文件会比较大,也需要第三个参数来告知个数。

为了快速验证,我们先找一组数据来试一下,
denoise_training执行结果
很多人问这里的乱码是怎么回事,稍微看一下源码就知道啦。因为这个程序的输出就是往stdout输出特征值的。
源码截取
所以在执行的时候要重定向输出到文件中, 其中的matrix size我们要记录一下, 1x87.
说明是1个数据,但是数据有87维特征。

./rnnoise-master/src/denoise_training audio/speech_1.pcm audio/speech_1_noise.pcm 1  > output.f32

注意,这里我们只以导出一个为例,所以最后一个参数为1. 实际上只要音频足够长,你可以将最后一个参数设置大一点。最终导出的数据则为(n,87)

  1. 生成动态连接库
    上面的部分是生成训练用的特征数据,如果你需要一个类似sdk的库文件,那么在源码根目录中执行,就可以生成librnnoise.so
 ./autogen.sh
 ./configure --prefix=/usr
 make
 make install -j 

至此,c部分的代码(主要是生成特征数据部分和调用部分)就跑完了


Keras部分

在执行这部分的时候,相比C部分,需要更多额外的环境准备,如果只是想快速体验,可以参考我的另外一篇博客,所以Keras环境搭建部分,我就不在这里描述了

  1. 将c程序输出的特性值文件转为h5文件
python ./training/bin2hdf5.py output.f32 1 87 training.h5

bin2hdf5.py有4个参数,第一个为c输出的特征值文件,第二个/第三个为矩阵shape,第四个参数为输出文件

如果output.f32中的数据为(n,87),则请把第二个参数替换为n

  1. 构建rnn网络
python ./training/rnn_train.py

注意,training.h5文件名是hard code的,所以必须保证该文件名正确并且在执行目录下

因为训练时的window_size为2000,所以需要h5中的数据超于2000,否则无法训练。
为了实现“跑起来”的目标,我们有两个办法:

  1. 增加output.f32中的数据,简单来说,就是把demo的音频文件弄长一点,即增加denoise_training出来的个数(最后一个参数决定)
  2. 修改rnn_train.py文件中的window_size大小,让它小一点,能让我们有限的demo数据也可以跑起来

最终“跑起来”了。
跑起来了!
当然我这里的目标只是为了全流程跑起来,而不是真的去做训练,所以结果肯定是不对的。只是为了形象的给初学者做一个展示,希望能够帮助到大家。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值