1. 课程导入与工程目标
STM32N6 是 ST 推出的首款集成自研神经网络加速器 NPU 的通用 MCU,其 NPU 可提供约 600 GOPS 的算力,同时片上带有 4.2 MB 连续 SRAM 与更大容量的外部 PSRAM 接口。这意味着它不再只是"跑一个模型"的 MCU,而是可以在同一颗芯片上并行承载多个神经网络模型,并让它们共享摄像头、麦克风、传感器等输入通道。当系统里出现两个以上模型时,真正困难的问题就从"模型能不能跑起来"变成了"多个模型如何按时间、按优先级、按资源约束被调度起来"。本课程要解决的正是这个问题。
什么是多模型推理调度工程
多模型推理调度工程,指的是在资源受限的嵌入式平台上,对多个神经网络模型的加载、内存布局、执行顺序、算力分配、输入输出衔接进行统一设计与控制的一整套工程方法。它包含三个层次:
- 模型层:每个模型的输入输出张量形状、量化方式、算子集合、内存占用。
- 资源层:NPU 算力、CPU 算力、内部 SRAM、外部 PSRAM 带宽、DMA 通道、缓存一致性。
- 调度层:谁先跑、谁和谁可以并行、谁必须等待、超时如何处理、帧率如何保证。
举个具体例子。一个典型的智能门禁终端可能同时运行三个模型:人脸检测模型(输入 320×320,约 1.2 MB 权重)、人脸识别模型(输入 112×112,约 4 MB 权重)、活体检测模型(输入 128×128,约 0.8 MB 权重)。如果按"检测→识别→活体"串行执行,单帧耗时可能达到 90 ms 以上,帧率不足 11 FPS;而如果把活体检测与识别在 NPU 上做流水线重叠,并让 CPU 同时处理图像预处理,单帧耗时可以压缩到 45 ms 左右,帧率提升到 22 FPS。这个差距不是靠换模型得来的,而是靠调度设计得来的。
典型应用场景
多模型调度在 STM32N6 上最常见的落地场景有四类:
| 场景 | 模型组合 | 调度关键点 |
|---|---|---|
| 智能门禁/人脸终端 | 人脸检测 + 人脸识别 + 活体检测 | 检测结果驱动后两个模型,需低延迟唤醒 |
| 工业视觉质检 | 缺陷检测 + 分类 + 字符识别 | 高帧率、结果需与产线节拍对齐 |
| 语音交互设备 | 关键词唤醒 + 语音识别 + 声纹确认 | 常驻低功耗模型 + 事件触发大模型 |
| 多传感器融合 | 视觉模型 + 振动/电流异常模型 | 异构输入、时间戳对齐、结果融合 |
这些场景的共同特征是:模型之间存在依赖关系(前一个模型的输出是后一个模型的输入),或者存在竞争关系(多个模型抢同一块 NPU 和同一段内存)。调度工程的价值就在于把这两种关系显式地管理起来,而不是让它们随机发生。
学习路线
本课程按"先建认知、再搭骨架、后调性能"的顺序推进,整体分为四个阶段:
- 认知与工具链阶段:理解 STM32N6 的 NPU、内存拓扑与 ST Edge AI Core 工具链,能把一个 ONNX/TFLite 模型转换成可在目标板运行的 C 代码。
- 单模型落地阶段:完成单模型的量化、内存分配、推理调用与结果校验,建立可复现的基准。
- 多模型调度阶段:设计模型注册表、内存池、执行队列与优先级策略,实现多模型的加载、切换与并行。
- 性能与稳定性阶段:做帧率、延迟、内存峰值、功耗的测量与优化,处理超时、丢帧、缓存一致性等工程问题。
每个阶段都会给出可运行的示例工程结构、关键配置参数和判断依据。例如在单模型阶段,我们会用一个人脸检测模型作为基准,记录它的推理耗时(示例:NPU 上约 18 ms)、峰值内存(示例:约 2.1 MB)和输出张量布局,这些数据会成为后续调度设计的输入。
最终交付物
课程结束时,你将得到一个可编译、可烧录、可复现的多模型推理调度工程,具体包括:
- 一个支持多模型注册与内存池管理的调度框架源码(C 语言,基于 STM32CubeIDE 工程)。
- 一份模型清单与资源预算表,记录每个模型的输入输出、量化参数、内存占用与推理耗时。
- 一套调度策略配置,包括优先级、超时阈值、并行/串行决策依据。
- 一份性能测量报告模板,含帧率、端到端延迟、NPU 占用率、内存峰值的采集方法与示例数据。
本节知识结构
下图把本节的核心关系整理为一张结构图:左侧是 STM32N6 的硬件资源,中间是多模型调度工程要管理的三类对象,右侧是课程最终交付物。它帮助你建立"硬件—调度—交付"的整体认知,后续章节会逐层展开。