系列编排日期为 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 环境执行:
|
报告应包含 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 基准可重放,算子疑点有对应文档条目,模型和外部数据的哈希已记录。缺失训练代码并不一定阻止转换,但缺失输入数值范围会直接影响结果,应先通过原推理工程或可验证基准补全。
