lms自适应滤波器实现噪声干扰的语音恢复_使用VoiceFliter-Lite改进设备上的语音识别...

作者 / Wang Quan

原文链接 / https://ai.googleblog.com/2020/11/improving-on-device-speech-recognition.html

2018年,我们推出了VoiceFilter系统,该系统利用了谷歌的Voice Match,通过允许用户注册和登记自己的语音,实现与辅助技术的个性化交互。

https://www.youtube.com/watch?v=TSd080akKUY&feature=youtu.be

虽然VoiceFiltr的方法很成功,并且实现了比传统方法更好的信噪比(SDR),但高效的设备上流媒体语音识别需要解决模型大小、CPU、内存限制和电池使用注意事项和延迟最小化等的限制。

在“Voice Filter-lite方面:针对面向设备上语音识别的流媒体目标语音分离”中,我们推出了针对设备上使用的Voice Filter的更新,该更新可以通过利用选定发言人的注册语音来达到显著提高和改善重叠语音的语音识别。重要的是,该模型可以很容易地与现有的设备语音识别应用程序集成,允许用户在极其嘈杂的条件下访问语音辅助功能,即使互联网连接不可用。我们的实验表明,一个2.2MB的voice filer-lite模型在重叠语音上可以使误词率(WER) 改善25.1% 。

https://www.youtube.com/watch?v=kOqYEWLuAZQ&feature=youtu.be

改进设备上的语音识别

虽然最初的VoiceFilter系统非常成功地将目标发言人的语音信号从其他重叠的信号源中分离出来,但它的模型大小、计算成本和延迟,对于移动设备上的语音识别是不可行的。

新的Voice Filter-Lite系统经过精心设计,与设备上的应用程序相适应。Voice Filter-Lite不需要处理音频波形,而是采用与语音识别模型完全相同的输入特征功能(stacked log Mel-filterbanks堆叠的对数Mel滤波器组) , 并通过实时过滤掉不属于目标说话者的组成部分来直接增强这些特征。加上对网络拓扑的多项优化,运行时操作的数量大大减少。在使用Tensor Flow Lite库对神经网络进行量化后,模型大小只有2.2MB,适合大多数设备上的应用程序。

为了训练Voice Filter-Lite模型,将带噪声语音的滤波器组与代表目标发言人身份的嵌入向量(i.e.ad-vector d矢量)一起被输进网络。该网络预测了一个掩码,将其与输入逐元素相乘,从而产生增强的过滤库。在训练过程中,我们定义了一个损失函数来最小化增强滤波器组和干净语音的滤波器组之间的差异。

d3f636fe6381d3d02b654831757a345a.png

Voice Fliter-Lite系统的模型架构

Voice Filter-Lite是一种即插即用的模型,它允许实如果说话者没有登记他们的声音,那么实现它的应用程序可以轻松地绕过它。这也意味着语音识别模型和Voice Filer-Lite模型可以分别进行训练和更新,这在很大程度上降低了部署过程中的工程复杂性。

a2bbdadde6793e8e422a9adcd7c15168.gif

作为即插即用模型,如果发言人没有注册他们的声音,Voice Fliter-Lite可以很轻易地被忽略。

应对过度抑制的挑战

当使用语音分离模型来改进语音识别时,可能会出现两种类型的错误:抑制不足,即模型无法滤除信号中的噪声成分;以及过度抑制,当模型不能保留有用的信号时,导致一些单词从识别的文本中丢失。过度抑制问题尤其严重,因为现代语音识别模型通常已经使用大量的增强数据(如房间模拟和SpecAugment) 进行训练,因此对抑制不足更有鲁棒性。

Voice Filter-Lite通过两种新方法解决了过度抑制的问题。首先,它在训练过程中使用了非对称性损失,使得模型对过度抑制的容忍度低于抑制不足的。其次,它对运行时的噪声类型进行预测,并根据预测结果自适应地调整抑制强度。

7be0015e02870b5ce20db20c86f2a103.gif

当检测重叠语音时,Voice Filter-Lite自适应地应用更强的抑制强度。

