运行环境为Ubuntu18.04
C部分
-
下载源码
从github上下载源码,目前只有master分支,就拿master分支下来。 -
准备编译环境
干净的linux环境可能会没有安装gcc等编译工具
所以要把下列编译所需的东西装好
apt-get install build-essential
apt-get install autoconf libtool
- 编译rnnoise的C部分源码
unzip rnnoise-master.zip
cd rnnoise-master/src
./compile.sh
执行后会生成文件denoise_training
complie.sh编译脚本也很简单
然后准备一些简单的数据,来跑一下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)
- 生成动态连接库
上面的部分是生成训练用的特征数据,如果你需要一个类似sdk的库文件,那么在源码根目录中执行,就可以生成librnnoise.so了
./autogen.sh
./configure --prefix=/usr
make
make install -j
至此,c部分的代码(主要是生成特征数据部分和调用部分)就跑完了
Keras部分
在执行这部分的时候,相比C部分,需要更多额外的环境准备,如果只是想快速体验,可以参考我的另外一篇博客,所以Keras环境搭建部分,我就不在这里描述了
- 将c程序输出的特性值文件转为h5文件
python ./training/bin2hdf5.py output.f32 1 87 training.h5
bin2hdf5.py有4个参数,第一个为c输出的特征值文件,第二个/第三个为矩阵shape,第四个参数为输出文件
如果output.f32中的数据为(n,87),则请把第二个参数替换为n
- 构建rnn网络
python ./training/rnn_train.py
注意,training.h5文件名是hard code的,所以必须保证该文件名正确并且在执行目录下
因为训练时的window_size为2000,所以需要h5中的数据超于2000,否则无法训练。
为了实现“跑起来”的目标,我们有两个办法:
- 增加output.f32中的数据,简单来说,就是把demo的音频文件弄长一点,即增加denoise_training出来的个数(最后一个参数决定)
- 修改rnn_train.py文件中的window_size大小,让它小一点,能让我们有限的demo数据也可以跑起来
最终“跑起来”了。
当然我这里的目标只是为了全流程跑起来,而不是真的去做训练,所以结果肯定是不对的。只是为了形象的给初学者做一个展示,希望能够帮助到大家。