FUNPACK第二季第一期项目_Syntiant TinyML_中文语音指令控制LED灯闪烁
本项目基于Syntiant公司的TinyML板卡完成了利用中文语音指令控制LED灯闪烁的功能。设计了唤醒词“你好,小板子”,并有三个中文指令,分别为“打开灯光”,“关闭灯光”以及“闪烁灯光”。
标签
嵌入式系统
Funpack
机器学习
TinyML
语音识别
Owen
更新2022-07-06
北京理工大学
548

1 项目描述

1.1板卡简介

本项目基于Syntiant公司的TinyML板卡。TinyML板卡上搭载以Cortex M0+为核心的主控芯片,以及Syntiant公司研制的NDP101神经网络决策处理器。板卡上带有麦克风和6轴运动运动传感器两个传感器,能够完成基于神经网络的语音识别和动作识别。而且,该板卡完成神经网络时具有高实时性和超低功耗。

1.2 项目内容

本项目基于上述板卡完成了利用中文语音指令控制LED灯闪烁的功能。设计了唤醒词“你好,小板子”,并有三个中文指令,分别为“打开灯光”,“关闭灯光”以及“闪烁灯光”。当检测到唤醒词时,绿灯长亮。当检测到“打开灯光”时,红灯长亮。当检测到“关闭灯光”时,红灯关闭。当检测到“闪烁灯光”时,红灯快速闪烁。

2 项目设计思路

2.1 数据采集

首先收集语音数据,作为神经网络的训练和验证数据。针对唤醒词和三条指令,每句话收集了约50条语音。此外,为了防止乱触发(将杂音判断为指令)的现象,从官方数据集中选取了100条噪声信号。数据时长分布较为均匀,如下图所示。

FuL3JRtzZODjjiF3qGIIBcDinAAG

2.2 神经网络训练

Edge Impulse网站能够快速的训练神经网络模型,然后生成在相应硬件上运行的代码库,能够非常方便地将神经网络部署到嵌入式设备上。本项目的神经网络的训练依赖于Edge Impulse完成。

下图是利用Edge Impulse搭建的语音信号处理与识别模型。首先会对语音信号进行梅尔滤波,提取倒谱系数作为语音信号的特征。然后将语音信号的特征输入到神经网络中。神经网络经过对特征的运算,输出语音信号属于每种类别的概率。取概率最大的作为最终判别结果。

随后对神经网络进行训练,得到的结果如下图所示。最终,神经网络在验证集上的准确率为88.2%,并不理想,但能基本满足使用要求。这可能是由于数据量过少,产生了过拟合的现象导致的。在混淆矩阵中可以看到,“关闭灯光”指令判断准确率较低,在测试的时候未对该指令进行测试。

FtSypXCnoMnTCatDEyTUI3OvS9cu

2.3 硬件代码设计

硬件代码设计较为简单。在神经网络决策处理器完成了一次决策后,会产生中断。主控制器收到中断信号并调用中断服务函数。因此,在中断服务程序的对应位置添加上对应LED的正确操作即可。

例如,在检测到唤醒词时,使绿灯引脚输出高电平,代码如下所示:

void on_classification_changed(const char *event, float confidence, float anomaly_score) {
    if (strcmp(event, "hello") == 0) {
        digitalWrite(LED_GREEN,HIGH);
    }
}

2.4 神经网络部署

将上节中编写的代码编译,并从Edge Impulse上下载模型文件,利用写好的Flash烧录脚本将代码烧录进芯片。将USB线拔下后再插上,待芯片完全重启后便能对语音识别的效果进行测试。

3 测试结果

下两图分别为打开灯光以及唤醒词的测试结果,与预期相符。由于闪烁灯光效果不便于使用图片展示,详情请见演示视频。在测试时,可以体会到该神经网络处理器强大的运算性能。

打开红灯效果打开绿灯效果4 参加活动的感受

本次活动是我第一次接触真实的神经网络处理芯片,确实感受到了它极快的处理速度,这开拓了我的眼界。但本次活动的不足是未能公开NDP101内部的信息,供大家继续探索。

附件下载
firmware-syntiant-tinyml.zip
基于Arduino-CLI的工程文件
syntiant-chinese-syntiant-ndp101-v5.zip
Flash烧录
团队介绍
学生
团队成员
Owen
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号