赞
踩
TensorFlow Lite是Tensorflow库中针对像笔记本、手机、树莓派、FPGA等边缘设备而设计的机器学习库,而TensorFlow Lite Micro则更加轻量级,专门针对microcontroller(MCU,即单片机)。我们生活中常见的AI都是基于云计算,就是得联网,由远处的服务器运算好了结果再将结果发回边缘设备,而TensorFlow Lite Micro的出现使得边缘的MCU能自主进行机器学习运算,即智能化,这是非常不可思议的。如今全球MCU已经部署超过2000亿,数量将继续指数级上升。如果这些边缘传感器都能运行机器学习算法,升级为智能传感器,AIoT和边缘计算将更加普及,整个世界将更加智能。
一个常规的ML模型包括以下功能:
Data loading、Scripting Interface、Cloud Serving、Metric Visualizer、Model Optimization、Labeling Tools、Feature Generation、Training Loop、Variable Storage、Distributed Compute、Math Library。
(数据加载,脚本接口,云服务,度量可视化工具,模型优化,标签工具,特征生成,训练循环,变量存储,分布式计算,数学库)
看着都很多很复杂对不对,看着就很占内存,事实确实如何,很多google的工程师之前也尝试过,结果表明正常训练好的tensorflow模型对于资源受限的边缘设备来说太大了,构建所需要的所有依赖关系和优化这么大的代码库是痛苦而困难的,即使这个模型大小合适,还有一系列的导出问题。为了缩小模型,我们可以删除反向传播、数据加载、特征生成组件等功能,将变量转换为常量,模型优化等等。
最终google实现了利用tensorflow lite使得手机或MCU上的ML框架只有:Math Library,为导入MCU增添了可能,但是还是有很多挑战。
将正常model转入MCU中面临很多挑战:
所以编写一个将大型model转换为小型的运行在边缘端的model的转换器将会非常困难,我们需要在训练之前就做好相对应的对策。
一个tensorflow训练好的模型会按一下步骤转换为TFLite模型
在python中转换的代码就两行:
上面简单的两行代码里完成了这些操作:
在手机上,我们可以使用flatbuffer,一个超轻量的序列表示工具。(需要文件系统)
嵌入式设备通常没有文件系统,所以我们将文件转换为C数据数组,并将其编译为可执行文件。我们使用Linux命令xxd来完成这个转换:
主要是靠tensorflow lite里面的interpreter(解释执行器),针对移动小型设备专门优化、更少的依赖库、文件更小、快速加载、静态内存规划、静态执行规划。它会为model分配所需的空间(空间由我们自己定义,如果太小会报错)、循环文件中的操作、调用invoke函数等等。
还有kernal和registration等操作,大家可以去arduino里装一个tensorflowlite的库,找个实例看看,百来行的代码,很快就上手。
如果想体验基于tensorflow lite实现嵌入式机器学习,可以去康康我的另一篇 最简单体验TinyML、TensorFlow Lite。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。