本文来源公众号“江大白”,仅用于学术分享,侵权删,干货满满。
导读
模型推理部署是AI工程化阶段非常重要的一部分,而其中非常重要的一个中转格式就是onnx,本文讲解了对于onnx部署实战的探索和经验,希望对大家有帮助!
内容介绍
目标检测模型End to End推理方案的探索和尝试,说到推理和部署,其实怎么也绕不开ONNX,ONNX在成立的初衷就是希望解决神经网络在不同的训练框架、推理框架上的转换问题。所以本期的内容会从如何玩转ONNX出发,唠一唠,我们在目标检测部署遇到的那些事情。因为篇幅以及有部分内容我不太了解不敢乱说的关系,我会在这里对开放麦的内容做一点顺序和内容上进行一点的调整,我也会加入自己的一些经历和看法,让大家看得更加轻松有趣一点。
ONNX是什么,如何生成ONNX(ONNX简要的介绍)?
预告:下面用三种方法向大家介绍如何生成Relu的ONNX模型,那么哪种方法才是最强的ONNX的生成方法呢?大家可以思考一下,我们继续往下看~
ONNX的组成
ONNX的静态图主要由Node(节点),Input(输入)和initializer(初始化器)但部分所组成的
-
✓节点就代表了神经网络模型一层的layer
-
✓输入代表了输入矩阵的维度信息
-
✓初始化器通常是存储权重/权值的。
-
每个组件元素都是hierarchical的结构,都是有着相互依赖关系的;
-
这是一个双向的链表。(Node、Graph彼此关联有相互关系的);
大家觉得难改,其实很大一部分也是因为ONNX的结构,边与边是一个稳定的结构关系,彼此很大程度上是相互依赖的。所以我们具体要怎么转化模型,怎么修改模型呢?我们接着看下去~
Pytorch导出ONNX模型
Pytorch是可以直接导出ONNX的模型,然后我们可以把导出的模型使用Netron的工具进行可视化工具。
Pytorch-—>ONNX
Numpy出发,揉一个数据结构是可行吗?
ONNX可以在Pytorch,通过转换得到。那么我们假如我们不用Pytorch上的转换,从零开始直接用Numpy人手揉一个ONNX模型是可行的吗?答案是可行的。
ONNX是用protobuf数据格式进行保存的。而protobuf本身也是跨语言的可以支持C, C&#