今天看啥  ›  专栏  ›  新机器视觉

模型部署 | ONNX定义、读写和调试

新机器视觉  · 公众号  · 科技自媒体  · 2024-09-28 21:06

主要观点总结

本文介绍了ONNX(Open Neural Network Exchange)模型的原理、构造方法和调试技巧。文章首先解释了ONNX模型的结构和计算图的概念,然后展示了如何用Python和ONNX API构造一个描述线性函数的ONNX模型。接着,文章介绍了如何用ONNX Runtime运行模型,并用Netron进行可视化查看。此外,还讲解了子模型提取功能在ONNX调试中的应用,以及在实际部署中如何对ONNX模型进行调试和修改。最后,文章指出了在使用PyTorch等框架导出ONNX模型时面临的挑战,包括边序号改变和难以对应PyTorch代码和ONNX节点的问题。

关键观点总结

关键观点1: ONNX模型原理及结构

ONNX模型是一个计算图,节点是算子,边是参与运算的张量。通过可视化ONNX模型,可以了解模型的结构和运算流程。

关键观点2: 如何用Python和ONNX API构造ONNX模型

可以使用ONNX的Python API构造ONNX模型,包括构造张量信息、构造算子节点、构造计算图和封装成模型等步骤。

关键观点3: ONNX模型的运行和调试

可以用ONNX Runtime运行ONNX模型,并用Netron进行可视化查看。ONNX官方提供了子模型提取功能,便于对ONNX模型进行调试。

关键观点4: 在使用框架(如PyTorch)导出ONNX模型时的挑战

使用框架导出ONNX模型时,边序号可能会改变,且难以对应PyTorch代码和ONNX节点。这给调试和修改带来困难。


文章预览

概述 神经网络本质上是一个计算图。计算图的节点是算子,边是参与运算的张量。而通过可视化 ONNX 模型,我们知道 ONNX 记录了所有算子节点的属性信息,并把参与运算的张量信息存储在算子节点的输入输出信息中。事实上,ONNX 模型的结构可以用类图大致表示如下: 如图所示,一个  ONNX  模型可以用 ModelProto 类表示。 ModelProto 包含了版本、创建者等日志信息,还包含了存储计算图结构的 graph。 GraphProto 类则由输入张量信息、输出张量信息、节点信息组成。 张量信息 ValueInfoProto 类包括张量名、基本数据类型、形状。 节点信息 NodeProto 类包含了算子名、算子输入张量名、算子输出张量名。 定义ONNX 尝试完全用 ONNX 的 Python API 构造一个描述线性函数 output=a*x+b 的 ONNX 模型。我们将根据上面的结构,自底向上地构造这个模型。 首先,我们可以用 helper.m ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览