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 占用、内存使用
我个人习惯的流程是这样的:
- 在 PC 上用 Keras/TensorFlow 训练模型
- 导出为 TFLite 格式(float32)
- 用 STM32Cube.AI 做 int8 量化 + 性能评估
- 生成 C 代码,集成到 CubeMX 工程
- 编译、下载、调试
关键点: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. 本章知识体系总览
最后,我用一张图把本章的核心脉络串起来。你看了这张图,就知道整个课程在讲什么了。
这张图把整个课程的知识结构分成了三层:顶层是机遇与挑战,中间是三大技术支柱,底层是实战项目。后面 29 章,我们会一层层往下拆解,直到你亲手把那个手势识别系统跑起来。
最后说一句:这门课不会让你成为 AI 专家,但会让你成为「能在 MCU 上跑 AI 的嵌入式工程师」。这两个身份,在现在的市场上,真的很吃香。