游乐游手机版
首页/AI热点日报/热点详情

STM32与Arduino卷积神经网络实现教程

类型:热点整理2026-08-02
TensorFlowLiteMicro(TFLM)专为资源受限的嵌入式系统设计,通过解释器方案实现深度学习模型部署。开发需依次创建算子解析器、分配连续内存、编译初始化、执行推理并获取输出。利用EloquentTinyML库可无缝部署模型至STM32和Arduino平台。

本教程将带您深入探索 TensorFlow Lite Micro(TFLM)—— 一款专为资源受限的嵌入式系统打造的机器学习推理框架。从基础原理到实际部署,我们将逐步解析如何将深度学习模型运行在微控制器上,让 TinyML 从概念走向落地。

01 前言

通常情况下,实用的机器学习算法需要耗费大量计算资源,包括 CPU 运算周期和内存占用。不过,TensorFlow Lite 近期推出了一个实验版本,能够在多款微控制器上运行。如果我们能构建出适配资源受限设备的模型,就可以将嵌入式系统改造为小型机器学习(TinyML)设备。

TensorFlow Lite Micro(简称 TFLM)是一款开源机器学习推理框架,专门为在嵌入式系统上运行深度学习模型而设计。由于嵌入式系统面临资源受限的挑战,且碎片化严重,导致跨平台互操作性几乎难以实现,而 TFLM 恰好满足了对效率的严苛要求。该框架采用基于解释器的设计方案,既能克服这些独特难题,又能提供良好的灵活性。

图 1:一个包含两层的简易深度学习网络示意

02 开发

开发 TFLM 应用需遵循清晰的步骤,每一步都针对嵌入式设备的特殊性进行了优化。下面展开详细说明。

步骤一:创建算子解析器

第一步是在内存中创建一个有效的神经网络模型对象。应用开发者通过客户端 API 创建一个 “算子解析器”(operator resolver) 对象。该 “算子解析器”(OpResolver)API 负责控制最终二进制文件所包含的算子,从而最大限度减小文件体积。

步骤二:分配连续内存区域

第二步是提供一块连续的内存 “区域”(arena),用于存储解释器所需的中间结果及其他各类变量。这一步必不可少,因为嵌入式设备默认不支持动态内存分配

步骤三:编译示例并初始化

第三步是创建一个编译示例,并将模型、算子解析器和内存区域作为参数传入。编译器会在初始化阶段,将运行所需的所有内存分配到该内存区域中。我们避免使用任何动态内存分配,以防止栈碎片化导致长期运行的应用程序出现错误。触发式应用可在模型评估阶段分配所需内存,因此此时会调用算子初始化函数,并将占用的内存转移至解释器。应用程序提供的算子解析器(OpResolver)会将序列化模型中列出的算子类型,映射到对应的执行函数。C 语言 API 调用负责管控解释器与算子之间的所有通信,确保算子的实现具有模块化特性,且独立于解释器的内部细节。这种设计不仅让开发者能轻松将算子执行器实现替换为优化版本,还能更方便地复用其他系统的算子执行库(例如,作为代码生成项目的一部分)。

步骤四:执行模型推理

第四步是执行阶段。应用程序先获取指向模型输入的内存区域指针,然后为其填充数据(这些数据通常来自传感器或其他用户提供的输入)。输入数据准备就绪后,应用程序调用解释器来执行模型计算。该过程包括:遍历按拓扑顺序排序的算子、利用内存规划阶段计算得到的偏移量定位输入与输出数据、以及为每个算子调用对应的评估执行函数。

步骤五:获取输出结果

最后,当所有算子评估执行完成后,解释器将控制权交还给应用程序。大多数微控制器(MCU)采用单线程架构,依靠中断处理紧急任务,这种方式完全可行。不过,应用程序仍可在单线程上运行,特定于平台的算子也能够在多个处理器之间分配计算任务。当解释器调用结束后,应用程序可向解释器查询包含模型计算输出结果的数组所在位置,随后即可使用该输出结果。

图 2:实现模块概览

来源:https://m.elecfans.com/article/7606912.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。