1.板卡介绍
Syntiant TinyML Board
深度学习解决方案提供商Syntiant Corp推出的TinyML 开发板
配备超低功耗 Syntiant ® NDP101神经决策处理器™,可以使语音和传感器应用程序分别在 140 和 100 微瓦以下运行,与基于 MCU 的传统 MCU 相比,吞吐量提高 20 倍,系统效率提高 200 倍。Syntiant TinyML 板的尺寸为 24 毫米 x 28 毫米,是一个小型的独立系统,通过微型 USB 连接通过 Edge Impulse 轻松下载经过训练的模型,而无需任何专用硬件。
板卡主要特点:
神经决策处理器使用NDP101,连接了两个传感器
BMI160 6轴运动传感器
SPH0641LM4H麦克风
主机处理器:SAMD21 Cortex-M0+ 32位低功耗48MHz ARM MCU
内置256KB FLASH和32KB SRAM,
5个数字I/O,与Arduino MKR系列板兼容
其中包含1路UART接口和1路I2C接口(包括在数字I/O引脚中)
2MB板载串行闪存
一个用户定义的RGB LED
uSD卡插槽
电路板可使用5V micro-USB或3.7V LiPo电池供电
2.数据训练
三个控制类别
分别是开红灯,开绿灯,熄灭,z-openset是我从例程里下载的噪声,以希望提高识别率。
训练结果如下,准确率不错。
3.生成模型
为了提高准确率,我尝试了加入噪声和不加噪声的情况,也尝试了采用English radio和No calibration两种模式,最后发现不加噪声会比较好。
4.搭建环境
以上部分都不难,难的是搭建环境和烧录,我也是琢磨尝试了很久。
首先,按照b站方法下载了cli,arduino环境等,然后配置环境变量,且要把cli和flash-windows放在同一目录,再通过flash-windows去自动配置。
5.编写代码
写代码前,将build出来的文件要放进文件夹里,
下面两个放到外面的文件夹里,用flash-windows.bat去烧录
上面三个复制到src里的model-parameters中去替换
然后修改metadata.h和variables.h里的代码,
这里可以修改类别数量
这里需要注释掉一下不然报错
然后安装arduino
用update_libraries_windows.bat自动加载库文件,比较方便
进去后一定要选择板卡以及端口,不然没法运行。
打开arduino,写代码,代码比较简单
#include "src/syntiant.h"
#include <NDP.h>
#include <NDP_utils.h>
#include <Arduino.h>
/**
* @brief Called when a inference matches 1 of the features
*
* @param[in] event The event
* @param[in] confidence The confidence
* @param[in] anomaly_score The anomaly score
*/
void on_classification_changed(const char *event, float confidence, float anomaly_score) {
// here you can write application code, e.g. to toggle LEDs based on keywords
if (strcmp(event, "kh") == 0) {
// Toggle LED
digitalWrite(LED_RED, HIGH);
}
if (strcmp(event, "kl") == 0) {
// Toggle LED
digitalWrite(LED_GREEN, HIGH);
}
if (strcmp(event, "xi") == 0) {
// Toggle LED
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_RED, LOW);
}
}
void setup(void)
{
syntiant_setup();
}
void loop(void)
{
syntiant_loop();
}
写完后编译发现NDP报错
解决方法是下载github上例程firmware-syntiant-tinyml-fix-header-references就不会NDP报错了
最后编译上传进板子
6.测试结果
查看结果,我下载了串口工具xcom来方便使用
在尝试过程中,很难受的是有几次烧录板卡卡住了,需要用xcom发送:F来刷新,还有两次板卡亮绿灯,串口也无法连接,无法发送指令到板卡,摸索后发现只要在开关板卡瞬间发送:F就能解除
尝试了几种模型以后,选择了准确还不错的一种,能够有效识别,也不会因为环境声音而亮灯。
效果如下:
7.心得总结
这次花了一个礼拜的时间好好研究了这个板子,总的来说,不算难,但过程坎坷,主要是环境配置的时候一直出现各种错误,我也是在网上查了各种资料,花了很长时间才慢慢解决,在这之中也算学到了很多关于环境以及串口的知识,收获颇丰,也希望下次在指导时在这方面老师能够讲解更多,这样学生可以少走弯路。