STM32 TFLite Micro图像识别内存优化 - 第1节

1. 课程导论:AI on MCU 的机遇与挑战

各位同学好,我是你们这门课的主讲。在嵌入式这行摸爬滚打了十几年,从最早的 8 位机做到现在的 Cortex-M7,说实话,最让我兴奋的技术转折点,就是 AI 真正落到 MCU 上。

你可能要问:MCU 那点算力,跑个 RTOS 都紧巴巴的,凭什么跑 AI?

嗯,这个问题我三年前也问过自己。当时有个项目要在 STM32F4 上做人脸检测,我第一反应是「开什么玩笑」。但后来真做出来了,虽然帧率不高,但确实能跑。从那以后我就意识到——AI on MCU 不是噱头,是实实在在的工程需求。

1.1 机遇:为什么非要在 MCU 上跑 AI?

说白了,三个字:低延迟、低功耗、低成本。

  • 低延迟:数据不用上传云端,本地推理,毫秒级响应。我做工业缺陷检测时,云端方案延迟 200ms 根本没法用,MCU 本地跑 30ms 搞定。
  • 低功耗:电池供电的设备,比如智能门锁、可穿戴设备,不可能一直连网。MCU 跑 AI 推理,功耗可以控制在几十毫瓦。
  • 低成本:一颗 STM32 芯片几块钱到几十块钱,相比 GPU 或者 NPU,成本优势巨大。

核心观点:AI on MCU 不是要替代云端 AI,而是填补「端侧实时智能」这个空白。说白了,让设备在本地就能做决策,不用什么都问云端。

1.2 挑战:理想很丰满,现实很骨感

但说实话,这条路并不好走。我踩过的坑,随便说几个:

  • 算力瓶颈:MCU 主频通常几十到几百 MHz,没有 GPU,没有大缓存。一个 MobileNet 模型在 PC 上跑 10ms,在 MCU 上可能要跑 1 秒。
  • 内存限制:STM32 的 RAM 通常几十 KB 到 1MB 出头。一个 200KB 的模型,加上中间激活值,很容易就把内存撑爆了。
  • 工具链碎片化:不同厂商的 AI 框架、量化工具、部署流程都不一样,学习成本很高。

避坑提醒:我曾经在一个项目里,模型在 PC 上量化后精度 98%,部署到 STM32 上直接掉到 60%。查了两天才发现是量化校准集没选对。这种坑,后面课程里我会专门讲怎么避免。

2. TFLite Micro 简介

好,聊完背景,咱们看看今天的主角——TFLite Micro。

TensorFlow Lite Micro 是 Google 推出的,专门给微控制器用的推理引擎。它跟 TensorFlow Lite 是什么关系?

你想想看,TFLite 是给手机、树莓派这类设备用的,底层依赖 Linux 系统和 POSIX 接口。但 MCU 上通常没有操作系统,或者只有 RTOS。所以 Google 把 TFLite 的核心推理部分抽出来,去掉了文件系统、线程、动态内存分配这些依赖,搞了一个纯 C++ 的轻量级版本——就是 TFLite Micro。

2.1 TFLite Micro 的核心特点

特性 说明
内存占用 核心运行时仅需 ~16KB ROM,~2KB RAM
无操作系统依赖 裸机、FreeRTOS、Zephyr 都能跑
算子支持 支持常见 CNN、全连接、激活函数等算子
量化支持 原生支持 int8 量化推理,性能高
可移植性 纯 C++ 实现,跨平台编译简单

个人经验:我建议初学者先别急着看源码,先理解 TFLite Micro 的「解释器模式」——模型被加载成一张计算图,解释器按拓扑顺序依次执行每个算子。这个思路跟跑一个脚本很像,只是底层是 C++ 实现的。

3. STM32Cube AI 工具链概览

光有推理引擎还不够,还得有工具把训练好的模型转换成能在 STM32 上跑的形式。这就是 STM32Cube AI 工具链要做的事。

STM32Cube AI 是意法半导体官方推出的 AI 部署工具集。说白了,它帮你把 TensorFlow、Keras、ONNX 训练的模型,转换成针对 STM32 优化过的 C 代码。

3.1 工具链核心组件

  • STM32Cube.AI 扩展包:在 CubeMX 里集成,一键生成 AI 推理代码
  • X-CUBE-AI:命令行工具,支持模型转换、量化、性能评估
  • STM32 Model Zoo:官方提供的预训练模型库,拿来就能用
  • STM32Cube Monitor:运行时性能监控工具,看 CPU 占用、内存使用

我个人习惯的流程是这样的:

  1. 在 PC 上用 Keras/TensorFlow 训练模型
  2. 导出为 TFLite 格式(float32)
  3. 用 STM32Cube.AI 做 int8 量化 + 性能评估
  4. 生成 C 代码,集成到 CubeMX 工程
  5. 编译、下载、调试

关键点:STM32Cube.AI 生成的代码底层调用的就是 TFLite Micro 的推理引擎。所以这两者不是竞争关系,而是互补关系——TFLite Micro 提供运行时,STM32Cube.AI 提供模型转换和优化。

4. 课程目标与项目预览

这门课不是纯理论,也不是纯代码演示。我的目标是:让你学完就能在自己的 STM32 板子上跑通一个图像识别项目。

4.1 课程核心目标

目标 具体内容
理解原理 TFLite Micro 推理流程、内存管理机制、量化原理
掌握工具 STM32CubeMX、X-CUBE-AI、TFLite Micro 集成
实战调优 内存优化技巧、模型压缩、推理加速
完整项目 从零搭建一个图像识别系统(摄像头 + LCD + 推理)

4.2 项目预览:手势识别系统

整个课程会围绕一个实战项目展开——基于 STM32 的手势识别系统。

  • 硬件:STM32H743 开发板 + OV2640 摄像头 + TFT LCD 屏幕
  • 模型:轻量级 CNN,识别 5 种手势(0-5 数字手势)
  • 流程:摄像头采集图像 → 预处理 → TFLite Micro 推理 → LCD 显示结果
  • 指标:推理时间 < 100ms,内存占用 < 256KB,准确率 > 90%

说句实在话:这个项目看起来简单,但真正做起来,内存调优会占掉你 60% 的时间。不过别担心,我会把每个优化点掰开揉碎了讲清楚。

5. 本章知识体系总览

最后,我用一张图把本章的核心脉络串起来。你看了这张图,就知道整个课程在讲什么了。

AI on MCU 知识体系总览 AI on MCU 机遇与挑战 TFLite Micro 推理引擎 STM32Cube AI 工具链 内存调优与部署 TFLite Micro 核心 解释器模式 算子注册 / 内存分配器 STM32Cube AI 工具 模型转换 / int8 量化 性能评估 / 代码生成 实战调优 内存复用 / 算子融合 模型剪枝 / 推理加速 实战项目:STM32 手势识别系统

这张图把整个课程的知识结构分成了三层:顶层是机遇与挑战,中间是三大技术支柱,底层是实战项目。后面 29 章,我们会一层层往下拆解,直到你亲手把那个手势识别系统跑起来。

最后说一句:这门课不会让你成为 AI 专家,但会让你成为「能在 MCU 上跑 AI 的嵌入式工程师」。这两个身份,在现在的市场上,真的很吃香。