文章目录

  • 系列文章目录
  • 1 ONNX模型表示
  • 2 模型转换
  • 3 Python环境下的推理
  • 参考资料


上一篇博客中简单介绍了ONNXRuntime推理引擎和DBFace检测模型,这篇博客中将展示如何使用其Python API进行初步验证及推理部署。

1 ONNX模型表示

ONNX(Open Neural Network Exchage)是一个开源机器学习模型数据的存储标准,支持不同的人工智能框架,从而将其训练好的模型转为ONNX中间表示,便于ONNXRuntime进行推理部署。本系列博客均使用Pytorch所训练的模型。

onnx转ncnn模型在线_ONNXRuntime

2 模型转换

Pytorch支持ONNX模型转换,仅需调用torch.onnx.export()即可完成模型转换,并且支持模型中的绝大部分算子,从而能够避免很多自己手写算子的麻烦。具体的算子版本支持情况可以查阅官方文档

onnx转ncnn模型在线_模型部署_02


onnx转ncnn模型在线_ONNXRuntime_03

onnx转ncnn模型在线_onnx转ncnn模型在线_04

模型转换完成后,可以使用NETRON工具可视化ONNX模型的输入输出以及算子节点信息,观察模型算子及运算分支是否转换正确。NETRON的可视化节点可以点击查看算子详情,如下图所示。

onnx转ncnn模型在线_ONNXRuntime_05

3 Python环境下的推理

经过NETRON可视化验证后的模型不一定能得到预想的正确结果,所以我们需要在Python环境下进行推理,确保ONNX模型能得到与Pytorch模型一致的结果。这里需要用到ONNXRuntime的Python API读取并运行模型。

onnx转ncnn模型在线_python_06


onnx转ncnn模型在线_模型部署_07


onnxruntime.InferenceSession用于获取一个 ONNX Runtime 推理器,其参数是用于推理的 ONNX 模型文件。InferenceSession的 run 方法用于模型推理,其第一个参数为输出张量名的列表,第二个参数为输入值的字典。

onnx转ncnn模型在线_ONNXRuntime_08


这一语句是比较Pytorch推理结果和ONNXRuntime推理结果的差异,如果该值大于1e-5则报错,说明模型转换失败,推理结果的精度存在偏差,当然你也可以自己设定np.allclose()的精确度参数。

可视化Python ONNXRuntime的推理结果如下,下一篇博客中将介绍如何使用ONNXRuntime的C++ API进行推理,从而大幅提高推理速度,基本达到实际应用需求。

onnx转ncnn模型在线_模型部署_09

参考资料

  1. ONNX官方算子支持查询文档
  2. Pytorch对ONNX的算子支持查询文档
  3. ONNX对python的api文档
  4. NETRON可视化工具