赞
踩
MCU嵌入式AI开发笔记
搜索柔贝特三哥,笔记视频同步更新
http://news.eeworld.com.cn/mp/EEWorld/a134877.jspx
为什么可以在STM32上面跑神经网络?简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化,以支持在嵌入式设备上使用,目前使用X-Cube-AI需要在STM32CubeMX版本5.0以上,支持转化的模型有Keras、TFlite、ONNX、Lasagne、Caffe、ConvNetJS。Cube-AI把模型转化为一堆数组,而后将这些数组内容解析成模型,和Tensorflow里的模型转数组后使用原理是一样的。
它主要包含两部分,一部分是将原始算法模型转换成MCU上能够快速运行的数据和库,另一部分包含一个轻量级推理引擎,能做出一个能跑在MCU上、只需几兆Flash甚至几兆SDRAM的方案。
目前,恩智浦已经推出了带有AI功能的MCU产品,MCX N系列是恩智浦集成NPU的第一个产品家族,MCX N94x和MCX N54x MCU系列中集成了恩智浦设计的用于实时推理的专用片上神经处理单元 (NPU)。据悉,与单独使用 CPU内核相比,片上NPU的ML吞吐量最高可提高 30 倍
https://m.elecfans.com/article/2302927.html
TinyMaix:是矽速科技(Sipeed)利用两个周末的业余时间完成的项目,它是一款专为微控制器设计的轻量级开源机器学习库,面向单片机的超轻量级的神经网络推理库,即TinyML推理库,可以让你在任意单片机上运行轻量级深度学习模型。TinyMaix开源代码链接:https://github.com/sipeed/tinymaix。
TinyMaix作者已经做了一个RT-Thread的软件包r-tinymaix。可以在RT-Thread中工程中加入软件包即可以验证TinyMaix非常赞,可以让一个普普通通的单片机拥有AI能力,让嵌入式AI成本减低
https://www.tinyml.org/
https://blog.csdn.net/wfing/article/details/106995562
https://yucheng.blog.csdn.net/article/details/107183870
TinyML 指的是在 mW 功率的微处理器上,实现机器学习的方法、工具和技术。它连接了物联网设备,边缘计算和机器学习。
TinyML 基金会在 2019 年组织了第一届峰会,这届峰会的成果如下:
TinyML 的技术硬件已经进入了实用性的阶段;
算法,网络以及低于 100KB 的 ML 模型,已经取得重大突破;视觉,音频的低功耗需求快速增长。
TinyML 将在以后几年,随着智能化的发展,获得更快的发展。这一领域也有着巨大的机会。
我该如何开始?
硬件: Arduino Nano 33 BLE Sense是用于在边缘部署机器学习模型的建议硬件。它包含一个运行频率为 64MHz 的 32 位 ARM Cortex-M4F 微控制器,具有 1MB 程序存储器和 256KB RAM。该微控制器提供足够的马力来运行 TinyML 模型。Arduino Nano 33 BLE Sense 还包含颜色、亮度、接近度、手势、运动、振动、方向、温度、湿度和压力传感器。它还包含一个数字麦克风和一个低功耗蓝牙 (BLE) 模块。该传感器套件对于大多数应用来说已经足够了。
机器学习框架:只有少数框架可以满足 TinyML 的需求。其中,TensorFlow Lite最受欢迎且拥有最多的社区支持。使用 TensorFlow Lite Micro,我们可以在微控制器上部署模型。
学习资源:由于TinyML是一个新兴领域,目前的学习资料并不多。但也有一些优秀的材料,例如 Pete Warden 和 Daniel Situnayake 的书“TinyML:在 Arduino 和超低功耗上使用 TensorFlow Lite 进行机器学习”、哈佛大学 Vijay Janapa Reddi 的 TinyML 课程以及 Digikey 关于 TinyML 的博客和视频。
这本书所有的项目是依赖于 TensorFlow Lite 在微控制器上的开发框架,所依赖的硬件环境,只有几十 kb 左右的存储空间。
项目
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro
原文链接:https://blog.csdn.net/wfing/article/details/106995562
文章中所有的代码都基于 TensorFlow Micro 上的代码。当然,代码中也包括许多注释,我们会一一的分析代码中的最关键的部分以及为何要这么实现。
TensorFlow Micro
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro
原文链接:https://blog.csdn.net/wfing/article/details/106995562
作者 李冬冬1,林金龙2
Peter Warden等口1通过7步将TensorFlow I。ite框架深度网络模型部署在MCU上,成功在MCU上实现推理功能。图1是PeterWarden等在MCU上部署深度网络模型的步骤。其中步骤①~③是在服务器和PC上训练和验证深度模型;步骤④将已经验证源程序集成到工程中,生成可以在MCU上运行的二进制程序。
Bharath Sudharsan等提m资源受限的神经网络(Resource Constrained Edge.Neu—
ral Networks RCE—NN)01j设计流程.将在MCU上部署深度网络模型的过程分为5步:①构建并训练模型,确定模型大小、负载、操作和量化方式;②在可接受的精度损失前提下。进行模型转换和量化。降低模型大小,节省内存.降低计算需求;③将模型的量化版本转换为c语言数组,并将数组与应用主程序融合;④
构建二进制可执行程序文件;⑤将构建的二进制可执行程序文件写入MCU的Flash上,完成模型部署。
在ST[11方案中。将在MCU上部署深度网络模型的过程分为5步:获取数据、清洗数据和构建深度网络模型、面向MCU进行模型转换和优化、对转换和优化后的模型进行再训练和分析、利用开发工具将模型转换成C源程序并生成二进制文件。Renesas“将过程分为4步:利用深度学习框架构建和训练模型、模型转换、模型验证,以及在MCU上实现推理
在RCE—NN“方案中.第1步对应于图1中的步骤①~③。第2步与网1中的步骤④相对应。第3~5步与图1中的步骤⑤~⑦的内容相同。在ST卅方案中。第1~4步与图1中的步骤①~④相同,第5步实现图1中步骤⑤~⑦的功能。在Renesas[_”方案中,第1步对应于图1中的步骤①~③.第2和3步对应于图l中的步骤④,第4步对应于图l中的步骤⑤~⑦。
可见。不同MCU AI部署方案的过程和工作内容基本相同。可以概括为三步:训练验证模型、模型转换、生成二进制程序并部署。
Arm在中间做了一个标准化的接口优化。上面直接去对接算法,下面去对接具体的硬件。这就把AI机器学习当做是一个以前的通讯库,或者是API来用,就可以了。图4是具体应用的流程。CMSIS-NN在ortex-M
上来实现的软件库 , 是 在2018年1月发布的,是开源的 , 你可以看到所有源代码,因此不会存在安全、自主可控的困惑。
片分别是Cortex-M4和Cortex-M33的芯片 , 在 做 CIFAR-10 时 ,TensorFlow Lite(注:Google
提供的嵌入式版本的CNN模型)用约120 ms才能完成某个识别;CMSIS-NN只需要20 ms左右。CMSIS-NN一直在更新,基本上每个季度有优化版。-《Arm MCU在边缘AI落地的方法鲁 冰 (《电子产品世界》编辑)》
https://www.tinyml.org/
https://www.tinyml.org/news/tinyml-deployment-working-group-white-paper
有一个开源项目
https://github.com/edgeimpulse/firmware-syntiant-tinyml
看了半天也没看到有用的学习资料,之后有一片文档:
《TinyML in 2024: Machine Learning at the Edge》https://research.aimultiple.com/tinyml/
提到了How to implement TinyML?
There are a couple of machine learning frameworks that support TinyML applications. These are:
也就是TensorFlow Lite支持TinyML,所以重点要研究TensorFlow Lite
●https://www.tensorflow.org/lite
●https://pytorch.org/mobile/home/
●https://www.edgeimpulse.com/
If you want to read more on analytics and computing on edge devices, check our articles:
●https://research.aimultiple.com/edge-analytics/
●https://research.aimultiple.com/iot-analytics/
MCU嵌入式AI开发笔记
https://www.tensorflow.org/lite/microcontrollers
https://github.com/tensorflow/tflite-micro
首先我们把代码下载下来。
$ git clone https://github.com/tensorflow/tflite-micro.git
之后有几个网站,逐一学习了解:
1、https://tensorflow.google.cn/lite?hl=sv
2、https://github.com/tensorflow/tflite-micro
开发工作流程
以下指南介绍了该工作流程的每个步骤,并提供了进一步说明的链接:
注意:若要让性能、模型大小和准确率达到理想的平衡状态,请参阅https://tensorflow.google.cn/lite/performance/best_practices?hl=sv指南。1. 创建 TensorFlow Lite 模型
TensorFlow Lite 模型以名为 https://google.github.io/flatbuffers/ 的专用高效可移植格式(由“.tflite”文件扩展名标识)表示。与 TensorFlow 的协议缓冲区模型格式相比,这种格式具有多种优势,例如可缩减大小(代码占用的空间较小)以及提高推断速度(可直接访问数据,无需执行额外的解析/解压缩步骤),这样一来,TensorFlow Lite 即可在计算和内存资源有限的设备上高效地运行。
TensorFlow Lite 模型可以选择包含元数据,并在元数据中添加人类可读的模型说明和机器可读的数据,以便在设备推断过程中自动生成处理前和处理后流水线。如需了解详情,请参阅https://tensorflow.google.cn/lite/convert/metadata?hl=sv。
您可以通过以下方式生成 TensorFlow Lite 模型:
使用现有的 TensorFlow Lite 模型:若要选择现有模型,请参阅 https://tensorflow.google.cn/lite/examples?hl=sv。模型可能包含元数据,也可能不含元数据。
创建 TensorFlow Lite 模型:使用 https://tensorflow.google.cn/lite/guide/model_maker?hl=sv,利用您自己的自定义数据集创建模型。默认情况下,所有模型都包含元数据。
将 TensorFlow 模型转换为 TensorFlow Lite 模型:使用 https://tensorflow.google.cn/lite/convert/index?hl=sv 将 TensorFlow 模型转换为 TensorFlow Lite 模型。在转换过程中,您可以应用https://tensorflow.google.cn/lite/performance/post_training_quantization?hl=sv等https://tensorflow.google.cn/lite/performance/model_optimization?hl=sv措施,以缩减模型大小和缩短延时,并最大限度降低或完全避免准确率损失。默认情况下,所有模型都不含元数据。
2. 运行推断
推断是指在设备上执行 TensorFlow Lite 模型,以便根据输入数据进行预测的过程。您可以通过以下方式运行推断,具体取决于模型类型:
不含元数据的模型:使用 https://tensorflow.google.cn/lite/guide/inference?hl=sv API。在多种平台和语言(如 Java、Swift、C++、Objective-C 和 Python)中均受支持。
包含元数据的模型:您可以使用 https://tensorflow.google.cn/lite/inference_with_metadata/task_library/overview?hl=sv以利用开箱即用的 API,也可以使用 https://tensorflow.google.cn/lite/inference_with_metadata/lite_support?hl=sv构建自定义的推断流水线。在 Android 设备上,用户可以使用 https://tensorflow.google.cn/lite/inference_with_metadata/codegen?hl=sv#mlbinding 或 https://tensorflow.google.cn/lite/inference_with_metadata/codegen?hl=sv#codegen 自动生成代码封装容器。仅在 Java (Android) 中受支持,我们正在努力使其在 Swift (iOS) 和 C++ 中受支持。
在 Andro
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。