Arduino可让人工智能项目更轻松地开展 | 智能技术

发布日期:2019-08-12 10:00
Adafruit的Limor Fried将TensorFlow Light移植到Arduino生态系统,因此您可以更轻松地制作自己的人工智能项目。



我想知道当我们将机器学习带到廉价和强大的设备上时会发生什么,这些设备可以拥有各种传感器并可以在各种环境中工作。我们的30美元或40美元的人工智能系统不会像阿尔法狗那样击败任何人,但它打开了我们可能从未想象过的应用程序开发大门。

具体来说,我想将机器学习带入Arduino生态系统。由于硬件和软件的改进,这最近成为可能。

在硬件方面,摩尔定律在最先进的处理器方面可能已经失去了动力,但在微控制器领域,该方尚未结束。例如,基于8位AVR处理器的微控制器在Arduino生态系统早期占主导地位,但近年来,嵌入式芯片制造商已转向更强大的基于ARM的芯片。我们现在可以为这些便宜、强大的设备提供足够的处理能力,以与20世纪90年代中期的台式机竞争。

在软件方面,迈出了重要的一步,发布了谷歌的TensorFlow Lite,这是一个运行预训练神经网络的框架--也称为模型--在所谓的边缘设备上。去年四月,IEEE Spectrum的Hands On专栏讨论了Google的Coral Dev Board,这是一款基于Raspberry Pi外形的单板计算机,专为运行TensorFlow Lite模型而设计。Coral采用专用的张量处理单元,功能强大,可以处理实时视频输入并识别数百个物体。不幸的是,我的计划是150美元,需要大量的电源,其庞大的散热器和风扇限制了它的包装方式。

但幸运的是,就我的计划而言,Pete Warden和他的团队在将TensorFlow Lite引入基于ARM Cortex系列处理器的芯片方面做了出色的工作。这很好发现,因为在我的开源硬件公司Adafruit Industries,我们目前最喜欢的处理器是32位SAMD51,它包含一个Cortex-M4 CPU。我们使用SAMD51作为我们最近和即将推出的Arduino兼容主板的基础,包括PyGamer,这是一款简单的电池供电游戏手持设备。如果我们可以用它来将AI放入人们的手中会怎样?

Warden创建了一个语音识别模型,可以识别模拟音频输入中的“是”和“否”字样。我开始考虑是否可以将它带给PyGamer,以及我可以用一个只能识别两个单词的模型做些什么。我想创建一个项目,激发制造商的想象力,并鼓励他们开始在这种硬件上探索机器学习。


我决定让它变得尽可能好玩,越有趣的是,错误就越可原谅。这就是为什么索尼的人工宠物Aibo被赋予了小狗的形象,因为真正的小狗笨拙而且有时碰到墙壁,或者不遵循指示。

我回忆起原来的Tron电影,其中英雄被卡在网络空间中并且拾取了各种各样的搭档,一点只能说“是”或“不”,伴随着形状的变化。PyGamer有一个1.8英寸的彩色显示屏,有192千字节的RAM和8兆字节的闪存文件存储空间,足以显示来自Tron的视频片段,显示该位的“是”和“否”响应。PyGamer的SAMD51处理器通常以120兆赫兹运行,我将其超频至200 MHz以提升性能。我将一个驻极体麦克风分线板连接到PyGamer的三个JST端口之一。

然后我转向最棘手的任务:将Warden和公司编写的TensorFlow Lite ARM代码移植到任何Arduino程序员都可以使用的库中,尽管不是每个Arduino板,尽管作为“精简”框架,RAM要求远远超出例如,Arduino Uno的2 kB 。

我发现源代码编写得很好,因此最大的挑战就是了解它如何处理传入的数据。数据不会被简化为简单的线性流,而是以重叠的块进行消化。我还希望以Arduino程序员熟悉的方式公开代码的功能,并且不会压倒它们。我发现了最有可能对程序员有用的功能,因此数据可以很容易地从传感器(如麦克风)输入到模型中,并将结果输出到程序员代码的其余部分,以便他们按照自己的意愿处理。然后我创建了一个包含这些函数的Arduino库,您可以在Adafruit的Github存储库中找到它。

总而言之,我使用新库编写了一个简短的程序。现在,当我按下一个按钮并对着PyGamer连接的麦克风说话时,如果我说“是”或“不是”,则会触发相应的Tron剪辑,让我用自己的动画伙伴走动。

虽然这个项目是机器学习的一个有限的介绍,但我希望它能说服更多的制造商和工程师将AI与硬件探索结合起来。我们在Adafruit的下一步将是更容易安装不同的模型并创建新的模型。使用200 kB的RAM,您可以拥有一个能够识别10到20个字的模型。但是,比语音识别更令人兴奋的是使用这些便宜的电路板来收集数据并运行围绕非常不同类型的信号构建的模型的前景。我们是否可以使用PyGamer板载加速度计的数据来学习如何区分用户在执行不同任务时的动作?我们可以汇集数据并训练模型,比如识别伺服失效或开关电源的声音吗?商店里有什么惊喜?找出答案的唯一方法是尝试。