Arduino 机器学习实战入门(上)
2019年11月02日 由 sunlei 发表
829319
0
这是来自Arduino团队的Sandeep Mistry和Dominic Pajak的一篇客座文章。
Arduino的任务是让机器学习变得简单,任何人都可以使用。在过去的几个月里,我们一直在与Tensorflow Lite团队合作,并很高兴向您展示我们的合作成果:将Tensorflow Lite Micro应用于
Arduino Nano 33 BLE Sense。在本文中,我们将向您展示如何安装和运行几个新的TensorFlow Lite微示例,这些示例现在可以在
Arduino库管理器中找到。
下面的第一个教程将向您展示如何在Arduino板上安装一个神经网络来识别简单的语音命令。
[caption id="attachment_46325" align="aligncenter" width="480"]
示例1:运行预训练的micro_speech推断示例。[/caption]
接下来,我们将介绍一个更深入的教程,您可以使用它在Colab中使用TensorFlow为Arduino训练自己的自定义手势识别模型。本材料是根据Sandeep Mistry和Don Coleman举办的一个实践研讨会编写的,现在已经在
网上更新了。
[caption id="attachment_46327" align="aligncenter" width="480"]
例2:训练自己的手势分类模型。[/caption]
如果你以前有过Arduino的经验,你可以在几个小时内完成这些教程。如果你对微控制器还不太熟悉,可能需要更长的时间。
我们很高兴与大家分享一些最初的例子和教程,并看看您将从这里构建什么。我们开始吧!
[playlist type="video" ids="46328"]
注:以下项目是基于TensorFlow Lite的微控制器,目前正在TensorFlow repo中进行实验。这还是一个新兴的领域!
微控制器和TinyML
微控制器,如Arduino板上使用的微控制器,是低成本、单芯片、独立的计算机系统。它们是隐藏在数十亿日常用品中的隐形电脑,如可穿戴设备、无人机、3D打印机、玩具、电饭煲、智能插头、电动滑板车、洗衣机。连接这些设备的趋势是所谓物联网的一部分。
Arduino是一个开源平台和社区,致力于让每个人都可以访问微控制器应用程序开发。我们使用的主板有一个Arm Cortex-M4微控制器,运行频率为64MHz,有1MB的闪存和256KB的RAM。与云、PC或移动设备相比,这是很小的,但以微控制器标准来看是合理的。
[caption id="attachment_46329" align="aligncenter" width="1342"]
Arduino Nano 33 BLE感应板比一根口香糖还小[/caption]
可能有一些实际原因需要在微控制器上挤压ML,包括:
- 功能-希望智能设备在本地快速运行(独立于互联网)。
- 成本-用简单、低成本的硬件实现这一点。
- 隐私-不想在外部共享所有传感器数据。
- 效率-更小的设备形状系数,能量收集或更长的电池寿命。
有一个最终目标,我们正在朝着这个目标努力,这是非常重要的:
- 机器学习可以让没有嵌入式开发背景的开发人员访问微控制器。
在机器学习方面,您可以使用一些技术将神经网络模型放入内存受限的设备(如微控制器)中。其中一个关键步骤是将
权重从浮点量化为8位整数。这也有助于使推断更快地计算,并且更适用于较低的时钟速率设备。
TinyML是一个新兴的领域,还有很多工作要做——但令人兴奋的是,还有一个巨大的未开发的应用空间。数以亿计的微控制器和各种各样的传感器结合在一起,在未来可能会带来一些非常有创意和价值的微型ML应用。
开始之前你需要做什么
- Arduino Nano 33 BLE感应板
- 连接Arduino板和台式机的微型USB电缆
- 要对板进行编程,可以使用Arduino Web编辑器或安装Arduino IDE。我们将在下一节详细介绍如何设置这些
Arduino Nano 33 BLE Sense有多种板载传感器,这意味着它有可能用于一些很酷的微型ML应用程序:
- 语音-数字麦克风
- 运动- 9轴IMU(加速度计、陀螺仪、磁力仪)
- 环境-温度、湿度和压力
- 光-亮度,颜色和物体接近度
与经典的Arduino Uno不同的是,它将一个微控制器与板载传感器结合在一起,这意味着你可以在不需要额外的硬件或线路的情况下解决许多用例。该电路板也足够小,可以在可穿戴设备等终端应用中使用。顾名思义,它具有蓝牙LE连接性,因此您可以将数据(或推断结果)发送到笔记本电脑、移动应用程序或其他BLE板和外围设备。
小贴士:U盘上的传感器
通过USB连接BLE感知板是一种简单的方法,可以捕获数据并将多个传感器添加到单板计算机中,而不需要额外的线路或硬件——例如,这是对树莓派的一个很好的补充。
Tensorflow Lite微控制器示例
现在,TensorFlow Lite for微控制器的推理示例已经打包并通过Arduino库管理器提供,这样就可以在Arduino上包含并运行它们。在本节中,我们将向您展示如何运行它们。例如:
- micro_speech—使用板载麦克风的语音识别
- magic_wand——使用内置IMU的手势识别功能
- person_detection—使用外部ArduCam相机进行人物检测
有关示例的更多背景知识,可以查看
TensorFlow存储库中的源代码。这些示例中的模型之前都经过了培训。下面的教程向您展示了如何在Arduino上部署和运行它们。在下一节中,我们将讨论培训。
如何使用Arduino创建Web编辑器运行示例
一旦你使用USB数据线将Arduino Nano 33 BLE Sense连接到台式机,你就可以通过Arduino Create web编辑器在面板上编译和运行以下TensorFlow示例:
[caption id="attachment_46330" align="aligncenter" width="480"]
从Arduino_TensorFlowLite库编译一个示例[/caption]
聚焦语音识别实例:micro_speech
Arduino板的第一步是让LED闪光。在这里,我们将通过使用Tensorflow Lite Micro识别语音关键字来实现。它有一个简单的词汇“是”和“否”。请记住,这种型号是在一个只有256kb内存的微控制器上本地运行的,所以不要期望商业上的“语音助手”级别的准确性-它没有互联网连接,可用的本地RAM大约是2000x。
注意,电路板也可以用电池供电。由于Arduino可以连接到电机、执行器等,这为语音控制项目提供了潜力。
[caption id="attachment_46331" align="aligncenter" width="480"]
运行micro_speech示例[/caption]
如何使用Arduino IDE运行示例
或者,您可以使用ArduinoIDE应用程序尝试相同的推理示例。
首先,按照下一节中的说明设置Arduino IDE。
在ArduinoIDE中,您将通过ArduinoIDE中的文件>示例>Arduino_TensorFlowlite菜单查看示例。
选择一个示例,将打开示意图。要编译、上传和运行板上的例子,并点击箭头图标:
对于喜欢命令行的高级用户,还有arduino-cli。
为Arduino训练Tensorflow Lite微观模型
[caption id="attachment_46333" align="aligncenter" width="480"]
Arduino BLE 33 Nano Sense上的手势分类,输出表情符号[/caption]
接下来,我们将使用ML使Arduino板能够识别手势。我们将从Arduino Nano 33 BLE感知板中获取运动数据,将其导入TensorFlow中以训练模型,并将得到的分类器部署到该板上。本教程的灵感来源于查理·杰拉德(Charlie Gerard)使用Arduino和Tensorflow.js制作的《街头霸王》(Street Fighter)。在Charlie的例子中,电路板将所有的传感器数据从Arduino传输到另一台机器上,而这台机器将用Tensorflow.js对手势进行分类。我们更进一步,通过在Arduino板上执行手势分类来“TinyML-ify”它。在我们的示例中,由于我们使用的Arduino Nano 33 BLE感知板具有更强大的Arm Cortex-M4处理器和一个内置的IMU,这使得实现起来更容易。
我们已经修改了下面的教程,所以不需要额外的硬件——采样开始于检测板的移动。本教程的原始版本添加了一个实验板和一个硬件按钮来按下以触发采样。如果你想进入一个小硬件,你可以遵循这个
版本。关于这一部分我们明天继续分析。
原文链接:https://medium.com/tensorflow/how-to-get-started-with-machine-learning-on-arduino-7daf95b4157