STM32N6 搭载 600 GOPS 算力的 NPU,是边缘 AI 场景的核心硬件载体。官方提供的模型验证方案开发工作量低、易集成,核心流程包含 “环境准备→模型生成→编译下载→性能 / 准确率评估→优化调优” 五步,可快速验证模型在硬件上的适配性与运行效果。
资料获取:如何在STM32N6上验证模型
1. 环境准备:搭建基础开发框架
验证前需完成软件与硬件的环境配置,确保工具链兼容与设备可正常通信:
- 软件要求:Python 3.9+、最新版 STM32CubeProgrammer、STM32CubeIDE 1.15.1(或 IAR 9.40.1+,需安装 STM32N6 补丁)、STEdgeAI Core 工具(v2.0.0+,需添加系统环境变量)。
- 硬件要求:推荐 STM32N6-DK 开发板(支持外部 RAM,无限制测试),STM32N6-Nucleo 板可使用但功能受限。
- 环境验证:打开 CMD 执行
stedgeai --version,显示版本信息即表明 STEdgeAI 安装成功;将 arm-none-eabi-objcopy.exe 路径加入环境变量,执行arm-none-eabi-objcopy --version验证工具可用性。
2. 核心流程:模型部署与验证步骤
2.1 生成模型权重与代码
通过 STEdgeAI 工具将预训练模型(支持 TFLite/ONNX 格式)转换为 STM32N6 可执行的代码与权重文件:
- 模型来源:可自行准备,或从 STM32 AI 模型库(GitHub)下载示例模型(如 MobileNetV2 花卉分类模型)。
- 执行命令:进入模型目录,运行
stedgeai generate -m [模型文件] --target stm32n6 --st-neural-art。 - 生成文件:包含模型代码(network.c)、权重文件(.raw)、编译报告(generate_report.txt)等,报告中需重点关注输入输出格式、Flash/RAM 占用、epoch 分配情况。
- 关键说明:epoch 分为 HW(NPU 执行)和 SW(Cortex-M55 执行)两类,若 SW epoch 占比过高,需修改模型算子以适配 NPU。
2.2 编译与下载:将模型部署到硬件
通过 Python 脚本完成工程编译与开发板烧录,需提前配置工具路径与设备通信:
- 配置前提:修改
$STEDGEAI_CORE_DIR/scripts/N6_scripts/config.json,确保 CubeProgrammer、编译器等工具路径正确。 - 执行脚本:以管理员权限运行
python [STEdgeAI路径]/scripts/N6_scripts/n6_loader.py,完成编译与烧录。 - 常见问题解决:
- 权限不足:管理员模式打开 CMD 或安装 STEdgeAI 到用户目录。
- 找不到文件:检查 config.json 中编译器路径配置。
- IAR 版本兼容:将 Project.N6DK.general.xcl 中的
armbat.dll替换为armLibsupportUniversal.dll。
- 注意事项:代码运行在 RAM 中,开发板不可断电,否则需重新烧录。
2.3 性能评估:测试推理速度与硬件负载
通过脚本快速获取模型运行效率数据,核心关注推理时间与 NPU 负载:
- 执行命令:
set PYTHONPATH=[AI_RUNNER路径] && python [AI_RUNNER路径]/examples/checker.py -d serial:921600 --perf-only -b 10。 - 参数说明:
-d serial:921600指定串口通信波特率,--perf-only仅测试性能,-b 10表示运行 10 次取平均值。 - 关键指标:推理时间(示例模型平均 8.453ms)、CPU Cycles(含 NPU 预配置 / 推理 / 后处理三部分)、NPU 负载占比(示例达 71.1%)。
2.4 准确率评估:验证模型预测效果
支持伪随机数据与真实数据集两类验证,生成量化指标报告:
- 伪随机数据验证:运行
stedgeai validate -m [模型文件] --target stm32n6 --mode target -d serial:921600,默认使用随机数据,输出准确率、RMSE、MAE 等指标。 - 真实数据验证:添加
-vi [数据集路径]参数(如-vi input_20_images.npy,数据集格式为 (样本数,224,224,3)),示例中真实数据验证准确率达 100%。 - 报告解读:包含混淆矩阵、交叉准确率、余弦相似度等,可直观判断模型在硬件上的预测一致性。
3. 优化调优:提升模型运行效率
通过配置文件修改与参数调整,进一步优化推理性能与适配性:
3.1 编译选项优化
- 复制默认配置文件:将
$STEDGEAI_CORE_DIR/Utilities/windows/targets/stm32/resources/neural_art.json与stm32n6.mpool到工作目录。 - 编辑 neural_art.json:添加优化选项
"allmems--O3-ec",包含--enable-epoch-controller(硬件自动处理 epoch 切换)、--O3(最高优化级别)等。 - 重新生成模型:执行
stedgeai generate -m [模型文件] --target stm32n6 --st-neural-art allmems--O3-ec@neural_art.json。 - 优化效果:推理时间从 8.453ms 降至 6.277ms,NPU 负载提升至 99.8%,SW epoch 数量显著减少。
3.2 数据格式适配
- 输出格式转换:无需修改模型,添加
--output-data-type int8参数,直接生成 int8 输出模型,移除 int8→float32 转换 epoch,降低冗余计算。 - 输入通道调整:Pytorch 生成的 ONNX 模型(channel first 格式)可通过
--inputs-ch-position chlast参数,自动添加格式转换层,适配嵌入式图像处理 Pipeline。
3.3 内存分配优化
修改stm32n6.mpool文件(默认位于 STEdgeAI 安装目录),调整 CPU RAM、NPU RAM 与外部 Flash 的分配比例,优先使用 NPU RAM(访问速度更快),提升推理效率。
4. 关键说明与注意事项
- epoch 概念:STM32N6 编译器将模型切割为最小执行片段(epoch),HW epoch 由 NPU 执行,SW epoch 由 Cortex-M55 执行,需尽量减少 SW epoch 占比。
- 报告解读:生成报告(generate_report.txt)需重点关注输入输出格式、内存占用(Flash/RAM)、epoch 分配,若存在大量 SW epoch 需优化模型算子。
- 工具依赖:所有操作依赖 STEdgeAI 工具链与 STM32Cube 生态,确保工具版本匹配,避免兼容性问题。
5. STM32N6 模型验证核心命令速查表
| 命令类别 | 命令格式 | 参数说明 | 核心作用 |
|---|---|---|---|
| 环境验证 | stedgeai --version |
无额外参数,仅查看版本。 | 验证 STEdgeAI 工具是否安装成功,输出 STEdgeAI Core、MLC 等组件版本信息。 |
arm-none-eabi-objcopy --version |
无额外参数,仅查看版本。 | 验证编译器工具链(GNU objcopy)是否配置成功,确保编译流程正常。 | |
| 模型生成(基础) | stedgeai generate -m [模型文件路径] --target stm32n6 --st-neural-art |
-m:指定输入模型文件(支持 TFLite/ONNX 格式);--target:指定目标硬件为 STM32N6;--st-neural-art:启用 ST Neural ART 编译模式。 |
将预训练模型转换为 STM32N6 可执行的代码、权重文件,生成编译报告(含内存占用、epoch 分配)。 |
| 模型生成(优化) | stedgeai generate -m [模型文件路径] --target stm32n6 --st-neural-art allmems--O3-ec@neural_art.json --output-data-type int8 |
新增参数:allmems--O3-ec@neural_art.json:引用优化配置文件(含 --enable-epoch-controller 等);--output-data-type int8:指定输出数据格式为 int8(默认 float32)。 |
生成高性能优化模型,减少 SW epoch 占比,适配低带宽场景的 int8 输出需求。 |
| 模型生成(通道调整) | stedgeai generate -m [模型文件路径] --target stm32n6 --st-neural-art --inputs-ch-position chlast |
--inputs-ch-position chlast:将 channel first 格式(如 Pytorch ONNX)自动转换为 channel last 格式。 |
适配嵌入式图像处理 Pipeline,无需重新生成模型即可兼容不同通道顺序。 |
| 编译与下载 | python [STEdgeAI路径]/scripts/N6_scripts/n6_loader.py |
无额外参数,需提前配置config.json工具路径。 |
自动完成工程编译、链接,将模型代码烧录到 STM32N6 开发板(RAM 运行)。 |
| 性能评估 | set PYTHONPATH=[AI_RUNNER路径] && python [AI_RUNNER路径]/examples/checker.py -d serial:921600 --perf-only -b 10 |
-d serial:921600:指定串口通信(波特率 921600);--perf-only:仅评估性能,不验证准确率;-b 10:运行 10 次推理取平均值。 |
输出推理时间(平均 / 最大)、CPU Cycles(NPU 预配置 / 推理 / 后处理)、NPU 负载占比。 |
| 准确率评估(伪随机数据) | stedgeai validate -m [模型文件路径] --target stm32n6 --mode target -d serial:921600 |
--mode target:指定在目标硬件(STM32N6)上验证;默认使用伪随机数据生成输入。 |
快速验证模型预测一致性,输出准确率、RMSE、MAE、混淆矩阵等量化指标。 |
| 准确率评估(真实数据) | stedgeai validate -m [模型文件路径] --target stm32n6 --mode target -d serial:921600 -vi [数据集路径] |
-vi [数据集路径]:指定真实数据集(如 input_20_images.npy,格式为 (样本数,224,224,3))。 |
基于真实场景数据验证模型准确率,更贴近实际应用效果,输出详细评估报告。 |
命令使用关键说明
- 路径替换:命令中
[模型文件路径]、[STEdgeAI路径]等占位符,需替换为本地实际路径(如C:STSTEdgeAI2.0)。 - 权限要求:编译下载(n6_loader.py)、性能评估等命令需以管理员权限运行 CMD,避免权限不足导致失败。
- 串口配置:所有硬件交互命令(
-d serial:921600)需确保开发板串口连接正常,波特率与命令一致(默认 921600)。 - 配置依赖:模型生成、编译下载前,需先修改
config.json(STEdgeAI 脚本目录下),确保 CubeProgrammer、编译器等工具路径正确。
STM32N6 的模型验证流程依托官方工具链实现了 “低代码、高适配”,从模型转换到优化调优均有明确指引,可快速验证边缘 AI 模型的硬件适配性。通过编译选项优化、数据格式调整等手段,能进一步挖掘 NPU 算力潜力,为实际项目集成提供可靠参考。
899