最近忙里偷闲,想把博士期间的基于深度学习的语音增强的代码整理下。想当初需要在C ,perl和matlab之间来回切换,同时需要准备pfile这个上世纪产物,十分头疼。一直想把它们重新整理,用一种语言实现全部,一键run整个流程,有点符合当下end2end的潮流思想。
Python的易用,Keras的简单,Tensorflow/CNTK等后台的强大(支持多GPU)为这个想法提供了可能。
我的最终目的是想实现一个通用的鲁棒的语音增强工具,同时研究如何让语音增强这个前端可以真正服务于语音识别的后端模型。但光靠我一个人肯定是不够的,我诚挚邀请各位有兴趣的童鞋一起加入这个GitHub项目,一起来完善它。
GitHub项目地址:
https://github.com/yongxuUSTC/deep_learning_based_speech_enhancement_keras_python
我刚刚实现了基于deep neural network的clean到clean的映射。打通了仅仅使用python的特征提取,模型训练,解码,波形重构,质量评估等整套流程。基于keras(TensorFlow后台),可以实现一键run,极易使用。
clean到clean映射的效果:在TIMIT标准训练集和TIMIT标准测试集上,实现测试集上的error无限接近于0,PESQ无限接近于最高分4.5分。这个映射实际上本身就非常有意思,我使用了一个非线性隐层(如果是线性隐层,可能学出来一个全通滤波器,就没啥意思了),并且在未见的测试集上泛化的很好。
后续,我将陆续加入更多模块,也欢迎你的加入,一起丰富基于LSTM, CNN, residual network,GAN等训练模型。本人也有很多想法,只是没有时间去实现,欢迎大家一起讨论一起实现。
简单说下,什么是语音增强?语音增强,就是将带噪语音中的噪声去掉,这是一个古老的问题,却至今难以解决。有两个难点:1、极低信噪比(比如-5dB)的情况下,至今难以恢复;2、噪声的种类过于繁多,难以覆盖全面。相比较图像增强,语音增强是一维信号,轮廓性差;由于声音的本质是震动,噪声和语音同时可听(不像图像是遮挡)。
我提出的基于DNN的回归方法(参见参考文献4):
参考文献:
1、我的早期语音增强代码:https://github.com/yongxuUSTC/DNN-for-speech-enhancement
2、我的早期语音增强最佳模型和解码工具:https://github.com/yongxuUSTC/DNN-Speech-enhancement-demo-tool
3、最新GitHub项目地址(基于keras):https://github.com/yongxuUSTC/deep_learning_based_speech_enhancement_keras_python
4 A Regression Approach to Speech Enhancement Based on Deep Neural Networks.YongXu, JunDu,Li-Rong Dai and Chin-Hui Lee, IEEE/ACM Transactions on Audio,Speech, and Language Processing,P.7-19,Vol.23,No.1, 2015
5 An Experimental Study on Speech Enhancement Based on Deep Neural Networks.Yong Xu, JunDu, Li-Rong Dai and Chin-Hui Lee,IEEE signal processing letters, p. 65-68,vol.21,no. 1, 2014
6 Multi-Objective Learning and Mask-Based Post-Processing for Deep Neural Network Based Speech Enhancement, Yong Xu, Jun Du, Zhen Huang, Li-Rong Dai, Chin-Hui Lee, Interspeech2015
一些语音增强demos:
http://staff.ustc.edu.cn/~jundu/The team/yongxu/demo/SE_DNN_taslp.html
http://staff.ustc.edu.cn/~jundu/The team/yongxu/demo/IS15.html