【社区分享】从零开始学习TinyML,建⽴TensorFlow 深度学习模型(基础原理篇)
TinyML 是什么?如何⼊门学习?本教程将从介绍 TinyML 基础原理⼊⼿,通过代码实例展⽰,从零开始逐步带你体验使⽤ Keras 训练⼩模型,了解如何构建⼀个完整的基于 TensorFlow 的⼯程系统和深度学习⽹络。⼀起来学习吧!
T inyML 简介
1. 概要
Pete Warden 与 Daniel Situnayake 合著了⼀本介绍在 Arduino 和超低功耗微控制器上如何运⾏ ML 的书, TinyML:Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers,这本书由 O’Reilly 于 2019 年 12 ⽉ 13 号出版。
我作为国内 IoT 和 ML 两个⽅向的 GDE,对 AI 在嵌⼊式系统和物联⽹上的应⽤也⼀直在持续关注。得到书本出版的消息之后,就迫不及待的⼊⼿了⼀本英⽂原板纸质书,看后爱不释⼿,同时也想以书本的概念为原型,把如何去搭建 TinyML 完整的⼯程流程分享给⼤家。
2. ML 以及 TinyML 简介
在阅读本⽂之前,我先简单介绍⼀下 TinyML 。
Machine Learning (ML) 这⼀个学科,在学术界有 40 年左右的历史,但是前⾯的 30 多年研究,只是在学术上有⼀些突破。
unix系统大小真正让 ML 从学界⾛⼊产业界的划时代改⾰的⾥程碑,源于 2010 年 ImageNet 挑战赛 (ILSVRC)。2012 年,Hiton (ML 业界元⽼级⼈物) 课题组⾸次参加 ImageNet 图像识别⽐赛,AlexNet 夺得冠军,并碾压了第⼆名 (SVM) 的分类性能。ML 在⼯业应⽤的热情在这⼀年被彻底点燃。摇数字的app
ML 最近⼏年已经在⼯业、消费领域获得了⼤量的应⽤,随着云资源的不断完善,研发了更多的激动⼈weblogic 11g 不到 路径
⼼的 AI 模型。云端 AI 的应⽤,已经获得长⾜的进步。
在 ML 的⼯业应⽤发展的这⼏年,物联⽹也处于快速处在发展期。从最早的智能家居,到现在遍地的物联⽹智能设备。AI 应⽤逐步从云端⾛向了设备端,现在设备端的 AI 应⽤已经占了很⼤的⽐例,⼿机上 AI 的应⽤已经⾮常普遍。
但是,在物联⽹世界⾥,有数以亿计的体积⼩、功耗低、资源受限的设备⽀撑着物联⽹应⽤。如何在超低功耗 (mV 功率范围) 的设备上运⾏⼈⼯智能应⽤,同时⼜要满⾜设备长时间低功耗的运⾏ AI 应⽤的需求,已经形成了⼀个新的课题。
TinyML 指的是在 mW 功率的微处理器上,实现机器学习的⽅法、⼯具和技术。它连接了物联⽹设备,边缘计算和机器学习。
TinyML 基⾦会在 2019 年组织了第⼀届峰会,这届峰会的成果如下:
1. TinyML 的技术硬件已经进⼊了实⽤性的阶段;
2. 算法,⽹络以及低于 100KB 的 ML 模型,已经取得重⼤突破;
3. 视觉,⾳频的低功耗需求快速增长。
TinyML 将在以后⼏年,随着智能化的发展,获得更快的发展。这⼀领域也有着巨⼤的机会。
3. 书籍作者介绍
Pete Warden 原是 Jetpac 的 CTO 和创始⼈。于 2014 年正式加⼊ Google,现在为移动和嵌⼊式端 TensorFlow 的技术负责⼈(Technical Leader)。需要解释⼀下的是 Jetpac 公司拥有强⼤的分析社交媒体照⽚能⼒,为旅⾏者提供城市指南服务,这家公司在 2014年被 Google 收购。
Daniel Situnayake 曾是 Google 的TensrorFlow Lite 的技术推⼴⼯程师 (Developer Advocate),同时⼀直积极参与 Meetup 上TinyML 社区的⼯作。他也是美国第⼀家以⼯业⾃动化的⽅式⽣产昆⾍蛋⽩质的公司 Tiny Farm 的联合创始⼈。
两位作者中的⼀位侧重于物联⽹上的 AI 技术研发,另⼀位则侧重于运⽤ AI 技术去实现⼯业化,他们强强联合出版了这本书,带我们进⼀步探索物联⽹端 AI 的所有技术环节⼯业化实现,原汁原味的体现了利⽤ Google 的技术去促进发展的思考脉络。
4. 开发环境
python教材下载作为开发环境,我们只需要在电脑上⽤ USB 接⼝实现外设接⼊就⾏了。当然根据每⼀个读者的习惯,可以⽤⾃⼰所熟悉的编译⼯具来编译这个环境,所有的这些代码都可以在 Windows,Linux 或者 mac
OS 上运⾏。当然,已经训练出来许多模型在 Google Cloud 中可以下载。也可以⽤ Google Colab 来运⾏所有的代码。就不必要去担⼼需要拥有独特的硬件开发环境。
推荐使⽤⼤概 $15 可以买到的 Spark Fun Edge 开发板。由于在这本书发布的时候。Spark Fun 的第 2 版已经开发出来了,并可⽀持运⾏所有的⽰例项⽬。读者对硬件开发板的硬件版本兼容性亦⽆需太多担⼼。
当然,也有另外两款开发板的⽀持:Arduino Nano 33 BLE 和 STM32F746G 开发板,开发者可以根据⾃⼰的需求灵活选⽤。
我们这⼀系列主要分享如何⽤ Arduino Nano 33 BLE 开发板运⾏最简单的⽰例代码。
5. 软件准备
这本书所有的是依赖于 TensorFlow Lite 在微控制器上的开发框架,所依赖的硬件环境,只有⼏⼗ kb 左右的存储空间。
我们也知道,对于开源软件来说,由于软件不断的更新,包括优化,bug 修改以及其他设备的⽀持,造成代码⼀直在不断的变动。或许书中举出例⼦的代码跟 Github 的代码不太⼀致,但是最基本的原则是相通的。
在软件开发中间,我们也可以选择适合⾃⼰的 IDE 开发⼯具。但是由于我(⾮原书作者,是本⼈)已经⽤于 Linux 很多年,是 Vim 的死忠粉,所以我后⾯给⼤家介绍的内容全部是基于 Vim+ 终端的模式进⾏讲解。如果涉及到开发⼯具相关的问题,欢迎在本⽂末留⾔,我们⼀起讨论。关于命令的运⾏,在 Linux 和 macOS 中,我们很轻易的⽤终端。在 Windows 系中,可以⽤命令⾏⼯具去解决开发问题。
嵌⼊式开发另外⼀个问题就是需要和开发板进⾏通讯。如果⽤ Spark Fun 开发板,需要⽤ Python 命令来做项⽬的编译,如果⽤ Arduino 开发板,只需要在 Arduino 的开发环境中,加载开发包就可以了。
6. 机器学习⼯程化流程
整个机器学习⼯程部署的⼤体流程如下:
1. 确定⽬标
2. 收集数据集
3. 设计模型架构
4. 训练模型:注意⼀下过拟合和⽋拟合所产⽣的各种问题
5. 转换模型
6. 运⾏推断
7. 评估并排除故障
⼯程流程⼀般都是基于以上的步骤进⾏部署的。在下⼀章中,我们将⽤学习任何语⾔的经典⼊门 “Hello World”,来阐述基于项⽬的TinyML ⼯程开发流程。
He llo Wor ld — 梦开始的地⽅(上)
Hello World 是每⼀个程序员进⼊程序世界,学说的第⼀句话。它的意义并不在于可以以⼀种特殊的⽅式去输⼊⼀串字符,⽽在于⽤⼀句简单的话,去了解最基本的流程,为⾃⼰的新世界打开⼀扇⼤门。
我们将 “Hello World — 梦开始的地⽅”分为上、中、下,三个部分来讲述如何去构建⼀个完整的、可以运⾏的、基于 TensorFlow Micro 的⼯程系统。其中上篇是⼿把⼿教开发者如何去建⽴并且训练模型,中篇主要讲解如何创建⼯程应⽤,下篇主要是讲解如何把⼯程部署到微控制器上。
事不宜迟,我们赶紧进⼊上篇吧。
1. 环境准备
项⽬在三个不同的开发板上都可以正常运⾏,我们以 为硬件,来实现基于 TensorFlow 的 ML 项⽬。
2. 项⽬流程
实现基于微控制器的 ML 项⽬开发流程如下所⽰:
1. 获得简单数据集
2. 训练深度学习模型
3. 评估模型性能
4. 转换成设备上运⾏的模型
tangled5. 将代码转换成⼆进制⽂件
6. 部署⼆进制⽂件到微控制器
⽂章中所有的代码都基于 上的代码。当然,代码中也包括许多注释,我们会⼀⼀的分析代码中的最关键的部分以及为何要这么实现。
3. 准备前的⼯作
我们分享的 Hello World ⽰例,是⽤数学中的最基本的sine函数为原型,⽤ ML 的⽅式去预测数据。关于 sine 函数,我们在初中学三⾓函数时就接触过。这个函数在⼯业应⽤中⾮常⼴泛。⼀般的函数图形如图所⽰:
我们的⽬标是,如果有⼀个 x 值,我们能够预测出 x 的 sin 值 y。在真实的环境中,⽤数学计算的⽅法可以更快速的得到结果。这个例⼦是⽤ ML 的⽅法去实现预测,从⽽了解 ML 的整个流程。
整从数学⾓度来看,sine 函数能够在 -1 到 1 之间,周期性的平滑波动。我们可以⽤这种平滑的值,来控制 LED 灯光的亮度。
利⽤ Arduino 开发板运⾏这个项⽬的效果如图所⽰:
⼯具准备:
配置开发环境,所⽤的编程语⾔当然是当之⽆愧的 Python,这是现在使⽤最⼴泛的,运⽤于科学、数学、以及 AI 领域的编程语⾔。版本为 3.x Python 可以在命令⾏下运⾏,但是还是推荐⽤ Jupyter Notebook 来开发,它的好处是可以把代码、⽂档、还有图⽚放在⼀起,既能当教程,⼜能分步运⾏。
如果有条件上 Google Colab,这个编译环境也是⼀个很好的选择。Colab ⼀直是由 Google 开发并维护的平台,并且在云平台上,已经安装了各种依赖软件。并且还可以免费去⽤ Google TPU 的服务。通过 Web 浏览器,可以运⾏⾃⼰编写的任何代码。甚⾄可以⽤ Colab 的配置⽂件,来选择加速硬件,从⽽加速模型训练。
ML 平台的选择,毫⽆疑问,选择 TensorFlow。因为 TensorFlow 是现在使⽤最⼴泛的AI加速平台,并且有成熟的 pip 安装包可以⽤。当然,在接下来的应⽤中,我们需要⽤ TensorFlow Lite,能得模型在嵌⼊式硬件上运⾏,我们也会⽤ TensorFlow 的⾼阶 API,Keras 来完成⼀些编程⼯作。
4. 创建模型
当然,如果在 Google Colab 上运⾏项⽬,可以直接运⾏。
网页轮播图素材我们就在本地以 Jupter notebook 的⽅式,运⾏我们的代码。我是以 git clone 的⽅式下载了 TensorFl
ow 的所有源码,从本地的 Linux 命令⾏进⾏操作。由于我运⾏环境的 Linux 系统,已经安装了所有的依赖软件,所以在 Jupter 的环境中,涉及到 Linux 中相关的 pip 安装和 apt 安装的代码都注释掉了。
⾸先运⾏ Jupyter:
启动之后弹出 chrome 浏览器,内容如图所⽰:
其中需要注意的是,在右上⾓的区域,如果提⽰不受信任,点击“不受信任”的⽂字,按提⽰操作,最终⽂字变成“信任”。如果说右上⾓区域 Python 版本为 2,那么需要在 Jupyter 的菜单栏中,Kernel Change Kernel 中选择 Python 3。
当然,代码的第⼀步是导⼊ TensorFlow、Numpy、Matplotlib 以及Math 库。其中 Numpy ⽤于数据处理。Matplotlib ⽤于数据的可视
化。
其实在代码中,我注释掉了 #!pip install tensorflow==2.0.0-beta0 这⼀⾏,原因是因为我的 PC 机已经安装完了 TensorFlow 的最新版。
5. 产⽣数据
⾸先基于 sin 函数产⽣⼀系列的标准化数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论