Funpack第二季第一期_基于Syntiant TinyML手势运动识别
本项目基于Syntiant tinyML Board,结合Edge Impulse的在线收集数据、训练模型、一键部署功能,实现了三个手势运动的识别,并将识别结果通过串口显示。
标签
嵌入式系统
TinyML
Syntiant
launcher
更新2022-07-05
631

项目描述

本项目基于Syntiant tinyML Board,结合Edge Impulse的在线收集数据、训练模型、一键部署功能,实现了三个手势运动的识别,并将识别结果通过串口显示。

硬件介绍

Syntiant TinyML 板的尺寸为 24 毫米 x 28 毫米,是一个小型的独立系统,通过微型 USB 连接通过 Edge Impulse 轻松下载经过训练的模型,而无需任何专用硬件。

本项目所用关键硬件:

  • 主机处理器:SAMD21 Cortex-M0+ 32位低功耗48MHz ARM MCU

  • 神经决策处理器使用NDP101

  • BMI160 6轴运动传感器

  • uSD卡插槽

Fg37WlrZ3mhEeIEoe-fGOrVRlajk

FjTZG6e9gv0dvAZWT6ERsQbyY7oO

从框图可知,SAMD21和NDP101实际上是两个独立的处理器,两者通过SPI进行通信。NDP101专负责机器学习识别的工作,结果丢给DAMD21,而SAMD21则根据结果/请求进行基础的外设控制操作,两者结合实现整个系统。

应用方向:智能手表、智能手环

训练平台介绍

Edge Impluse通过一个开源的设备软件开发套件(SDK)为开发者提供机器学习的支持,包括简单的传感器数据收集、实时信号处理、测试和在任意目标设备上部署的能力,用户还可以扩展和贡献你的算法以及对设备的支持。Edge Impluse使得机器学习的数据采集、信号处理、模型训练、嵌入式设备部署等工作变得非常简单,只需要在网站上进行图形化界面操作即可,并且信号处理及模型训练均在云端完成,无需占用本机的算力。Edge Impluse官方已支持了Syntiant tinyML Board,所以本项目大部分工作均在Edge Impluse网站上进行。

设计思路

  1. 在Edge Impluse上Clone Syntiant官方提供的Motion工程,以得工程的配置信息,避免自建工程由于参数选项不正常带来的问题。

  2. 下载官方的Motion工程生产的固件到Syntiant tinyML Board,以得到具有Motion数据采集功能的初始固件。

  3. 删除Motion工程的数据集,自己设计动作,并采集数据。

  4. 对采集的数据进行归一化处理,并生成特征。

  5. 对神经网络进行模型训练

  6. 生成部署到Syntiant tinyML的固件/库。

设计方案

Data acquisition

本次设计三个手势运动:

  • 逆时针画圆(标签:Circle)

  • 上下呈波浪状摆动(标签:Wave)

  • 翻转板子(标签:Flip)

因此需要对以上三个动作进行数据采集及标签分类,动作完成时间控制在2s以内。按照教程,还需额外采集一个z_openset的数据集。同时,由于Motion采集的数据需要再本地先进行缓存,然后再传输到云端,所以数据采集时,板子需要插入SD卡。

四种数据原始数据示例如下:

Fmjosm0w_iewB5ADURzX3QVexPUFFgLYFBvGLc4CkRNOzjizm8yDJQtoFmN8JfiNf1t7OQMkUrzjG1NDPuqy

FtsXu55AjoKx7_saY7SNeIAz0EArCreate impulse

impulse设计主要还是沿用原始Clone项目的配置,其中Window increase应该是可以调整以获得不同的识别效果的。

FrZ-pHpviMMXANHGD6p5diC_jOIH

Generate Feature

由于官方Motion样例里面采集的数据集,已经是归一化的,所有它无需再勾选归一化选项了。但是我们自己采集的数据是没有归一化的,所以一定要勾选一下"Scale 16 bits to 8 bits".

FvujvQDTRY96wglbvmDdkYbuac68

Feature 预览图如下

FnMKQDqHyS3HZjV5ABbp2C3JrgGv

Model Training

神经网络模型训练参数本项目保持原有工程的默认值,训练结果如下:

FhMoJg1m1pDh_F9Pad9s46oLcuP-

Deployment

完成模型训练,如果有需要可以进行在线的模型测试。最后工作是将训练好的模型,以嵌入式代码的方式部署到开发板上。由于Edge Impulse已完全支持Syntiant tinyML Board,所以可以有三种部署方式:

  • 标准C++库,我理解它不受限于特定硬件,可以在将库嵌入任意满足算力的嵌入式设备上进行工作。

  • Syntiant NDP101库,它实际上是完成生成了可直接执行的NDP101固件,以及几个与模型参数相关的接口文件(.h),在Syntiant tinyML Board上需结合Arduino源码及环境进行集成编译以获得SAMD21上运行的固件

  • Syntiant TinyML,则是完全生产了可直接运行的NDP101固件、DAMD21固件,无需再进行额外的编译工作。

识别结果

手握开发板的USB接口部分,使MCU侧方向向上并保持水平方向,然后分别做出逆时针画圆、翻转、上下波动等手势,识别结果通过串口打印输出,如下图所示:

Fk9X1n0-XgSx4NNrgj4IJ624sEzZ

画圆及翻转的结果

Ftn-1-GoM6Gk9HIA8uI3tha0vm1_

上下波动的结果

不足之处

实际识别的准确率是机器学习不可能避免的一个问题,本项目可以实现三种手势运动的识别,但偶尔存在不识别、误识别的情况。就本项目而言,我认为主要原因是训练数据量不够丰富。其中有两点原因:

  1. 单个人采集的数据,具有很大的局限性,最好由多人共同构建数据集

  2. Edge Impulse使用Syntiant TinyML采集Motion数据,似乎有些bug,经常采集上传不成功,导致很难进行更大数据的采集工作。

对于数据集,未来方向应该是全民参与,共同贡献构建数据集的趋势。本次Funcpack项目培训老师有提议共建数据集的想法,但实际上可能由于时间等多重因素,并没有得到具体的落实,有点遗憾,但是未来我相信会有机会去完成这个构想。

项目小结

心得

通过本项目,我对嵌入式机器学期有了基础的入门和认识,通过实际的动手实践对机器学期的数据采集、数据处理、模型训练、模型部署整个流程有了深刻的理解,为未来进行进一步的机器学习奠定了基础。

建议

后续活动不建议再使用Arduino相关的板子,其编译/开发环境极不友好,问题较多,对于年轻人的基础学习而言也不利。

附件下载
syntiant-tinyml--motion-syntiant-ndp101-v11.zip
团队介绍
www.etrd.org
团队成员
launcher
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号