通过这两种解决方案,Voice Filter-Lite模型在其他场景(如安静或各种噪声条件下的单扬声器语音)的流媒体语音识别方面保持了出色的性能,同时在重叠语音方面仍然提供了显著的改进。从我们的实验中,我们观察到将2.2MB Voice Filter-Lite模型应用于附加性重叠语音后,单词错误率改善了25.1%。对于混响重叠语音,模拟远场设备(如智能家庭扬声器)是一项更具挑战性的任务, 我们还观察到使用Voice Filter-Lite可以改善14.7%的单词错误率。

未来的工作

虽然Voice-Filter Lite在各种设备语音应用程序中显示出了巨大的潜力,但我们也在探索其他几个方向,以使Voice-Filter Lite更有用。首先,我们目前的模型只用英语语音进行训练和评估。我们很高兴能够采用同样的技术来改进更多语言的语音识别。其次,我们想在训练Voice Filter-Lite的过程中直接优化语音识别损失,这可能会进一步提高语音识别,而不仅仅是重叠语音。

感谢

本文所描述的研究代表了谷歌中多个团队的共同努力。贡献者包括Quan Wang, Ignacio Lopez Moreno, Mert Saglam, Kevin Wilson, Alan Chiao, Renjie Liu, Yanzhang He, Wei Li, Jason Pelecanos, Philip Chao, Sinan Akay, John Han, Stephen Wu, Hannah Muckenhirn, Ye Jia, Zelin Wu, Yiteng Huang, Marily Nika, Jaclyn Konzelmann, Nino Tasca, and Alexander Gruenstein.Share on Twitter Share on Facebook在Twitter上的分享,在Facebook上的分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会提供一个大致的流程来实现卡尔曼滤波和LMS自适应滤波器的Vivado HLS 2018.3。 首先,我们需要包含以下头文件: ```c #include <hls_math.h> #include <stdlib.h> #include <stdio.h> #include <string.h> ``` 接下来,我们来看一下卡尔曼滤波器的实现。在这个例子中,我们假设我们有一个1维的状态量,且观测值是从传感器中读取的。我们的目标是使用卡尔曼滤波器来估计状态变量,并且要求实现一个能够快速运行并且使用较少资源的卡尔曼滤波器。 ```c // 定义状态变量 float x_hat = 0.0; float p = 0.0; // 定义系统噪声和观测噪声的方差 float q = 0.1; float r = 1.0; // 定义卡尔曼增益 float k = 0.0; // 定义传感器读数 float z = 0.0; // 定义卡尔曼滤波器的主函数 void kalman_filter(float z_meas) { // 预测卡尔曼滤波器状态 float x_hat_priori = x_hat; float p_priori = p + q; // 计算卡尔曼增益 k = p_priori / (p_priori + r); // 更新状态估计 x_hat = x_hat_priori + k * (z_meas - x_hat_priori); p = (1 - k) * p_priori; } ``` 接下来,我们来看一下LMS自适应滤波器实现。在这个例子中,我们假设我们有一个输入信号x和一个期望信号d。我们的目标是使用LMS自适应滤波器来估计系统的传递函数,并且要求实现一个能够快速运行并且使用较少资源的LMS自适应滤波器。 ```c // 定义滤波器参数 #define N 10 float h[N] = { 0.0 }; float y = 0.0; // 定义学习速率 float mu = 0.01; // 定义输入信号和期望信号 float x = 0.0; float d = 0.0; // 定义LMS自适应滤波器的主函数 void lms_filter(float x_in, float d_in) { // 更新滤波器输出 y = 0; for (int i = 0; i < N; i++) { y += h[i] * x[i]; } // 更新滤波器参数 for (int i = 0; i < N; i++) { h[i] += mu * (d - y) * x[i]; } // 将新的输入信号添加到缓冲区 for (int i = N - 1; i >= 1; i--) { x[i] = x[i - 1]; } x[0] = x_in; d = d_in; } ``` 这里只是提供了一个大致的流程,具体的实现需要根据具体的应用场景进行修改。同时,需要注意的是,在编写Vivado HLS代码时,还需要使用一些特殊的指令和编译选项来优化代码的性能和资源利用率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值