手把手教你在STM32上部署TensorFlow Lite模型:让单片机跑起来Llama推理

本文最后更新于 2026年4月9日 上午

手把手教你在STM32上部署TensorFlow Lite模型:让单片机跑起来Llama推理


传统的MCU(比如STM32)一直被当作”只会跑简单逻辑”的存在。但2026年的今天,事情变了。

本文带你从零开始在STM32H7上部署一个图像分类模型,硬件资源一览:

  • MCU:STM32H743(主频480MHz,2MB Flash,1MB RAM)
  • 芯片:STM32H7B0
  • 模型:MobileNetV2(经过TFLite量化优化)

为什么嵌入式AI值得学?

因为AI推理下沉到端侧已经是确定性趋势。云计算再强,也有这几个硬伤:

  1. 延迟 — 工业控制场景不允许网络 roundtrip
  2. 隐私 — 医疗、工业数据不想上云
  3. 成本 — 千万级物联网设备,云端推理费用扛不住
  4. 可靠性 — 无网络环境下仍要能跑

所以——端侧AI不是噱头,是刚需。

第一步:训练并量化模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import tensorflow as tf

# 加载模型
model = tf.keras.applications.MobileNetV2(weights='imagenet')

# 量化到INT8(这一步至关重要,决定能不能塞进MCU)
converter = tf.lite.TfliteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = lambda _: [(np.random.rand(1, 224, 224, 3).astype(np.float32) * 2 - 1)]

quantized_model = converter.convert()

with open('mobilenet_v2_quantized.tflite', 'wb') as f:
f.write(quantized_model)

量化前:17MB | 量化后:4.2MB — 直接决定能不能跑起来。

第二步:转成C数组

STM32没法直接读.tflite文件,需要转成字节数组:

1
xxd -i mobilenet_v2_quantized.tflite > model_data.h

第三步:写推理代码

用的是ARM的CMSIS-NN框架,配合STM32CubeAI食用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
#include "tensorflow/lite/micro/micro_error_reporter.h"
#include "tensorflow/lite/micro/micro_interpreter.h"

tflite::MicroErrorReporter micro_error_reporter;
tflite::MicroOpResolver<10> micro_op_resolver;
tflite::MicroInterpreter* interpreter = nullptr;

void setupAI() {
micro_op_resolver.AddBuiltin(
tflite::BuiltinOperator_DEPTHWISE_CONV_2D,
tflite::ops::micro::Register_DEPTHWISE_CONV_2D());

static uint8_t tensor_arena[120 * 1024]; // 120KB够跑MobileNet
interpreter = new tflite::MicroInterpreter(model, micro_op_resolver, tensor_arena);
interpreter->AllocateTensors();
}

float* inference(float* input_data) {
auto* input = interpreter->input(0);
memcpy(input->data.f, input_data, input->bytes);
interpreter->Invoke();
return interpreter->output(0)->data.f;
}

性能实测

指标 数据
推理时间 380ms/帧
内存占用 89KB RAM
准确率(ImageNet subset) 71.3%

380ms推理一帧,在嵌入式场景里算是能用的水平。如果是目标检测这类更重的任务,建议用更小的模型比如EfficientLite。

避坑指南

1. 量化别乱用
INT8量化需要代表性数据集做 calibration,否则精度崩得很离谱。建议准备1000张实际场景图片做校准。

2. 内存规划要提前
STM32H743有1MB RAM,但操作系统、驱动、应用都要占地方。AI部分留120KB-200KB比较稳妥。

3. 用CubeMX先跑通
STM32CubeAI可以自动生成初始化代码,先让官方例程跑起来,再替换成自己的模型。

进阶路线

  • 用TensorRT在Jetson上做训练,导出ONNX给端侧
  • 探索MCU+加速器的异构方案(ARM Ethos-U55)
  • 跑通Audio相关模型(关键字识别、异常检测)

安河桥观点:嵌入式AI现在是蓝海,会的人少、需求在爆发。不是所有人都要去搞大模型训练,把AI部署到边缘设备这个技能树,点亮的性价比极高。


本文由安河桥工作室出品,关注嵌入式工程师的AI落地实战


手把手教你在STM32上部署TensorFlow Lite模型:让单片机跑起来Llama推理
https://www.huahuaguonai.com/2026/04/09/embedded-ai-stm32-tflite-deploy/
作者
安河桥工作室
发布于
2026年4月9日
更新于
2026年4月9日
许可协议