Arduino 机器学习实战入门(下)
2019年11月03日 由 sunlei 发表
398066
0
前文回顾:
Arduino 机器学习实战入门(上)
设置Arduino IDE
按照以下步骤设置Arduino IDE应用程序,该应用程序用于将推理模型上载到您的电路板,并在下一节中从电路板下载培训数据。因为我们需要在Arduino IDE中下载和安装特定的板和库,所以比使用Arduino Create web editor要多几个步骤。
- 从https://arduino.cc/downloads下载并安装Arduino IDE
- 打开刚刚安装的Arduino应用程序
- 在Arduino IDE菜单中选择工具>板>板管理器…
- 搜索“Nano BLE”并按下安装按钮
- 安装需要几分钟时间
- 完成后,关闭Boards Manager窗口
- 现在转到库管理工具>管理库…
- 搜索并安装Arduino_TensorFlowLite库
- 接下来搜索并安装Arduino_LSM9DS1库:
- 最后,将micro USB插入主板和计算机
- 选择板工具>板> Arduino Nano 33 BLE
- 选择端口工具>端口> COM5 (Arduino Nano 33 BLE)
- 注意,您计算机上的实际端口名可能不同
如果需要帮助,Arduino网站上有更详细的
入门和
故障排除指南。
从Arduino板上传输传感器数据
首先,我们需要获取一些训练数据。你可以通过USB数据线从Arduino板上获取传感器数据日志,你可以用笔记本电脑或个人电脑给板编程。
Arduino板运行小应用程序(也称为示意图),这些程序是由.ino格式的Arduino源代码编译而成,并使用Arduino IDE或Arduino Create在板上编程。
我们将使用一个预先制作好的草图IMU_Capture.ino,它执行以下操作:
- 监控电路板的加速度计和陀螺仪
- 触发检测电路板显著线性加速度的采样窗口
- 以119Hz采样1秒,通过USB输出CSV格式数据
- 回循环并监视下一个手势
我们选择从板上读取的传感器、采样率、触发阈值,以及我们是否将数据输出为CSV、JSON、二进制或其他格式,这些都可以在Arduino上运行的示意图中定制。在将数据输出到日志之前,还可以在设备上执行信号预处理和过滤——这一点我们可以在另一个博客中讨论。现在,您只需要上传草图并开始采样。
要在Arduino IDE中使用此草图对电路板进行编程:
- 下载ino并在Arduino IDE中打开它
- 用Sketch > Upload编译并上传到板上
从Arduino板上可视化实时传感器数据日志
完成这些之后,我们现在就可以看到黑板上的数据了。我们还没有捕获数据-这只是让你感觉一下传感器数据捕获是如何触发的,以及一个样本窗口有多长。这将有助于收集训练样本。
- 在Arduino IDE中,打开串口绘图仪工具>串口绘图仪
- 如果出现主板不可用的错误,请重新选择端口:
- 工具>端口>端口名(Arduino Nano 33 BLE)
- 拿起板子,练习你的击打和弯曲动作
- 您将只看到一秒钟窗口的示例,然后等待下一个动作
- 您应该会看到传感器数据捕获的实时图(参见下面的GIF)。
[caption id="attachment_46340" align="aligncenter" width="480"]
Arduino IDE串行绘图仪将显示从板输出的CSV数据的实时图形[/caption]
当你完成时,一定要关闭串行绘图仪窗口——这很重要,否则下一步将无法工作。
获取手势训练数据
要将数据捕获为CSV日志以上载到TensorFlow,可以使用Arduino IDE>Tools>Serial Monitor查看数据并将其导出到计算机桌面:
- 按下面板顶部的白色小按钮来重置面板
- 一手拿起板子(以后拿起板子会触发采样)
- 在Arduino IDE中,打开串口监控工具>串口监控
- 如果出现主板不可用的错误,请重新选择端口:
- 工具>端口>端口名(Arduino Nano 33 BLE)
- 用手拿着板做一个出拳的手势(做的时候要小心!)
- 以足够快的速度向外击打以触发捕捉
- 缓慢回到空档位置,以免再次触发捕捉
- 重复手势捕捉步骤10次或更多次以收集更多数据
- 将数据从串行控制台复制并粘贴到名为csv的新文本文件中
- 清除控制台窗口输出并重复上面的所有步骤,这次是在一个名为csv的文件中使用flex手势
- 使向内弯曲足够快,以触发捕获,每次缓慢返回
注意,两个csv文件的第一行应该包含字段aX、aY、aZ、gX、gY、gZ
Linux提示:如果愿意,可以将传感器日志输出从Arduino直接重定向到命令行上的.csv文件。串行绘图仪/串行监视器窗口关闭后使用:
$ cat /dev/cu.usbmodem[nnnnn] > sensorlog.csv
训练TensorFlow
我们将使用
谷歌Colab来训练我们的机器学习模型,该模型使用的是我们在前一节中从Arduino板上收集的数据。Colab提供了一个Jupyter notebook,允许我们在web浏览器中运行我们的TensorFlow训练。
Colab将指导您完成以下步骤:
- 设置Python环境
- 上传csv和flex.csv数据
- 解析和准备数据
- 建立和训练模型
- 将训练后的模型转换为TensorFlow Lite
- 将模型编码到Arduino头文件中
colab的最后一步是生成要下载的model.h文件,并将其包含在下一节的Arduino IDE手势分类器项目中:
让我们打开Colab中的笔记本,运行单元中的步骤- arduino_tinyml_workshop.ipynb
IMU数据分类
接下来我们将在Arduino IDE项目中使用之前章节中我们刚刚训练并从Colab下载的model.h文件:
1.在Arduino IDE中打开imu_classifier.ino。
2.在IDE中创建一个新选项卡命名为model.h。
3.打开model.h选项卡并粘贴您从Colab下载的版本
4.上传草图:草图>上传
5.打开串口监视器:工具>串口监视器
6.做一些手势
7.将每个手势的置信度打印到串行监视器(0 =低置信度,1 =高置信度)
祝贺您,您刚刚为Arduino培训了第一个ML应用程序!
为了增加乐趣,e
moji_button.ino示例演示了如何在Linux和MacOS中创建打印emoji字符的USB键盘。尝试将emoji_button.ino示例与
imu_classifier.ino草图结合起来,创建一个手势控制的emoji键盘。
结论
这是一个激动人心的时刻,有很多东西可以在Tiny ML中学习和探索。我们希望这篇文章能让你了解它的潜力,并成为开始在你自己的项目中应用它的起点。
原文链接:https://medium.com/tensorflow/how-to-get-started-with-machine-learning-on-arduino-7daf95b4157