MCU嵌入式AI开发笔记-视频笔记同步更新01~14集 7月2日更新到第14集

MCU嵌入式AI开发笔记
搜索柔贝特三哥,笔记视频同步更新

01嵌入式AI大的方向

STM32跑神经网络

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的AI工具链NANO.AI。

它主要包含两部分,一部分是将原始算法模型转换成MCU上能够快速运行的数据和库,另一部分包含一个轻量级推理引擎,能做出一个能跑在MCU上、只需几兆Flash甚至几兆SDRAM的方案。
目前,恩智浦已经推出了带有AI功能的MCU产品,MCX N系列是恩智浦集成NPU的第一个产品家族,MCX N94x和MCX N54x MCU系列中集成了恩智浦设计的用于实时推理的专用片上神经处理单元 (NPU)。据悉,与单独使用 CPU内核相比,片上NPU的ML吞吐量最高可提高 30 倍

TinyMaix RT-Thread

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成本减低

TinyML

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. 项目流程
    实现基于微控制器的 ML 项目开发流程如下所示:
  2. 获得简单数据集
  3. 训练深度学习模型
  4. 评估模型性能
  5. 转换成设备上运行的模型
  6. 将代码转换成二进制文件
  7. 部署二进制文件到微控制器

MCU AI部署技术和方法

作者 李冬冬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部署方案的过程和工作内容基本相同。可以概括为三步:训练验证模型、模型转换、生成二进制程序并部署。

CMSIS-NN与TensorFlow Lite

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落地的方法鲁 冰 (《电子产品世界》编辑)》

02 TinyML学习

官网学习

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开发笔记

03 Tensorflow lite micro学习

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

TensorFlow Lite tensorflow.google.cn/lite 学习

指南

开发工作流程
以下指南介绍了该工作流程的每个步骤,并提供了进一步说明的链接:
注意:若要让性能、模型大小和准确率达到理想的平衡状态,请参阅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

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当面试MCU嵌入式软件的岗位时,以下是一些可能的面试题及其答案: 1. 什么是MCU嵌入式软件? MCU嵌入式软件是指在微控制器单片机上运行的软件,用于控制和管理硬件设备的操作。它通常包括底层驱动程序、中间件和应用程序。 2. 请介绍一下你在嵌入式软件开发方面的经验。 回答时可以提及你在嵌入式软件开发方面的项目经验、使用的编程语言和开发工具,以及你在解决实际问题和优化性能方面的能力。 3. 你熟悉的MCU架构有哪些? 回答时可以提及常见的MCU架构,如ARM Cortex-M系列、PIC、AVR等,并说明你对这些架构的了解程度和使用经验。 4. 请介绍一下你在嵌入式软件开发中常用的编程语言。 回答时可以提及C语言作为嵌入式开发的主要语言,以及其他可能使用的语言如汇编语言、C++等,并说明你对这些语言的熟悉程度和使用经验。 5. 你在嵌入式软件开发中遇到过哪些挑战,如何解决的? 回答时可以提及你在处理实时性要求、资源限制、功耗优化等方面遇到的挑战,并说明你采取的解决方案和取得的成果。 6. 请介绍一下你在嵌入式软件开发中常用的调试工具和技术。 回答时可以提及使用调试器、逻辑分析仪、示波器等硬件工具,以及使用断点、志输出、仿真器等软件技术进行调试。 7. 你在嵌入式软件开发中如何进行单元测试和成测试? 回答时可以提及使用单元测试框架、模拟器、仿真器等工具进行单元测试,以及使用成测试平台和硬件实验室进行成测试。 8. 请介绍一下你对软件优化和性能调优的理解和经验。 回答时可以提及你对代码优化、算法优化、资源管理和功耗优化等方面的理解和实践经验。 9. 你在嵌入式软件开发中如何处理实时性要求? 回答时可以提及使用中断、定时器、任务调度器等技术来满足实时性要求,并说明你在处理实时任务和中断冲突方面的经验。 10. 请介绍一下你对软件工程和软件开发流程的理解。 回答时可以提及你对需求分析、设计、编码、测试和维护等软件开发流程的理解,以及你在项目中遵循的软件工程原则和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柔贝特三哥

你的鼓励是我坚持创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值