在STM32上运行keyword spotting(一)工作简述
前景提要
公司有一个新产品,产品定义上有一个很愚蠢的交互设计,耳机中有人打电话过来后,会有提示音播放是否接听,此时用户想要接听,随便说什么话都可以接通(甚至噪音都可以),如果不想接通就闭嘴,因此我来了兴趣,能否在单片机上运行简单的语音关键词识别
简述keyword spotting
什么是kws(keyword spotting),翻译过来就是关键词检测,例如小米音响、天猫精灵音响上都有小爱同学、天猫精灵的唤醒词。我们如果有什么需求,可以在任意时刻发出语音指令让语音助手帮我们办事,所以kws的最重要的一个特点就是实时响应。
如何搭建语音唤醒模型
- 作为测试项目,我搭建一个实现识别noise、one、two、three、four、five六个英文单词的模型,每次的音频长度为1S
- 使用mfcc进行特征提取,便于网络结构识别特征
- 使用卷积神经网络(CNN)来做搭建网络结构:神经网络学习框架一如既往的使用torch
- 使用开源数据集speech_commands_v0.01,可以满足上述我们对样本的需求
- 每个标签的样本数量为2000,其中使用1700作为训练集,300作为测试集
- 需要创建一系列的工具用来音频提取、音频保存、数据保存等等
- 神经网络结构使用DS-CNN(深度可分离卷积神经网络),相比于传统CNN可以降低计算量
- 模型训练完成后在PC上与STM32上进行实际测试
最终在STM32上使用cube.ai框架推理,推理结果如下:
test x为输入一段音频,长度为16K,time为消耗的时长,单位为毫秒,result x 为最终结果
test 1->speed time:220 result is 1
test 2->speed time:221 result is 2
test 3->speed time:221 result is 3
test 4->speed time:221 result is 4
test 5->speed time:221 result is 5
下一章节:详细阐述如何收集样本、预处理样本、音频特征提取、样本保存等工作
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。