资料介绍
描述
这是 TinyML 课程系列的最后一篇文章——在之前的文章中,我们已经讨论了如何训练和部署机器学习模型,用于音频场景分类、异常检测、语音识别和其他任务到 Wio Terminal,一个紧凑的生产就绪开发板来自 Seeed 工作室。
2022 年 3 月 29 日更新。我尽我所能定期更新我的文章,并根据您在 YouTube/Hackster 评论部分的反馈。如果您想表达对这些努力的支持和赞赏,请考虑给我买杯咖啡(或披萨):) 。
Wio Terminal 虽然由于存在多个内置传感器和一个外壳而便于实验,但对于某些应用(例如可穿戴设备)来说可能有点过于笨重。在最后一个项目中,我们甚至会使用 Tinier 并使用 Seeeduino XIAO 板——即原始 XIAO和更新的XIAO 2040 ,并将简要提及即将发布的XIAO BLE 。
Specks-wise, 最初的 XIAO 在发布时可能是最小的 M0 开发板,它的尺寸与 ARM® Cortex®-M0+ 48MHz 微控制器 (SAMD21G18) 和 256KB 闪存、32KB SRAMOriginal XIAO 相得益彰——就像你可以看到它比拇指指甲大一点。
后来 RP2040 芯片问世并提供了更好的规格 Cortex M0+ 设计。两者都非常有能力运行我们将用于该项目的微型神经网络,但如果您有一些要求更高的应用程序,那么选择 XIAO RP2040 而不是原来的 XIAO 确实有意义。
作为一名软件工程师,我肯定和你们中的许多人一样,会花很多时间在我椅子上发光的屏幕前。而在当天晚些时候,保持适当的姿势变得困难。
如果有一种方法可以制造一种设备,该设备可以学习您的特定身体姿势以正确和错误的姿势,并在您过度无精打采或进入“蟒蛇姿势”时警告您……等一下,有!
为机器学习模型提供数据的任务的最佳传感器显然是加速度计。XIAO 系列的所有板子都非常小,没有配备加速度传感器。虽然我们可以使用XIAO 扩展板进行开发和测试,但它消除了 XIAO 板具有的低占用空间优势。如果您要创建自己的产品,更好的选择是为芯片或 SoM 创建自己的定制 PCB 板。我请我们的硬件工程师为 XIAO 设计一个简单的载板,其中包括 LIS3DH 加速度计、蜂鸣器和带电源开关的电池连接器。
然后我们使用 Seeed studio Fusion 服务打印了一些 PCBA 样本——为此,请访问https://www.seeedstudio.com/fusion_pcb.html并上传 Gerber 文件,其中包含 PCB 设计并为电路板选择适当的参数,例如如层数、基材、最小钻孔尺寸等。我们可以看到,一个简单的 2 层板 10 块加上运费约为 4.9 美元。
如果您想在没有定制 PCB 的情况下重复实验,您可以将Grove LIS3DH加速度计模块连接到 XIAO 扩展板并开始收集数据。我为每个姿势收集了 3 个数据样本,每个 60 秒,设备附在我背上的 T 恤上。
对于每个样本,我保持相同的姿势,但包括一些手臂、头部和躯干的运动来模拟正常活动。
我选择了 5 秒的时间窗口和 1 秒的窗口偏移和展平处理块,因为我们正在处理非常缓慢的移动数据。一个非常简单的全连接网络提供了良好的准确性。这是Edge Impulse 项目的公共版本的链接。
通过收集更多数据并确保可以识别正确和不正确的姿势,可以通过衣服上的设备定位的一些变化来做出一些改进。由于该设备被认为是个人使用设备,因此无需推广到不同人的姿势,并且可以轻松地重新训练。您可以在实时分类选项卡中检查训练后它检测您的姿势的能力。
在您对准确性感到满意后,将生成的模型下载为 Arduino 库并将其复制到您的 Arduino 草图/库文件夹中。您可以下载示例代码,该代码将收集 5 秒的样本,执行推理并在检测到其中一个不正确的姿势时打开蜂鸣器。
void loop()
{
ei_printf("Sampling...\n");
// Allocate a buffer here for the values we'll read from the IMU
float buffer[EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE] = { 0 };
for (size_t ix = 0; ix < EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE; ix += 3) {
// Determine the next tick (and then sleep later)
uint64_t next_tick = micros() + (EI_CLASSIFIER_INTERVAL_MS * 1000);
lis.getAcceleration(&buffer[ix], &buffer[ix+1], &buffer[ix + 2]);
buffer[ix + 0] *= CONVERT_G_TO_MS2;
buffer[ix + 1] *= CONVERT_G_TO_MS2;
buffer[ix + 2] *= CONVERT_G_TO_MS2;
delayMicroseconds(next_tick - micros());
}
// Turn the raw buffer in a signal which we can the classify
signal_t signal;
int err = numpy::signal_from_buffer(buffer, EI_CLASSIFIER_DSP_INPUT_FRAME_SIZE, &signal);
if (err != 0) {
ei_printf("Failed to create signal from buffer (%d)\n", err);
return;
}
// Run the classifier
ei_impulse_result_t result = { 0 };
err = run_classifier(&signal, &result, debug_nn);
if (err != EI_IMPULSE_OK) {
ei_printf("ERR: Failed to run classifier (%d)\n", err);
return;
}
// print the predictions
ei_printf("Predictions ");
ei_printf("(DSP: %d ms., Classification: %d ms., Anomaly: %d ms.)",
result.timing.dsp, result.timing.classification, result.timing.anomaly);
ei_printf(": \n");
for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
ei_printf(" %s: %.5f\n", result.classification[ix].label, result.classification[ix].value);
}
#if EI_CLASSIFIER_HAS_ANOMALY == 1
ei_printf(" anomaly score: %.3f\n", result.anomaly);
#endif
if (result.classification[1].value > ALARM_THRESHOLD || result.classification[2].value > ALARM_THRESHOLD)
{
tone(BUZZER_PIN, 523, 250);
delay(250);
noTone(BUZZER_PIN);
delay(250);
tone(BUZZER_PIN, 523, 250);
delay(250);
noTone(BUZZER_PIN);
}
}
由于它是相对缓慢变化的数据,我们不需要快速的响应时间,正常的顺序推理管道非常适合这个应用程序。
上面的一个步骤是使用最新的 XIAO BLE 并将设备连接到用户的智能手机,这将允许更好的警报、统计等。
即将发布的 Seeeduino BLE 有两个版本:BLE 和 BLE Sense。在 SBC 和服务器上执行了更大的 ML 模型之后,在最小的设备上修补机器学习对我来说确实是一次令人大开眼界的体验。如果您想继续学习该主题,请查看Coursera 和 Edge Impulse 提供的免费课程,以及Codecraft,这是一种图形编程环境,允许创建 TinyML 应用程序并将其部署到 Wio Terminal。
- TinyML变得简单:关键词识别(KWS)
- TinyML变得简单:图像分类
- 使用TinyML开发私人教练
- 基于Arduino Nano的TinyML空中森林火灾探测器 1次下载
- 带有tinyML的肩部恢复设备
- 计算器labview实现的课程实验报告 27次下载
- 机器人学校教材MZ07-CFD标准课程 1次下载
- 智能家电控制技术课程项目设计下载 2次下载
- 基于LSTM网络的在线学习课程推荐模型 6次下载
- ABB机器人操作培训课程 47次下载
- 西门子S7-300/400系统、维护与编程综合课程 54次下载
- 开源课程行动倡议及科学导论综述 6次下载
- 电力电子技术基础之课程设计课件下载 34次下载
- 计量学基础课程课件下载.ppt 24次下载
- 《大学物理学》课程经典习题7及答案 0次下载
- fpga学习需要具备哪些课程 853次阅读
- 目前在3A负载点转换器中有可能实现更小尺寸 417次阅读
- 【tinyML】使用EdgeImpulse让您的Arduino可以辨识手势! 4081次阅读
- 如何使用TinyML在内存受限的设备上部署ML模型呢 958次阅读
- 如何在 MCU 上快速部署 TinyML 1689次阅读
- 如何利用TinyML实现语音识别机器人车的设计 2110次阅读
- 微型数据转换器如何通过更小尺寸为您带来更多价值 1230次阅读
- 芯片制造向更小的目标前进 2727次阅读
- 更小更智能的电机控制器推进HEV/EV市场 1105次阅读
- 区块链学习,五个基础课程介绍 1.4w次阅读
- Udacity公司将推出深度学习纳米级基础课程 962次阅读
- 内存管理课程5节课的总结说明 1.3w次阅读
- 降压斩波电路课程设计汇总 4.8w次阅读
- DesignStart Cortex-M3软件开发网上课程 5729次阅读
- 微型光缆的发展趋势:更小、更快、更强韧 2396次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多