AI-深度学习

海思NPU模型转换 03 拿到模型后的检查

展开合集目录
  1. 海思NPU模型转换 01 平台工具与文档地图
  2. 海思NPU模型转换 02 搭建转换环境
  3. 海思NPU模型转换 03 拿到模型后的检查
  4. 海思NPU模型转换 04 导出和整理ONNX
  5. 海思NPU模型转换 05 预处理与AIPP
  6. 海思NPU模型转换 06 校准数据与量化
  7. 海思NPU模型转换 07 执行ATC转换
  8. 海思NPU模型转换 08 输出与后处理约定
  9. 海思NPU模型转换 09 PC仿真与精度比对
  10. 海思NPU模型转换 10 板端最小推理闭环
  11. 海思NPU模型转换 11 转换失败与性能排查
  12. 海思NPU模型转换 12 项目案例与交付清单
  13. 海思NPU模型转换 A 附录A文档检索表
  14. 海思NPU模型转换 B 附录BATC与AIPP参数表
  15. 海思NPU模型转换 C 附录C错误现象与排查表
  16. 海思NPU模型转换 D 附录D项目目录及交付模板
海思NPU模型转换 03 拿到模型后的检查的封面

系列编排日期为 2026 年 8 月;技术基线核对与教学代码 CPU 验证日期为 2026-10-12。适用 Hi3516CV610 与本系列注明的 SDK/工具版本,实测范围见第 12 章。

返回系列目录 · 本篇属于 12 章与 4 份附录。

拿到模型后,先建立可检查的输入输出约定,再尝试 ATC。ONNX 可以通过语法校验,但仍然可能包含目标引擎不支持的属性、尺寸或算子组合。

收集原始模型资料

至少保留模型来源、许可证、训练框架版本、导出方法、任务类别、输入处理和后处理。分类器需要标签表;检测器需要类别顺序、步长、锚框或 DFL 参数;关键点模型需要点位顺序;分割模型需要类别和阈值含义。

ONNX 使用 external data 时,图文件只是模型的一部分。复制和哈希记录必须包含所有外部权重文件,并保持相对路径关系。第 12 章的 audit_onnx.py 记录主 ONNX 的哈希,并明确提醒外部数据需要另外归档。

执行结构检查

下载第 12 章配套代码,在有 ONNX 包的 Python 环境执行:

mkdir -p application/.temp/npu-audit
python3 application/.temp/npu-handbook-tools/audit_onnx.py \
  SDK/Tools/Npu/YuNet/face_detection_yunet_2023mar.onnx \
  --output application/.temp/npu-audit/yunet.json \
  > application/.temp/npu-audit/run.log 2>&1

报告应包含 SHA-256、IR、opset、真正的运行时输入、输出名称和形状、各类算子数量。脚本排除了 initializer,避免把静态权重误当成外部输入;已有报告路径会被拒绝,防止覆盖前一次证据。

本项目该 YuNet 源文件为 232589 字节,IR 6、opset 11,输入 input 为 FLOAT [1,3,640,640]。主要算子包括 Conv 53、Relu 15、Reshape 12、Transpose 12、Sigmoid 6、MaxPool 4、Add 2、Resize 2。这些数量用于确认本次文件身份,不是任何 YuNet 版本的通用定义。

四类兼容性分别检查

检查层 方法 能证明什么
ONNX 格式 onnx.checker.check_model 图格式和基本结构合法
形状 检查输入输出与 shape inference 图中的维度关系是否可推导
CPU 执行 ORT 同图推理 当前 ORT 能运行该图
目标编译 ATC 与算子规格表 当前 SVP 工具链接受此图及配置

任何一层成功都不能替代下一层。对于动态 batch 或动态空间尺寸,需要核对目标工具链的实际支持方式;本系列先固定 batch=1 和空间尺寸,减少部署接口的不确定性。

逐项核对算子规格

查《ATC工具使用指南》5.2.1“图像分析引擎”及 5.2.2“CPU”,按算子名查支持的 opset、输入类型、shape、属性与边界限制。CPU 章节中出现某算子,不等于整个网络会自动在 CPU 上高效运行,也不能据此保证混合执行性能。

例如 Resize 要同时核对插值方式、坐标变换方式和输入形式;Reshape 要追溯目标 shape 是否能静态确定;Transpose 要确认排列;Slice、Gather、Concat 要查 axis 和索引限制。不要只看算子名称存在就判断兼容,也不要把整个工具链概括成“仅支持 opset 11”。

ATC 失败时保存报错节点名,在 ONNX 中定位该节点及其上游 shape。若节点名称很长,应同时记录算子类型和输出 tensor 名,避免简化模型后名称改变导致检索失效。

先做 CPU 基准

使用同一张真实输入图,保存进入网络前的连续张量、每个原始输出以及解码后的结果。图像读入库、颜色顺序、浮点范围、resize/pad 和阈值都写进模型卡。仅保存画框后的 JPEG 无法还原原始浮点差异。

YuNet 2023mar 原始模型按本项目路径接收 BGR 0~255 的 FLOAT;不能因为别的视觉模型除以 255,就对它也直接除以 255。后续为了让 AIPP 使用缩放,可以等价调整首层权重,但必须先比较变换前后的输出。

本阶段的完成条件

模型来源可追溯,输入输出和后处理已明确,CPU 基准可重放,算子疑点有对应文档条目,模型和外部数据的哈希已记录。缺失训练代码并不一定阻止转换,但缺失输入数值范围会直接影响结果,应先通过原推理工程或可验证基准补全。

上一篇 搭建转换环境 · 系列目录 · 下一篇 导出和整理ONNX