智能语音之远场关键词识别实践(二)

news2024/11/16 3:29:55

上篇(智能语音之远场关键词识别实践(一))讲了“远场关键词识别”项目中后端上的实践。本篇将讲在前端上的一些实践以及将前端和后端连起来形成一个完整的方案。下图是其框图:(麦克风阵列为圆阵且有四个麦克风,即有四个语音通道)

从上图可以看出,前端主要包括去混响、声源定位和波速形成(beamforming)、单通道降噪四大功能模块。每个模块的作用在上篇中已简单描述过,这里就不讲了。每个模块由一个人负责,我负责做单声道降噪。对于每个功能模块来说,通常都会有多种不同的实现算法,不同的算法在性能和运算复杂度上有优劣,因此先要去评估,选择最适合我们项目的算法。评估主要从性能以及运算复杂度两方面去做。评估下来后去混响选择了WPE(Weighted prediction error,加权预测误差)算法,声源定位选择了GCC-PHAT(Generalized Cross Correlation-Phase Transform,广义互相关-相位变换)算法,波速形成选择了MVDR(Minimum Variance Distortionless Response,最小方差无失真响应)算法。单声道降噪不像其他模块只有几种主流的算法,去评估后选择一到两种就可以了。单声道降噪好多年前就研究了,有多种效果不错的算法,且不断有新的算法(比如基于深度学习的算法)提出来。它以前主要用在语音通话中,现在我们要把它用在远场麦克风阵列的语音识别中。我深入的调研了一番,没有文章公开说哪种算法在语音识别中效果较好,市面上主流的产品(比如小度音箱、天猫精灵等)也没说用了哪种单声道降噪算法,只能摸着石头过河了。先前有同事找到了一篇传统方法和深度学习相结合的单声道降噪的文章,大家讨论了一下,觉得有点符合潮流(深度学习),就决定先研究这个。经过一段时间的学习和实践,有了一些输出,也写了关于这个算法理论和实践的几篇文章,具体见《语音降噪论文“A Hybrid Approach for Speech Enhancement Using MoG Model and Neural Network Phoneme Classifier”的研读 》,《基于混合模型的语音降噪实践 》,《基于混合模型的语音降噪效果提升 》。这个算法的降噪效果还可以,但是里面有神经网络模型,且参数不少,要求一定的算力,在嵌入式上部署load有点吃紧。讨论后这种算法留作备份,再去研究有没有更适合的算法。考虑到基于深度学习的方法在嵌入式上都不太能部署,就在传统方法中寻找。调研后发现基于MCRA-OMLSA的降噪算法效果很好且运算复杂度不高,讨论后决定试试这种方法。依旧是先学习理论,然后用python实现和tuning看效果。实验做下来效果还是挺好的,就决定用这个算法了。关于MCRA-OMLSA的降噪算法,我也写了三篇文章。具体见《基于MCRA-OMLSA的语音降噪(一):原理 》,《基于MCRA-OMLSA的语音降噪(二):实现 》,《基于MCRA-OMLSA的语音降噪(三):实现(续) 》。

当前端的各个模块的算法都python实现完成后就开始把前端和后端串起来看效果,即把前端的输出作为后端的输入看识别率。不过模型是基于先前录的单声道的数据训练的。测试下来发现识别率比先前的降很多。出问题就要找原因和解决方法。大家先分头调查和思考,然后一起讨论。讨论后觉得原因很可能是这个:模型是基于先前单声道的语料训练的,而现在识别时的语音是多声道语音经过前端各算法处理后得到的单声道语音,两者不匹配。要想得到好的识别率,应该基于第二次录得的多声道的语料做完前端各算法处理后得到的单声道的语料来重新训练模型。简而言之,就是要让模型学习一下前端中的各个算法处理。于是基于第二次录得的多声道的语料重新训练模型。先把多声道数据经过前端各算法处理得到单声道数据,再做各种augmentation来增强语料库,最后拿这些处理后的数据去训练得到新的模型。新的模型用上后识别率有了很大的提升。经过实践,我们的经验是要想有好的识别率,模型一定要把pipeline中的各种算法都学习到。

在python下有了一个好的识别率,接下来就要看怎么在嵌入式上部署了,即用C语言来做实现。后端的C语言实现已经做好,要做的就是前端各算法的C语言实现。先前负责前端各算法的同学负责实现同样的算法,先用浮点实现。一段时间后各个算法的浮点实现都做好了,再与后端串起来看识别率,结果与python下的基本一致。后面要做的是算法的定点实现。由于team有了更高优先级的任务,只得暂停这方面的工作。只差最后一步就能真正部署了,有点可惜。后面有时间再把它完成吧。

远场关键词识别的项目由于参与人少做了近两年。正是因为人少,每个人做的东西就多一些,也就学到的东西多一些。就我自己而言,不仅学到了后端深度学习相关的(模型训练、量化等),也学到了前端信号处理算法相关的,同时通过实践还累积了不少关键词识别相关的经验。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringMVC【学习笔记】

SpringMVC是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web 框架,即使用了MVC架构模式的思想,将web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化…

看2022年卡塔尔世界杯有感

