Arduino 机器学习实战入门(上)

编辑 | sunlei

这是来自Arduino团队的Sandeep Mistry和Dominic Pajak的一篇客座文章。

Arduino的任务是让机器学习变得简单,任何人都可以使用。在过去的几个月里,我们一直在与Tensorflow Lite团队合作,并很高兴向您展示我们的合作成果:将Tensorflow Lite Micro应用于Arduino Nano 33 BLE Sense。在本文中,我们将向您展示如何安装和运行几个新的TensorFlow Lite微示例,这些示例现在可以在Arduino库管理器中找到。

下面的第一个教程将向您展示如何在Arduino板上安装一个神经网络来识别简单的语音命令。

示例1:运行预训练的micro_speech推断示例。

接下来,我们将介绍一个更深入的教程,您可以使用它在Colab中使用TensorFlow为Arduino训练自己的自定义手势识别模型。本材料是根据Sandeep Mistry和Don Coleman举办的一个实践研讨会编写的,现在已经在网上更新了。

例2:训练自己的手势分类模型。

如果你以前有过Arduino的经验,你可以在几个小时内完成这些教程。如果你对微控制器还不太熟悉,可能需要更长的时间。

我们很高兴与大家分享一些最初的例子和教程,并看看您将从这里构建什么。我们开始吧!

注:以下项目是基于TensorFlow Lite的微控制器,目前正在TensorFlow repo中进行实验。这还是一个新兴的领域!

微控制器和TinyML

微控制器,如Arduino板上使用的微控制器,是低成本、单芯片、独立的计算机系统。它们是隐藏在数十亿日常用品中的隐形电脑,如可穿戴设备、无人机、3D打印机、玩具、电饭煲、智能插头、电动滑板车、洗衣机。连接这些设备的趋势是所谓物联网的一部分。

Arduino是一个开源平台和社区,致力于让每个人都可以访问微控制器应用程序开发。我们使用的主板有一个Arm Cortex-M4微控制器,运行频率为64MHz,有1MB的闪存和256KB的RAM。与云、PC或移动设备相比,这是很小的,但以微控制器标准来看是合理的。

Arduino Nano 33 BLE感应板比一根口香糖还小

可能有一些实际原因需要在微控制器上挤压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示例:

从Arduino_TensorFlowLite库编译一个示例

聚焦语音识别实例:micro_speech

Arduino板的第一步是让LED闪光。在这里,我们将通过使用Tensorflow Lite Micro识别语音关键字来实现。它有一个简单的词汇“是”和“否”。请记住,这种型号是在一个只有256kb内存的微控制器上本地运行的,所以不要期望商业上的“语音助手”级别的准确性-它没有互联网连接,可用的本地RAM大约是2000x。

注意,电路板也可以用电池供电。由于Arduino可以连接到电机、执行器等,这为语音控制项目提供了潜力。

运行micro_speech示例

如何使用Arduino IDE运行示例

或者,您可以使用ArduinoIDE应用程序尝试相同的推理示例。

首先,按照下一节中的说明设置Arduino IDE。

在ArduinoIDE中,您将通过ArduinoIDE中的文件>示例>Arduino_TensorFlowlite菜单查看示例。

选择一个示例,将打开示意图。要编译、上传和运行板上的例子,并点击箭头图标:

对于喜欢命令行的高级用户,还有arduino-cli。

为Arduino训练Tensorflow Lite微观模型

Arduino BLE 33 Nano Sense上的手势分类,输出表情符号

接下来,我们将使用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

本文分享自微信公众号 - ATYUN订阅号(atyun_com)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习与计算机视觉

目标跟踪:SORT

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

16920
来自专栏机器学习与python集中营

CNN中的目标多尺度处理

1. 后面实习要解决实例分割中的目标多尺度问题(当然不只是这个问题,还有其他的),为此对CNN中这几年的多尺度处理方法进行简要总结~_~,时间紧任务重,只记录...

10330
来自专栏从流域到海域

知识图谱上简单问题的知识问答

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

12120
来自专栏机器学习与统计学

更好的数据胜过更高级的算法

数据清理是每个人都要做的事情之一,但很少有人专门讨论这件事,原因很简单,这不是机器学习的“最性感”的部分。而且,没有什么可供挖掘的隐藏技巧和秘密。

9430
来自专栏机器学习与统计学

关于XGBoost、GBDT、Lightgbm的17个问题

9.lightgbm和xgboost有什么区别?他们的loss一样么?算法层面有什么区别?

18820
来自专栏从流域到海域

L1正则和L2正则的区别详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

11840
来自专栏中科院渣渣博肆僧一枚

Feature Selective Anchor-Free Module for Single-Shot Object Detection

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

6520
来自专栏宜信技术实践

运用第一性原理探寻AI本质

AI,也就是人工智能,这几年非常火,但究竟AI的本质是什么呢?用第一性原理来探寻AI的本质,可能更容易理解。接下来我们一起探讨AI、第一性原理、以及如何使用第一...

1.2K50
来自专栏sofu456

opencv聚类算法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

9730
来自专栏数据派THU

2019年深度学习自然语言处理最新十大发展趋势

[ 导读 ]自然语言处理在深度学习浪潮下取得了巨大的发展,FloydHub 博客上Cathal Horan介绍了自然语言处理的10大发展趋势,是了解NLP发展的...

16230

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励