基于TensorFlow Lite软件框架,使得在物联网IoT、嵌入式、单片机上运行机器学习模型,实现边缘AI部署
本文简介
本文总结归纳于 Pete Warden 和 Daniel Situnayake 的作品《TinyML Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers》
在原著的基础上加入了本人的一些思考,同时对某些代码进行更深入地解释,使得不论是嵌入式小白还是AI算法小白都能体验二者融合的魅力
本文将逐步更新,同时如有错误请联系我进行讨论修改,如有侵权请立即联系
在边缘部署AI的意义
介绍边缘
首先介绍边缘:边缘计算是一种分布式计算范式,它将计算任务和应用程序从中心化的数据中心推向网络的边缘,即靠近数据源或用户设备的地方。在边缘计算中,边设备或边缘节点负责处理和分析来自端设备的数据,以减轻中心服务器的负担,降低网络延迟,提高响应速度。边缘计算广泛应用于物联网、智能制造、智能交通等领域。本文所涉及的边缘计算指的是在单片机上计算模型和数据处理。
为了便于初学者理解,建议直接把“边缘”理解为数据采集端,即一些获取传感器数据的单片机
生活与数据
在人工智能和大数据技术蓬勃发展的今天,无数的数据在我们身边产生,他们来自于对环境进行采样的传感器,来自于摄像头捕捉的张张图像,与手机助手对话产生的音频······他们通过网络传输到某台服务器上,这些大量的、无时无刻不在获取的数据作为各种模型的学习数据,构建出多种多样的大模型,天气预测、图像识别、AI对话,他们方便了我们的生活,同样也给我们带来一些问题。
其中最重要也是人们最关心的便是安全性的问题,人们会希望天气预报更加准确,不会介意环境数据的大量采集,但是人们会介意把与智能助手对话产生的数据传输到服务器,即使这样会让语音助手越发智能,很少有人会想看到购物平台上出现了此前与语音助手对话有关的商品。隐私的泄露可能来自于在数据传输中,被破解其加密算法后被有心之人利用,同样可能来自于各公司之间的合作。
为了解决这样的问题,比较好的办法是直接在数据采集的边缘端进行数据处理,通过在边缘部署机器学习等方法,将数据留在本地,保证用户的隐私不被泄露。同样大模型需要进步需要大量数据对其进行优化,本人的思考是:将在本地获取的数据进行随机收集,保证数据的随机性,再在本地进行数据保存并定期上传云端,这样数据产生延迟,破坏了隐私数据的时效性,有心之人利用过时数据来对用户推送以及没有意义了。
放下众多民众会关注的安全性问题,回到我们研究的在微控制器上部署机器学习,还是举个例子:现在我们想预测一台机器会在什么时候坏掉,并在他坏掉之前关机检修。按照常理我们需要收集他运行时产生了怎样的噪音,工作在什么样的温度环境中,当天生产了多少个零件等等,将采集的数据发送给服务器,让服务器学习收集来的数据,当数据趋近于机器损坏的临界值时,返回我们应该关掉机器进行检修的信号,毫无疑问这是可行的,但我们需要非常良好的网络环境,保证大量数据的完整传输,以及稳定的供电保证个传感器工作正常,在工厂中这样的条件不难提供。
引入了这么久终于要进入重点了
但如果我们现在要运输一件贵重的艺术品瓷器,我们如何做呢?
我们要采集运输货车的提速和减速的加速度、转弯的倾斜角度、路面的颠簸程度等,当实时采集的数据预测出货品即将倾覆时修正车辆行驶轨迹。
但是在货车里,网络无法保证非常良好,同时也没有电源提供持续的输出,并且汽车行驶数据更新及其迅速,根本没有网络来回传输数据的时间。
在这样的严苛条件下,在边缘部署机器学习模型就体现出他的作用了,把模型存放在本地,数据采集来源于本地,大大降低传输时延。使用嵌入式微控制器进行数据的处理,也控制住了运行模型时产生的功耗问题,这非常完美!!我们找到了解决办法。
但是如果在本地建立模型,训练模型,执行模型未免也太高估了单片机的实力了,他那小小的ram和flash以及与大模型服务器相差n倍的运算主频,牢牢限制了他无法执行全部的工作。所以我们的方案是在云端建立模型和训练模型,最后只在单片机上执行预测。光说不练假把式,我们动起来吧!
模型建立与训练所需工具
Google的Colaboratory是极好的工具,在免费的云服务器上训练模型,效率比在自己的笔记本电脑上来的快得多,直接打开网址link,首先需要登陆你自己的谷歌账号,接着就可以开始我们的下一步了
1.首先点击左上角新建
2.接着在更多中选择Google Colaboratory
3.稍作等待colab生成,生成后就是这个样子
4.我们可以开始在编辑窗口写下第一个python程序了
在图中可以看到我们成功的在云服务器上运行了第一个python程序
图片中的0秒是运行代码所耗费的时间,[1]是这段代码运行的次数
5.接着完成我们工具的最后一步配置下载所需的库
我们的机器学习代码都是基于tensorflow库编写所以要安装他
输入以下指令然后运行就可以等他自己安装了,只需要等待即可
同时你也可以自行选择不同的安装版本,仅需修改tensorflow==后面的版本号
!pip install tensorflow==2.8.0
6.在这些工作完成后import库如果没有报错便代表安装成功了,准备开始建立我们的第一个模型吧
import tensorflow as tf