在微控制器上部署模型-基于ESP32S3

首先讲一下我自己的整个经过,不想看到可以直接跳到标题处。

我先将在电脑上训练的pytorch模型转换成了ONNX格式的模型,再经过开源的工具转换成了c语言代码,再编译进了项目里,最后部署到了RV1126里,如下是效果图,

599a0d5d0f224973942b42dd71cf30e6.png

 

这是训练了一个ai贪吃蛇,能够保证在吃的足够多的情况下自主的吃豆子,接下来我用同样的方式将该模型部署到esp32s3上,结果发现模型每运行一次需要3s,这个运行速度是完全不行的,后来了解到要对模型优化才能够部署到mcu上,有多种方式优化,我最终选择的是对模型进行量化,量化就是将浮点型数据量化为整形数据,比如32位浮点型量化位8位的整形,从存储空间上来说就缩小了4倍,再说运行速度,MCU处理8位整型也是要比32位浮点型要快的。然后我先对转换后的ONNX格式的模型进行量化,结果发现量化后无法通过onnx转c语言的工具正确识别,然后我又先对pytorch格式的模型先量化再转换成ONNX格式,发现还是不行,由于我是刚接触ai,对这些不太熟悉,无法去修改,找了其它的开源项目也没有办法,3秒的时间又无法接受,可以想象一下贪吃蛇每3s移动一下的画面,所有就先搁置了。

后面过了一段时间发现了tensorflow lite的项目,官方有pytorch转tflite的工具,而且乐鑫也有对tflite支持的库,并且用到了自身的esp-nn库,硬件加速ai,我就试了一下,最后将tflite格式部署到esp32s3上,运行一次的速度要1s(不清楚有没有实际启用esp-nn),这个速度比之前onnx快了2s,但还是有点慢,接下来我就对tflite量化,问题就出现在这里了,tflite格式的模型不支持量化,只能在转换为tflite前量化,我就先对pytorch量化,在转换tflite的过程中报错,看不懂报错说明,而且我也认为量化要用自己的架构会更好,只能换另一种方式,先将pytorch转换成tensorflow模型再量化,结果在这里卡了好久,在网上找的工具转换时各种报错,最后多次尝试后终于解决了,总结下就是pytorch先转换为ONNX,再转换为tensorflow,之后再量化,在量化途中就直接转换为tflite格式,最终运行一次的速度为100ms,搞定了,这是目前已经可以接受的速度。

下面就详细的讲一下过程。

<
### ESP32部署大型机器学习模型的方法 对于资源受限设备如ESP32而言,直接在其上部署大型机器学习模型面临诸多挑战。然而,通过特定的技术手段仍然可以在一定程度上实现这一目标。 #### 模型优化与压缩 为了适应ESP32有限的内存和计算能力,在将大型模型部署之前通常需要对其进行优化处理。这包括但不限于量化、剪枝等技术来减小模型体积并提高推理效率[^1]。 #### 使用TensorFlow Lite Micro框架 针对微控制器平台设计的TensorFlow Lite Micro提供了轻量级解决方案用于嵌入式系统的深度学习应用开发。借助此工具链可方便地把预训练好的神经网络转化为适合于ESP32执行的形式,并简化了整个工作流程中的多个环节,比如模型转换过程不需要额外编写复杂的编译脚本就能完成从高级语言描述到能在硬件平台上高效运行的目标文件转变[^2]。 #### 转化为C/C++代码片段 除了利用现有的库外,还可以考虑采用专门为此目的而生的工具——`micromlgen`。它能够自动将Python下的scikit-learn分类算法映射成可以直接嵌入Arduino项目的源码形式,从而绕过了传统意义上较为繁琐的人工编码阶段;不过需要注意的是这种方法主要适用于某些类型的监督学习任务而非通用的大规模深度神经结构[^3]。 ```cpp // 示例:加载TFLite模型ESP32 #include "tensorflow/lite/micro/all_ops_resolver.h" #include "tensorflow/lite/micro/micro_interpreter.h" const tflite::Model* model = nullptr; tflite::MicroInterpreter interpreter(model, resolver); TfLiteStatus allocate_status = interpreter.AllocateTensors(); if (allocate_status != kTfLiteOk) { // 错误处理逻辑... } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值