模型文件怎样变成 STM32 能执行的计算
先保存模型结构与参数,再解释量化为什么能减少存储。最后使用 ST 工具做分析、验证和代码导出,每一步都有需要保留的产物。
1 · 导出文件里保存什么
训练框架里的模型包含计算结构和已经学到的参数。ONNX 等模型格式让部署工具读取这些内容;它不是烧录文件。输入名字、形状、类型和输出含义仍需保存,动态形状能否部署也要看目标工具。
教学脚本使用静态输入 [1,6,512],输出是每类原始分数。先在电脑上运行导出模型,用完全相同的标准化输入比较原框架与导出结果。参数保存成功不代表数据顺序、预处理和导出算子都已验证。
2 · 浮点数怎样用整数表达
仿射量化的近似关系;再裁剪到实际整数范围
real = scale * (q - zero_point)
q = round(real / scale) + zero_pointscale 是一个整数档位代表多少真实数值,zero_point 表示真实零对应哪个整数。以 scale=0.1、zero_point=128 为例,真实 0.2 约对应 130。范围以外会裁剪,小数也会产生舍入误差,因此量化不是简单地把 float 强制转成 int8。
校准数据用于估计中间数值范围,应来自训练一侧、能代表真实输入的样本。独立测试仍保留。输入边界、网络内部和输出边界可以采用不同数据类型,必须分别读元数据。
3 · 先运行配套量化与比较
需要先运行带 --export 的训练示例
python quantize_activity.py practice_mlp示例用训练窗口做校准,生成 QDQ ONNX,再对独立测试窗口比较浮点与量化模型的输出差异和类别结果。QDQ 表示在计算图中显式加入量化、反量化操作;此示例输入边界仍然是浮点。文件内部有八位数,不代表接口应传入 uint8 数组。
终端会打印实际边界类型、形状、最大分数差异和两份测试结果。人工数据的分数只反映人工规则,改用真实记录才能讨论真实动作识别的量化影响。
4 · ST 工具分别检查什么
| 阶段 | 读到的结果 |
|---|---|
| Analyze | 算子是否支持,目标资源和运算量估计。 |
| Validate | 参考模型与转换模型的输出比较,可扩展到设备验证。 |
| Generate | 生成网络接口、权重、上下文与工作内存需求。 |
| 接入工程 | 初始化、准备存储、填输入、执行、读输出与错误处理。 |
在独立模型工作目录中核对已安装工具的命令参数
stedgeai --version
stedgeai analyze --help
stedgeai validate --help
stedgeai generate --helpST Edge AI Core 接收已经训练好的模型并生成适合目标的部署代码。具体版本的命令参数按本机帮助和官方文档填写,先输出到独立目录审查。仓库原网络使用 4.0.1 的 stai 接口,不能直接混用另一代生成接口与运行库。
5 · 把部署说明与生成物放在一起
保存工具版本、目标芯片、输入输出信息、预处理、量化参数、类别表、权重和激活工作区大小。Flash 中的常量权重和 RAM 中的中间计算空间是不同开销。生成报告通过后,还需检查实际链接内存、任务栈与运行耗时。
导出并比较一份小模型,写出它的实际输入边界类型。把一个字节顺序或通道顺序故意改变,观察工具可能仍可运行但答案改变的情况,说明为什么需要相同输入的逐项比较。
资料与代码
配套文件
先复制到独立练习目录;用法见 支线示例说明。