说到tinyML不得不说起「TinyML Machine Learning with TensorFlow Lite on Arduino and Ultra-Low-Power Microcontrollers」一书的作者Pete Warden,他应该是最早将这个概念整理成书的作者(2020/1/7 初版),并且在Youtube上也有多段影音教学影片(如文末参考连结【TinyML Playlist】)。目前这本书也有中文译本在台发售,碁峯於2020/7/31出版,书名「tinyML TensorFlow Lite机器学习 应用Arduino与低耗电微控制器」,如Fig. 12-1所示。
Fig. 12-1 TinyML经典入门书及作者Pete Warden。(OmniXRI整理绘制, 2021/9/26)
「TinyML」中文版书中对两位作者的介绍:
Pete Warden 是行动及嵌入式TensorFlow的技术主管,也是TensorFlow团队的创始成员之一。他曾经是Jetpac的CTO和创始人,该公司在2014年被Google收购。
Daniel Situnayake 是Google的首席开发布道师,并且协助运作tinyML聚会小组。他也是Tiny Farms的共同创办人,Tiny Farms是美国第一家大规模自动生产昆虫蛋白的公司。
相信可能很多人第一次接触tinyML应该都是跟着这本书来实作和练习,但说实在的,步骤有点多,有很多开发环境要设置,所以对於新手会有些吃力,因为除了AI部份外,还有MCU部份要处理。好在AI的世界进步速度颇快,才过了一年多,就有了不少改进,简化了不少。接下来就让我们跟着Google官网「TensorFlow Lite for Microcontrollers」(以下简称TFLM)的说明来实际操练一下。
什麽是TFLM呢?一般大家在开发深度学习模型时多半会使用Google TensorFlow框架,但到了手机或单板微电脑(如Arm Cortex-A, Cortex-R或树莓派Cortex-A53/A57等)时代,这样的框架太大塞不进这些系统中,於是Google又推出TensorFlow Lite,它不仅更短小精悍,同时还提供的模型优化工作,使得在推论准确率只损失数个百分点甚至几乎没有损失的情况下,让模型缩小十倍以上,不仅更容易塞进这些开发板,同时加快了推论速度。不幸地是,当遇到像MCU(Cortex-M)等级的开发板时,又遇到塞不进的问题,所以Google才会再推出TensorFlow Lite for Microcontroller。表面上名字很像Lite,但实质上为了牵就MCU的开发架构,因此本质上有很大不同,无法直接取代。原则上这些都是开源码,有兴趣研究原始码的朋友可参考文末参考连结【TFLM Github开源码】。另外目前TFLM可支援的开发板可参考[Day 03] tinyML开发板介绍的说明。
接下来就跟着Google TFLM的「Hello World」来建立基本操作观念。这个范例主要分成两个部份,如下所示。
首先点击Google提供的Colab范例程序,免下载,可直接运行,Jupyter Notebook操作环境,说明文字和程序一起存在,方便学习,只需在每个程序栏位左上角按下黑色箭头(或者点想执行的栏位按Ctrl + Enter亦可)即可单步执行,但切记要按照顺序把每个步骤都执行完,不能跳过任何一步骤。由於开启後会看到先前运行结果都被保留在执行结果栏位,为了更清楚看到所有动作,可执行主选单的[编辑]─[清除所有输出栏位],将所有输出栏位清除。
首先说明这个「Hello World」程序主要想展示如何将一个TensorFlow建立好的模型转换到TFLM,为了方便说明,并没有使用现成常用的资料集,而是以正弦波加乱数方式产生一个资料集,然後训练出一个模型(正弦波函数),使得输入X位置就能推论出Y位置。
接下来就快速摘要一下整个程序在做什麽?程序部份请参考原始程序,这里仅作重点摘要及补充说明,方便大家更容易理解。程序运作後产生的相关图表可参考Fig. 12-2。
Fig. 12-2 TensorFlow Lite for Microcontroller Hello Wolrd范例相关图示。(OmniXRI整理制作, 2021/9/26)
参考连结
Google TensorFlow Lite for Microcontrollers 中文学习指南
Pete Warden Youtube, TinyML Book Screencasts Playlist 影片清单
TensorFlow Lite for Microcontrollers Github 开源码
TFLM Get started with microcontrollers, The Hello World example
Experiments with Google = TensorFlow Lite for Microcontrollers 案例分享
<<: 【day12】InvitationDetailFragment
更多会员限定文章可以到patreon观看 WSLg + Snap 如果清除/snap後还是不能mou...
前言 昨天谈到敏捷的重点是其背後的精神,而 Scrum 也不例外,但为什麽 Scrum 的导入还是这...
上一篇大略的说明了 function 的两个大类别,这里试着放比较多的简易操作实例。 注册多组函式 ...
上一篇内部稽核讲到 5. 监督作业:进行下列监督作业,以确定本制度之有效性、及时性及确实性: (1)...
首先,尽然要传值,就要有两个页面才能使其中一页的值传至另一页面,所以我们要先准备好两个xib。 当然...