深度学习降噪方案-RNNoise简介和环境配置

RNNoise是一个采用音频特征抽取+深度神经网络结合的降噪方案.

RNNoise相关基本信息, 请查看 RNNoise学习和翻译系列

目录

RNNoise的基本流程和模块

RNNoise的目录结构介绍

原工程对Windows支持的一些问题

怎么编译相关的工程,生成可执行文件

怎么搭建基于Python的训练环境

如何进行训练和降噪


RNNoise的基本流程和模块

如下图所示, RNNoise代码库的功能可以分为两个部分:

  • 粉色箭头代表的, 训练部分
  1. 从语音和噪音语料提取特征数据,
  2. 对神经网络进行训练
  • 蓝色箭头代表的, 降噪demo

这两部分都依赖于中间淡灰色部分的c代码来实现数字信号处理部分的功能.

而蓝色框表示的python脚本主要用于训练流程.

RNNoise的目录结构介绍

RNNoise的相关代码可以从https://github.com/maskonface/rnnoise获取.

该工程只有两层目录.  这里列出了原始工程的全部目录和文件名, 并稍作了注释. 对于我们新增的部分, 将在后续章节揭晓.

\
│   AUTHORS                              作者信息
│   COPYING                              license信息
│   README                               简介和操作命令
│   TRAINING                             训练的操作命令
│   autogen.sh                           以下为编译相关部分
│   configure.ac                               
│   Makefile.am                               
│   update_version                          
│   rnnoise-uninstalled.pc.in                     
│   rnnoise.pc.in                              
│
├───doc
│       Doxyfile.in                      用于生成文档的配置
│
├───examples
│       rnnoise_demo.c                   使用库, 对输入的语音做降噪处理
│
├───include
│       rnnoise.h                        库函数接口
│
├───m4
│       attributes.m4                    宏,用于检查通用(非类型)符号的存在
│
├───src
│       compile.sh                       denoise_training的编译脚本
│       denoise.c                        库的相关接口函数, 以及denoise_training的main函数
│       rnn.c/h                          神经网络的计算函数, 包括GRU和全连接层(Dense)
│       rnn_data.c/h                     生成的权重数据, 以权重->层(layer)->模型的架构来组织
│       rnn_reader.c                     载入和释放模型数据的函数
│       celt_lpc.c/h                     CELT相关代码
│       kiss_fft.c/h, _kiss_fft_guts.h   kiss fft的相关代码
│       pitch.c/h                        基音(pitch)相关代码
│       tansig_table.h                   双曲正切S型函数的速查数据
│       arch.h, opus_types.h             架构和平台相关的定义和宏
│       common.h                         内存操作相关的宏/接
│       rnn_train.py                     另外一个版本的训练脚本
└───training
        bin2hdf5.py                      转换训练数据的格式: f32-> hdf5, 需要指定矩阵维度
        dump_rnn.py                      把权重转换为c代码, 到src\rnn_data.h|c
        rnn_train.py                     训练脚本, 包括构造模型, 载入和分配数据,训练,保存权重

原工程对Windows支持的一些问题

原工程应该主要是考虑了linux平台的用户, 在windows平台上使用有些小问题,

  • Windows上下载会存在问题, 根目录下的TRAINING和training目录会冲突, 因为Windows上的文件名是大小写不敏感的, 不能允许这两个文件和目录同时存在.
  • 在Windows上的编译环境搭建比较麻烦.
  • 读写文件时使用的模式不正确, 导致在Windows下打开文件不正确.
  • 在提取音频特征数据时采用直接fwrite到stdout存在编码问题.
  • 部分语法支持问题.

我们创建了一个分支来解决这些问题, 请参考链接.

怎么编译相关的工程,生成可执行文件

Windows下:

怎么搭建基于Python的训练环境

请遵循以下步骤:

1. 下载并安装Anaconda3-2019.07-Windows-x86_64.exe版本, 具体的安装注意事项, 包括环境变量设置, 请搜索相关内容.

2. 启动Anaconda Prompt窗口. (如果环境变量配置正确的话, 也可以直接启动Windows 命令行窗口也可).

3. 安装虚拟环境, 比如以以下代码安装名为Python37的虚拟环境.

conda  create –n python37 python=3.7

4. 启动此虚拟环境

activate python37

5.安装相关依赖库

pip install keras
pip install tensorflow
pip install numpy

在使用的过程中如果还遇到”ModuleNotFoundError: No module named 'keras'”之类的消息, 则使用pip install安装相关库

如何进行训练和降噪

注:

  1. 当前使用的语料仅是一个很小的语音和噪声集, 不是原作者使用和提供的版本, 仅供大家学习之用, 我们后续将会考虑如何整合一个更正规的数据集供大家使用, 也请大家多多留言献计献策.在此致谢.
  2. 执行python脚本, 请注意需要激活前面配置好的虚拟环境, 指令: activate python37, 并需在training目录下运行
  3. 导出模型数据的命令有些不足之处, 因为该脚本导出的rnn_data.h格式不适合用来替换原代码. 另外参数orig其实没有必要, 只是脚本还在依赖他. 后续会考虑改进

相关指令:

  • 特征数据抽取:

执行rnnoise目录下的pre_proc.cmd

注: 数据会被放到training目录.

  • 特征数据格式的转换
python bin2hdf5.py training.f32 500000 87 training.h5
  • 训练(如果只是体会流程, 建议先将训练轮次改为1)
python rnn_train.py
  • 导出模型数据到c代码
python dump_rnn.py weights.hdf5 ../src/rnn_data.c rnn_data.h orig
  • 降噪演示

执行rnnoise目录下的denoise.cmd

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值