一、我印象中第一次看世界杯是2010年南非世界杯 自己第一次踢球是什么时候已经记不清了,大概是小学时候。因为我印象中第一次看世界杯是2010年南非世界杯,因为世界杯主题曲也比较好听,当然,我认为1998年法国世界杯的主题曲最为经…

Python中的魔法方法

python中的魔法方法是一些可以让你对类添加“魔法”的特殊方法,它们经常是两个下划线包围来命名的 Python的魔法方法,也称为dunder(双下划线)方法。大多数的时候,我们将它们用于简单的事情,例如构造函数(init)、字符串表示(str, r…

计算机毕设Python+Vue兴发农家乐服务管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux | 套接字(socket)编程 | UDP协议讲解

文章目录TCP与UDP的区别网络字节序套接字接口介绍sockaddr结构服务端UDP套接字设置客户端UDP套接字设置TCP与UDP的区别 TCPUDP传输层协议传输层协议有连接无连接可靠连接不可靠连接面向字节流面向数据报 首先,网络通信模型是分层的,模型的每一层都有属于…

深入jvm字节码

深入jvm字节码1.深入剖析class文件结构1.1初探class文件1.2 class文件结构解析1.2.1 魔数1.2.2 版本号1.2.3 常量池1.2.4 Access flags1.2.5 this_class,super_name,interfaces1.2.6 字段表1.2.7 方法表1.2.8 属性表1.3使用javap查看类文件2.字节码基础2.1字节码概述2.2java虚拟…

一文看懂---B树及其简单实现

目录 1.B树的引入 2.B树的概念 3.B树是如何插入的? 4.具体的代码实现 1.B树的引入 在以往我们在内存中搜索数据时,可以使用红黑树,平衡树,哈希表等数据结构,但是当数据量比较大,不能一次放进内存&…

[附源码]计算机毕业设计Python仓储综合管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

C++PrimerPlus 第七章 函数-C++的编程模块-7.9 递归

目录 7.9 递归 7.9.1 包含一个递归调用的递归 7.9.2 包含多个递归调用的递归 7.9 递归 下面介绍一些完全不同的内容。C函数有一种有趣的特点——可以调用自己(然而,与C语言不同的是,C不允许main()调用自己),这种功能…

SpringCloud Gateway简单使用

前言 SpringCloud Gateway是一个网关框架,也是现在流行的的一个网关框架,它包括了过滤器、限流、权限、基本路由、整合Eureka 断言predicates 等功能,也会介绍和zuul这个框架的一个对比, Spring Cloud 生态系统中的网关&#xff…

243. 一个简单的整数问题2——差分+树状数组

给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一: C l r d,表示把 A[l],A[l1],…,A[r] 都加上 d。 Q l r,表示询问数列中第 l∼r 个数的和。 对于每个询问,输出一个整数表示答案。 …

《爱与自由》豆瓣9.3优秀父母的必读书

《爰和自由》 关于作者 孙瑞雪,中国著名的幼儿教育家与心理学专家,"爱和自由、规则和平等”教育精神的 发起者和倡导者,中国系统引进实施国际蒙特梭利教育第一人,成功实践了科学教育法的本土化。她发展和延伸了蒙特梭利敏感…

Oh My Posh美化CMD、Anaconda Prompt解决方案

网上搜到的Oh My Posh安装配置都是针对power shell的(我参考这篇成功配置了针对power shell的字体和主题)。期间遇到了无法加载文件WindowsPowerShell\profile.ps1的问题,参考这篇解决。由于平时我用Anaconda比较多,而anaconda是基…

基于ARMR和白噪声特性模型及风速威布尔分布研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

PRISEMI芯导产品推荐 | 支持路径管理功能的3A单节锂离子电池充电IC——PSC2965

PRISEMI芯导产品推荐 | 支持路径管理功能的3A单节锂离子电池充电IC——PSC2965 随着便携式电子设备功能越来越多样化和整机性能的不断提升,整机功耗也在面临越来越大的挑战。最直接有效的方式就是提高电池的容量来提高整机的使用时长。为了不降低用户体验&#xff0…

C# 绘图基础

一 GDI技术简介 ① GDI:Graphics Device Interface. ② GDI:GDI的改进; ③ 是.NET框架结构的重要组成部分; ④ 和GDI一样它提供对二维图形图像的支持; 二 .NET 对GDI的封装 三 坐标系统 GDI的坐标系统; …

计算机毕业设计——简单的网页设计

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

基于粒子群优化算法的分布式电源优化调度实现配电网稳定运行(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

WAYON维安提供新产品:新起点,新征程,DCDC炼成之路

WAYON维安提供新产品:新起点,新征程,DCDC炼成之路 新起点,新征程,DCDC炼成之路 随着新能源汽车、5G通信、工业4.0以及人工智能的快速发展,电源管理芯片的应用场景越来越丰富。同时传统行业,如网…

Day834.Dubbo如何用管程实现异步转同步 -Java 并发编程实战

Dubbo如何用管程实现异步转同步 Hi,我是阿昌,今天学习记录的是关于Dubbo如何用管程实现异步转同步的内容。 在很多并发场景下,支持多个条件变量能够让并发程序可读性更好,实现起来也更容易。例如,实现一个阻塞队列&a…