TinyML降低了将AI添加到边缘的复杂性,支持将数据流回云的新应用程序令人望而却步。目前正在使用TinyML的一些应用程序示例如下:
那么构建一个TinyML应用程序需要什么?
构建TinyML应用程序涉及的技能组合包括硬件工程、嵌入式编程、软件工程、机器学习、数据科学和有关您正在构建的应用程序的领域专业知识。构建应用程序所需的步骤可以分为四个部分:
Nano33BLESense还具有多种板载传感器,可用于您的TinyML应用程序。在本教程中,我们使用的是运动传感器,它是一个9轴IMU(加速度计、陀螺仪、磁力计)。
对于无线电源,我们使用了Adafruit锂离子电池组。如果您没有电池组,您仍然可以使用适当长度的微型USB电缆为电路板供电来完成本教程。虽然在有线时收集手势数据并不那么有趣。请参阅下图将电池连接到Nano33BLESense。
对于这个项目,我们将收集5种不同手势的数据以及一些负面情况的数据,我们将其标记为未知。我们要收集数据的5个拳击手势是Jab、Overhand、Cross、Hook和Uppercut。
我们还将收集左右手套的数据。给我们总共10个不同的分类。为了简化事情,我们将构建两个单独的模型,一个用于右手套,一个用于左手套。本教程将重点介绍左手套。
TinyML项目的第一个挑战通常是弄清楚如何从传感器中获取数据。根据你的需要,可以选择Wi-Fi、BLE、串行或LoRaWAN。或者,你可能会发现将数据存储到内部SD卡并在之后传输文件是收集数据的最佳方式。在本教程中,我们将利用板载BLE无线电从Nano33BLESense传输传感器数据。
要配置网关以连接到您的传感器:
网关将从你的设备中提取配置,并准备好开始转发传感器数据。可以通过转到TestStream选项卡并单击StartStream按钮来验证它是否正常工作。
我们创建了一个模板项目来帮助你入门。该项目预先填充了手势标签和元数据信息,以及一些预先录制的示例手势文件。将此项目添加到你的帐户:
上传项目后,你可以开始捕获传感器数据。对于本教程,我们将通过TCP/IP从网关将数据流式传输到数据捕获实验室。通过网关从DataCaptureLab连接到Nano33BLESense:
现在数据正在流入数据捕获实验室,我们可以开始捕获手势数据集。
点击停止录制后,捕获的数据将保存在本地并与云项目同步。您可以通过转到ProjectExplorer并双击新创建的文件来查看该文件。
要实时对传感器数据进行分类,你需要决定将传感器流的多少和哪一部分提供给分类器。在边缘设备上,由于RAM有限,只能使用少量数据缓冲区,因此变得更加困难。为应用程序识别正确的分割算法可以通过限制执行的分类次数以及通过识别手势的开始和结束来提高准确性来节省电池寿命。
分割算法的工作原理是从传感器获取输入并缓冲数据,直到它们确定找到了新的段。那时,他们将数据缓冲区向下传递给管道的结果。最简单的分割算法是滑动窗口,它不断地将一组数据提供给分类器。但是,对于离散手势识别,滑动窗口有很多缺点,比如在没有事件的情况下进行分类。这会浪费电池并冒着将事件拆分到多个窗口的风险,这会降低准确性。
我们通过围绕传感器数据中的事件创建分段来识别数据捕获实验室中的事件。当您打开文件并定义事件所在的位置时,段会显示为一对蓝线和红线。
DataCaptureLab有两种标记事件的方法:Manual和Auto。在手动模式下,你可以手动将片段拖放到图表上,以识别传感器数据中的事件。自动模式使用分段算法根据可自定义的参数自动检测事件。对于本教程,我们将在自动模式下使用分段算法。我们用于确定事件的分段算法也将作为固件的一部分进行编译,以便设备上的模型将被提供与训练时相同的数据段。
我们已经根据迄今为止收集的数据集为这个项目创建了一个分割算法。要对新捕获的数据文件执行自动事件检测:
注意:如果事件与文件中的真实片段不匹配,您可能需要调整分割算法的参数。
请记住,自动事件检测仅检测已发生的事件,并不能确定已发生的事件类型。对于检测到的每个事件,你都需要为它们应用标签。要做到这一点:
1、在摘要选项卡中打开拳击手套手势演示项目
2、转到测试模型选项卡
3、从型号名称下拉列表中选择您的型号
4、通过单击选择一个或多个捕获文件
5、单击ComputeAccuracy按钮以使用所选模型对捕获进行分类
当你点击ComputeAccuracy按钮时,分割算法、预处理步骤和TensorFlow模型将被编译到一个知识包中。然后使用编译的知识包计算你选择的每个捕获的分类结果和准确性。单击单个捕获的结果按钮以查看所有检测到的事件的分类以及它们与地面实况标签的比较情况。
现在你已经离线验证了模型,是时候看看它在边缘的表现如何了。为此,我们将模型下载并闪存到Nano33BLESense。
下载库后,我们将构建固件并将其上传到Nano33BLESense。对于此步骤,你将需要Nano33知识包固件。为了编译固件,我们使用带有PlatformIO插件的VisualStudioCode。要使用此固件编译模型并刷新Nano33BLESense:
1、打开你的终端并运行:
4、将文件从libsensiml复制到nano33_knowledge_pack/lib/sensiml,这将覆盖存储库中包含的文件。5、将文件从知识包项目复制到nano33_knowledge_pack/src/
6、切换到VSCode中的PlatformI/Oextension选项卡
7、使用微型USB电缆将Nano33BLESense连接到计算机。
8、单击PlatformI/O选项卡中nano33ble_with_tensorflow下的上传和监控。
当设备重新启动时,它将启动并且模型将自动运行。
我们希望这篇博客为你提供了开始使用TensorFlowLiteForMicrocontrollers和SensiMLAnalyticsToolkit构建端到端TinyML应用程序所需的工具!