【TinyML】端侧语音识别技术
一、前言
语音识别技术(Automatic Speech Recognition)是一种将人的语音转换为文本的技术。比如“Hey, Siri”、“Hi Alexa”等等的语音助手都是语音识别技术的应用实现。通过语音助手,用户在家中便可以直接利用语音来控制空调、电视、窗帘和灯光等家居设备,使得设备控制变得更加便捷和自然。
目前,市面上主流的智能语音解决方案大多采用在线语音,结合平台内容打造丰富的智能家居生态。但是,在线联网的方式也带来了诸多不确定性:隐私安全、网络延迟、联动速度、联网稳定性等。基于此,端侧的离线本地化语音控制方案成为了用户的另一种选择。
二、端侧语音识别
1、概要
现代语音识别可以追溯到1952年,Davis等人研制了世界上第一个能识别10个英文数字发音的实验系统,从此正式开启了语音识别的进程。语音识别发展到今天已经有70多年,但从技术方向上可以大体分为三个阶段:
语音识别从识别的内容范围来看,可以分为“开放域识别”与“封闭域识别”:
开放域识别 | 封闭域识别 |
无需预置识别词集合 | 需预置的限定字词集合 |
模型一般都比较大,引擎运算量高 | 识别引擎的硬件资源少 |
依托云端的“在线”识别 | 部署于嵌入式设备端的”离线“语音识别 |
主要面向多轮对话交互 | 主要针对简单的设备控制场景 |
而端侧的语音识别属于封闭域识别的范围。
2、原理
语音识别技术的工作流程如下图所示:
- 设备麦克风接收原始语音,ADC将模拟信号转为数字信号。
- 声学前端模块执行回声消除、噪声抑制以及语音活跃检测排除非语音信号,然后对正常语音信号的进行MFCC特征提取。
- 后端处理部分将语音特征作为声学模型的输入进行模型推理,再结合语言模型计算出命令识别的得分,并根据最高得分检索命令集,最后输出识别结果。
- 后端的识别过程可以理解为将特征向量解码成文字的过程,这个过程需要经过两个模型的处理:
- 声学模型:可以理解为是对发声的建模,它能够把语音输入转换成声学表示的输出,更准确的说是给出语音属于某个声学符号的概率。在英文中这个声学符号可以是音节或者更小的粒度音素;在中文中这个声学符号可以是声韵母或者是粒度同英文一样小的音素。
- 语言模型:消解多音字的问题,在声学模型给出发音序列之后,从候选的文字序列中找出概率最大的字符串序列。语言模型还会对声学的解码作约束和重打分,让最终识别结果符合语法规则。目前最常见的是N-Gram语言模型和基于RNN的语言模型。
3、趋势
目前,开放域的语音识别都在向生成式AI的大模型发展,与之不同的是,端侧语音识别的研究方向主要集中在以下三个方面,概括来说就是模型更小、响应速度更快以及鲁棒性更强:
- 模型优化与压缩:提出各种优化的算法如超维计算、内存交换机制、受限神经架构搜索等优化算法 ,通过量化、剪枝、知识蒸馏等模型压缩手段,降低模型的大小和计算需求,同时保持高准确率。
- 低延迟实时处理: 通过采用低延迟的声学特征提取算法、改进的模型推理方法和流式识别技术,在满足实时性要求的同时,保持高准确率。
- 端侧声学环境适应: 噪音抑制算法、声学模型训练在多种噪音环境下的数据增强、多通道音频处理等。
4、开源工具与数据集
- 开源工具
工具 | 简介 | 编程语言 | 链接 |
Kaldi | Kaldi是一个强大的语音识别工具包,支持各种声学建模和解码技术。它提供了用于声学模型训练、特征提取、解码等一系列工具和库。 | C++ Shell Python | https://github.com/kaldi-asr/kaldi |
vosk-api | Vosk是一个离线开源语音识别工具。它可以识别16种语言,包括中文。 | Python | https://github.com/alphacep/vosk-api |
PocketSphinx | Carnegie Mellon University开发的另一个小型语音识别引擎,适用于嵌入式系统和移动应用。 | Python C/C++ | https://github.com/cmusphinx/pocketsphinx |
DeepSpeech | 由Mozilla开发的开源语音识别引擎,它使用了RNN和CNN来处理声学特征,并提供了预训练的模型供使用。 | Python | https://github.com/mozilla/DeepSpeech |
Julius | 一个开源的大词汇连续语音识别引擎,支持多种语言和模型。 | C/C++ | https://github.com/julius-speech/julius |
HTK | HTK是一个构建隐藏马尔可夫模型(HMMs)的工具包。 | C | https://htk.eng.cam.ac.uk/ |
ESPnet | 一个端到端的语音处理工具包,包括语音识别、语音合成等任务。 | Python Shell | https://github.com/espnet/espnet |
- 端侧推理开源框架
平台框架 | 简介 | 编程语言 |
Tensorflow-Lite | 谷歌开发的一个专门用于移动设备、嵌入式系统和边缘设备的轻量级机器学习推理框架。 | C++ Python |
uTVM | uTVM是TVM的一个分支,专注于在嵌入式系统、边缘设备和物联网设备上进行低延迟、高效的深度学习模型推理。 | C++ Python |
Edge Impluse | Edge Impulse是一个为物联网设备提供机器学习模型开发和部署的端到端平台,支持丰富的传感器和数据集成、模型开发工具、模型部署和推理等功能。 | C/C++ |
NCNN | ncnn是一个优化的神经网络计算库,专注于在资源有限的设备上进行高性能、高效的深度学习模型推理。 | C++ Python |
- 开源数据库
数据库 | 简介 | 链接 |
TIMIT | TIMIT是一个广泛用于语音识别研究的数据集,包含美国英语口音的读出句子。它包含了多种口音、性别和年龄的说话人录制的句子,用于训练和测试语音识别系统。 | https://catalog.ldc.upenn.edu/LDC93s1 |
LibriSpeech | LibriSpeech是一个用于语音识别的大型数据集,包含来自公共领域的英语读物的音频和文本。 | http://www.openslr.org/94/ |
海天瑞声 | 海天瑞声公司向全行业提供多语言、跨领域、跨模态的人工智能数据及相关数据服务。 | https://www.speechocean.com/dsvoice/catid-52.htm |
数据堂 | 数据堂是国内的人工智能数据服务企业,提供训练数据集、数据采集与标注定制服务。 | https://www.datatang.com/ |
更多的开源数据库http://www.openslr.org/resources.php
三、 技术方案
1、基于语音识别芯片模组
语音识别芯片通常内置对信号处理和语音识别所需要的DSP指令集,支持浮点运算的FPU运算单元,以及FFT加速器,通过神经网络对音频信号进行训练学习,从而提高语音信号的识别能力。下表是部分语音识别芯片模组的供应商。
供应商 | 芯片模组 | 唤醒与命令定制 | 迭代方式 |
启英泰伦 | CI120系列 CI130系列 CI230系列 | https://aiplatform.chipintelli.com/home/index.html | 串口烧录 OTA |
海凌科 | HLK-v20 | http://voice.hlktech.com/yunSound/public/toWebLogin | 串口烧录 |
安信可 | VC系列模组 | https://udp.hivoice.cn/solutionai | 串口烧录 |
机芯智能 | SU-03T SU-1X系列 SU-3X系列 | https://udp.hivoice.cn/solutionai | 串口烧录 |
唯创知音 | WTK6900 | 线下客制服务 | - |
九州电子 | NRK330x系列 | 线下客制服务 | - |
语音芯片模组通常不需要接外围电路,接上电源、MIC与喇叭就可以工作。
以HLK-v20为例,其默认固件内置了一些默认的唤醒词与命令词条,在完成语音指令的识别后会通过串口输出固定协议的格式命令,用户可以根据需求对接相应的主控芯片进行无线通信以及其它功能的实现。与此同时,HLK-v20可以通过海凌科语音产品定制管理系统对唤醒词与命令词的固件定制,根据需求设置完成命令词后在线生成固件SDK,用户再烧录到芯片模组中进行更新。
2、基于芯片厂商的开发框架
芯片厂商提供自己的AI应用开发框架,所提供的语音识别模型针对自家芯片架构作了深度的算子优化,极大提高了模型的推理速度。
厂商 | 框架 | 相关链接 |
ESP32 | esp-adf语音开发框架,依托于esp-idf基础架构与esp-sr语音识别处理算法库。 | https://github.com/espressif/esp-adf/tree/master |
STM32 | 提供了一个端到端的解决方案,使开发人员能够在STM32微控制器上快速部署各种AI模型。 | https://stm32ai.st.com/stm32-cube-ai/ |
Siliconlabs | 提供了MLTK工具集 | https://siliconlabs.github.io/mltk/ |
以乐鑫的ESP-ADF框架为例,它是是在ESP-IDF基础上开发出来的一系列音频应用组件,其核心的语音识别算法组件是ESP-SR,同时还提供了多种codec驱动以及传输协议。可以方便地开发音频和视频应用程序。
使用的硬件框架如上图所示,由于需要进行神经网络的推理,为了语音识别的准确率一般都会引入LSTM或者Seq2Seq等模型,从而导致了最终的模型文件较大,运行时所需的内存资源也有一定的要求,所以一般情况下都需要外接Flash或SDCard。
3、基于开源框架
目前有不少开源的神经网络框架可以实现语音识别模型的训练以及产品级别的工业部署方案,比如工业界非常流行的Tensorflow-Lite、支持板级算子自动优化的神经网络编译器TVM等。
基于神经网络的开源框架最大的优势是全流程自主控制,包括模型的训练与部署等,缺点是过程较长,而且网络模型的设计与调优都是一个不小的挑战。
4、基于神经网络芯片
神经网络芯片通常具有较高的算力,能够满足复杂的功能需求,在成本上也更加昂贵,主要在智能音箱与智能语音中控的场景使用较多。
厂商 | 型号 |
全志科技 | R328、R58、R16、H6、F1C600 |
晶晨 | A113X、A112、S905D |
BEKEN博通 | BK3260 |
Intel | Atom x5-Z8350 |
MTK | MT7668、MT7658、MT8167A、MT8765V、MT7688AN、MT8516、MT2601 |
瑞芯微 | RK3308、RK3229、RK3326、OS1000RK |
思必驰 | TH1520 |
科大讯飞 | CSK4002 |
四、总结
本文介绍了语音识别技术的基本概念与工作原理,同时阐述了在端侧实现语音识别的四种技术应用方案。
请先 后发表评论~