2022-9-30 22:22:36 [显示全部楼层]
2599浏览
查看: 2599|回复: 8

用微机器学习做手势辨识

[复制链接]
本帖最后由 gada888 于 2022-9-30 22:28 编辑
这是即tinyML开篇之后的实战篇篇一。开篇那个帖子列出了微机器学习所需要用的软硬件和跑通流程。感兴趣的可以去参考一下。这一篇进入实作内容。来一个手势辨识。

这次硬件仍然用WIO terminal作为主控。
用微机器学习做手势辨识图3
Wio Terminal 是一款专门用于 IoT 与 TinyML 的多功能开发板 – 包含了 ATSAMD51P19 晶片并以 ARM Cortex-M4F 为核心 (20MHz),已支援多种针对微控制器的 ML推论框架。

用微机器学习做手势辨识图4
用微机器学习做手势辨识图5
用微机器学习做手势辨识图6
用微机器学习做手势辨识图7
用微机器学习做手势辨识图8
它包含:光感测器,麦克风, LCD,加速度感测器,可连接多达300种传感


软件仍然用Arduino和Edge Impulse来编译代码,,Edge负责提供python转换的的C++代码,arduino负责改写C++代码,最后把生成的arduino C代码上传到WIO去。
用微机器学习做手势辨识图9
TinyML 的 tiny 代表 ML 模型已针对低功耗的微型装置进行最佳化,但是 Arduino初级系列的各种 MCU 的算力不足。所以用了ARM系列的大算力MCU来干活,

TinyML的常见应用如下:
声音场景
热词侦测
影像辨识
气味分析

等等
用微机器学习做手势辨识图10
这次做剪刀、石头、布的光线遮断样式不同来区分,做一个很小的数据集,每个种类做10个样本。一共30个样本。虽然样本量极小,有欠拟合的风险,但是可以通过增加样本来进行调整。

需要执行以下命令
Wio Terminal
注册Edge Impulse
PC端安装Arduino IDE 2.0
用微机器学习做手势辨识图2
导入 wio terminal 开发板
https://files.seeedstudio.com/ar ... o_boards_index.json
Node.js 1.6
安装edge impulse CLI tool 上传资料
npm install -g edge-impulse-cli


1.  Wio terminal 上传单笔资料到  Edge Impulse
2.  把资料整理到不同类别,反覆操作
3.  设计 Impulse:资料处理、定义模型
4.  测试神经网路效能、修改、重复
5.  汇出神经网路档案
6. 透过 Arduino IDE 烧录至 Wio
7. Wio 执行离线推论,完成!


Edge Impulse的训练流程如下
Impulse design
Create impulse
Raw data
NN Classifier
Retrain model
Live classification
Deployment

用微机器学习做手势辨识图1

接下来面对自己写代码还是用Seeed的官方firmware。后者可以更快的上手。以上传firmware为例
先上传 firmware
再于 cmd 中执行 edge-impulse-daemon --clean
清除设定后进入新的专案(需要重新登入)
然后由EdgeImpulse网站Data acquision的下拉式选单
选择许多wio 已支援的传感

用微机器学习做手势辨识图11

透过 cli 工具上传

把手放于光线传感上方 (wio 背面)
用微机器学习做手势辨识图17
用微机器学习做手势辨识图30
用微机器学习做手势辨识图31
确认 upload.ino 已上传
开启 cmd,输入:edge-impulse-daemon --clean
填入帐号密码、连接com port 以及资料 label 名称
其他手势依序操作
edge-impulse-data-forwarder 指令会沿用前次设定


用微机器学习做手势辨识图12

在edge网站收集和管理资料
用微机器学习做手势辨识图13
单笔原始资料的设置如下
用微机器学习做手势辨识图14
我们收集了训练模型所需的数据样本。然后送入神经网络,并对数据进行预处理。有时我们只是重新缩放数据,可以将 0 到 1000 范围内的值转换为 0 到 1 范围内的值 - 因为神经网络处理较小的数字比处理较大的数字表现更好。 TinyML 中使用的神经网络参数数量小(数字神经元之间的连接),所以我们经常还应用更复杂的预处理技术从 Raw 中提取所谓的特征数据,这加快了训练过程。
神经网络由输入层,隐藏层和输出层组成,大家先了解个大概,细讲1个小时讲不完。简单说,神经网络通过自己的框架把输入的数据的特征找出来。


用微机器学习做手势辨识图28
下面建立impulse
用微机器学习做手势辨识图15

选择机器学习框架,一个即可
用微机器学习做手势辨识图16
生成impulse
用微机器学习做手势辨识图18
神经网络架构
用微机器学习做手势辨识图19
更多的训练
用微机器学习做手势辨识图20

生成的神经网络的python代码是可以手动修改的。前提,你要了解你的神经网络的架构。
用微机器学习做手势辨识图21
检查训练结果
用微机器学习做手势辨识图22
测试资料的单笔结果
用微机器学习做手势辨识图23
进行优化
用微机器学习做手势辨识图24

汇出神经网络到需要的平台

用微机器学习做手势辨识图25
用微机器学习做手势辨识图26
如果认为训练的模型精度不够,那就多加一维来进行训练,通常90%以上精度就OK了。
用微机器学习做手势辨识图27

#define FREQUENCY_HZ
#define INTERVAL_MS
40
(1000 / (FREQUENCY_HZ))
void setup() {
Serial.begin(115200);
Serial.println("Started");
}
void loop() {
static unsigned long last_interval_ms = 0;
float light;
if (millis() > last_interval_ms + INTERVAL_MS) {
last_interval_ms = millis();
light = analogRead(WIO_LIGHT);
Serial.println(light);
//Serial.print('\t');
}
}

把上述代码插入到static_buffer.ino里面去。然后上传,就得到最后的结果了。static_buffer.ino是从edgeimpulse里导出的给arduino的.zip文件里的。

用微机器学习做手势辨识图29
用微机器学习做手势辨识图32
完成之后,在WIO上用手演示,会在arduino的COM看到预测结果
用微机器学习做手势辨识图33

赤星三春牛!  初级技神

发表于 2022-10-1 20:37:08

厉害厉害
回复

使用道具 举报

赤星三春牛!  初级技神

发表于 2022-10-1 20:38:09

呵呵呵呵
回复

使用道具 举报

赤星三春牛!  初级技神

发表于 2022-10-1 20:39:40

点赞!!!
回复

使用道具 举报

赤星三春牛!  初级技神

发表于 2022-10-1 20:40:42

6666666666
回复

使用道具 举报

赤星三春牛!  初级技神

发表于 2022-10-1 20:41:44

不错不错
回复

使用道具 举报

赤星三春牛!  初级技神

发表于 2022-10-1 20:42:45

值得学习!!
回复

使用道具 举报

赤星三春牛!  初级技神

发表于 2022-10-1 20:43:46

感谢分享
回复

使用道具 举报

gada888  版主
 楼主|

发表于 2022-10-2 15:46:21

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail