1. AI与STM32初识:嵌入式AI概念、STM32生态系统、STM32Cube.AI工具链简介、课程项目总览(手势识别)
各位同学,欢迎来到《STM32Cube AI 嵌入式AI单片机推理实战》的第一章。
说实话,这几年AI这个词已经被聊得有点烂大街了。但真正能在单片机这种“小身板”上跑起来的AI,跟你在云端看到的那些大模型完全是两码事。我最早接触嵌入式AI是在2018年,当时一个客户想在STM32F4上做电机故障预测,我第一反应是“这玩意儿能跑得动?”结果试下来发现,只要模型剪裁得当,效果还真不赖。
好,咱们今天就把这扇门推开。先看看嵌入式AI到底是什么,STM32能给我们提供什么武器,以及整个课程我们要一起完成什么项目。
1.1 嵌入式AI:为什么要在单片机上跑推理?
嵌入式AI,说白了就是把训练好的神经网络模型,部署到资源受限的嵌入式设备上,让它能实时做推理。注意,是推理,不是训练。训练还是在服务器或PC上完成。
你可能会问:为什么非要在单片机上跑?云端不行吗?
我遇到过不少工程师,一开始都倾向于把数据发到云端处理。但实际项目里,有几个痛点非常明显:
- 延迟:工业控制场景,响应时间要求毫秒级,网络来回一折腾就几百毫秒,根本扛不住。
- 带宽:摄像头每秒产生几兆数据,全传云端,流量费先不说,Wi-Fi模块的功耗就够你头疼的。
- 隐私:医疗设备、门禁系统,数据不出设备才是最安全的。
- 成本:加一个4G模块的成本,够你买好几片STM32了。
核心结论:嵌入式AI不是要替代云端AI,而是把“决策”下沉到设备端,只把“必要的信息”上传。这叫边缘计算,也叫端侧智能。
那STM32这种MCU能跑什么级别的模型呢?我直接给你一个参考:
| 模型类型 | 参数量 | STM32典型场景 | Flash占用 |
|---|---|---|---|
| 全连接网络(MLP) | 1K ~ 50K | 传感器分类、异常检测 | ~100KB |
| 小型CNN | 10K ~ 200K | 手势识别、关键词唤醒 | ~500KB |
| MobileNet V1(1.0) | ~4.2M | 简单图像分类 | ~16MB(需外扩Flash) |
嗯,这里要注意:STM32的Flash通常只有512KB到2MB,所以我们的模型必须做量化、剪枝。这也是为什么STM32Cube.AI工具链这么重要——它帮你自动完成这些优化。
1.2 STM32生态系统:你手上有哪些牌?
STM32之所以在嵌入式AI领域这么火,不是因为它算力有多强,而是它的生态系统太完整了。我个人习惯把STM32的AI相关资源分成三层:
- 硬件层:从M4到M7到H7,再到最近带NPU的N6系列,算力阶梯非常清晰。
- 中间件层:STM32CubeMX帮你配外设,CubeIDE帮你写代码,X-CUBE-AI帮你部署模型。
- 工具链层:STM32Cube.AI、STM32CubeMonitor、以及各种PC端可视化工具。
我画了一张图,帮你理清它们之间的关系:
你看,这个结构是分层的。每一层都依赖下一层,但STM32Cube.AI这个工具链把中间两层打通了。你不需要自己写量化代码,不需要手动优化算子——工具链帮你搞定。
我的建议:初学者不要一上来就啃H7或者N6。先拿一块F4或者G4系列的开发板,跑通一个最简单的模型,把整个流程走一遍。等理解了工具链怎么用,再上高性能芯片。我曾经带过一个实习生,上来就买H743,结果光配时钟就折腾了两天……
1.3 STM32Cube.AI工具链:到底能帮你做什么?
STM32Cube.AI,全称是X-CUBE-AI扩展包。它不是单独一个软件,而是集成在STM32CubeMX里的一个功能模块。你只需要在CubeMX里导入你的模型文件(比如Keras的.h5,或者ONNX),它就能自动生成针对你指定芯片的优化C代码。
它的核心能力,我总结成四步:
| 步骤 | 做什么 | 你需要注意什么 |
|---|---|---|
| 1. 导入 | 支持Keras、TFLite、ONNX、PyTorch等格式 | 模型输入输出张量形状必须固定,不支持动态尺寸 |
| 2. 分析 | 评估模型在目标芯片上的RAM/Flash占用、推理时间 | 这个分析很准,我一般用它来选型——如果分析出来Flash超了,就换更大容量的芯片或者剪模型 |
| 3. 优化 | 自动做权重量化(8bit或16bit)、算子融合、内存复用 | 量化后精度损失通常在1%以内,但模型体积能缩小4倍 |
| 4. 生成 | 生成C代码,包含模型推理函数、内存池、输入输出缓冲区 | 生成的代码可以直接添加到CubeIDE工程里,不需要手动移植 |
我曾经在一个项目中,用STM32Cube.AI把一个MobileNet V1模型量化到8bit,在STM32H743上跑到了30fps。你想想看,这已经可以做一些简单的实时视觉应用了。
注意:STM32Cube.AI不是万能的。它不支持循环神经网络(RNN/LSTM)的自动部署,也不支持自定义算子。如果你的模型里有这些结构,需要手动实现或者替换成等效的卷积/全连接层。
1.4 课程项目总览:手势识别
整个课程,我们会一起完成一个完整的项目——基于STM32的手势识别系统。
为什么选手势识别?三个原因:
- 直观:你动动手,LED就亮,或者屏幕就显示数字,效果很酷,适合展示。
- 完整:从数据采集、模型训练、模型量化、到部署推理,每个环节都能覆盖到。
- 实用:手势识别在智能家居、车载控制、工业非接触操作中都有真实需求。
项目的硬件平台是这样的:
| 组件 | 型号 | 作用 |
|---|---|---|
| 主控MCU | STM32F407VGT6 | 运行模型推理,控制外设 |
| 传感器 | PAJ7620(手势识别传感器) | 采集手势数据(9种手势) |
| 显示 | 0.96寸 OLED(SSD1306) | 显示识别结果 |
| 调试 | USB转串口(CH340) | 打印推理日志和性能数据 |
整个项目的流程,我画了一张图:
你看,整个流程是闭环的。从传感器采集数据,到PC上训练模型,再到用STM32Cube.AI量化部署,最后在STM32上实时跑推理并输出结果。每一步我们都会在后面的章节里详细拆解。
项目目标:最终实现一个可以识别9种手势(上、下、左、右、前、后、顺时针、逆时针、挥手)的嵌入式系统,识别准确率≥95%,单次推理时间≤50ms。
嗯,这个目标不算高,但也不低。对于STM32F4来说,50ms的推理时间意味着模型不能太大,量化必须到位。不过别担心,我会带着你一步步调优。
好,第一章就到这里。你不需要记住所有细节,只需要理解三个核心点:
- 嵌入式AI是在MCU上做推理,不是训练。
- STM32Cube.AI工具链帮你把模型从PC搬到MCU。
- 我们整个课程会做一个手势识别的完整项目。