系列文章目录
【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(0)
【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(1)
【模型部署】人脸检测模型DBFace C++ ONNXRuntime推理部署(2)
文章目录
- 系列文章目录
- 1 ONNX模型表示
- 2 模型转换
- 3 Python环境下的推理
- 参考资料
上一篇博客中简单介绍了ONNXRuntime推理引擎和DBFace检测模型,这篇博客中将展示如何使用其Python API进行初步验证及推理部署。
1 ONNX模型表示
ONNX(Open Neural Network Exchage)是一个开源机器学习模型数据的存储标准,支持不同的人工智能框架,从而将其训练好的模型转为ONNX中间表示,便于ONNXRuntime进行推理部署。本系列博客均使用Pytorch所训练的模型。
2 模型转换
Pytorch支持ONNX模型转换,仅需调用torch.onnx.export()
即可完成模型转换,并且支持模型中的绝大部分算子,从而能够避免很多自己手写算子的麻烦。具体的算子版本支持情况可以查阅官方文档。
模型转换完成后,可以使用NETRON工具可视化ONNX模型的输入输出以及算子节点信息,观察模型算子及运算分支是否转换正确。NETRON的可视化节点可以点击查看算子详情,如下图所示。
3 Python环境下的推理
经过NETRON可视化验证后的模型不一定能得到预想的正确结果,所以我们需要在Python环境下进行推理,确保ONNX模型能得到与Pytorch模型一致的结果。这里需要用到ONNXRuntime的Python API读取并运行模型。
onnxruntime.InferenceSession
用于获取一个 ONNX Runtime 推理器,其参数是用于推理的 ONNX 模型文件。InferenceSession
的 run 方法用于模型推理,其第一个参数为输出张量名的列表,第二个参数为输入值的字典。
这一语句是比较Pytorch推理结果和ONNXRuntime推理结果的差异,如果该值大于1e-5则报错,说明模型转换失败,推理结果的精度存在偏差,当然你也可以自己设定np.allclose()
的精确度参数。
可视化Python ONNXRuntime的推理结果如下,下一篇博客中将介绍如何使用ONNXRuntime的C++ API进行推理,从而大幅提高推理速度,基本达到实际应用需求。
参考资料
- ONNX官方算子支持查询文档
- Pytorch对ONNX的算子支持查询文档
- ONNX对python的api文档
- NETRON可视化工具