Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!
Posted 飞桨PaddlePaddle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!相关的知识,希望对你有一定的参考价值。
什么是ONNX
什么是Paddle2ONNX
Paddle2ONNX项目升级解读
支持基于飞桨框架2.0导出动态图模型
更丰富的Paddle OP覆盖
支持转换飞桨CV、NLP领域的主流模型
Paddle2ONNX使用教程
将动态图模型导出为ONNX模型
import os
import time
import paddle
# 从模型代码中导入模型
from paddle.vision.models import mobilenet_v2
# 实例化模型
model = mobilenet_v2()
# 将模型设置为推理状态
model.eval()
# 定义输入数据
input_spec = paddle.static.InputSpec(shape=[None, 3, 320, 320], dtype='float32', name='image')
# ONNX模型导出
# enable_onnx_checker设置为True,表示使用官方ONNX工具包来check模型的正确性,需要安装ONNX(pip install onnx)
paddle.onnx.export(model, 'mobilenet_v2', input_spec=[input_spec], opset_version=12, enable_onnx_checker=True)
执行结果:
2021-01-26 10:52:13 [INFO] ONNX model genarated is valid.
2021-01-26 10:52:13 [INFO] ONNX model saved in mobilenet_v2.onnx
将静态图模型导出为ONNX模型
# Paddle动态图保存为静态图
paddle.jit.save(model, 'inference/model', input_spec=[input_spec])
# 调用paddle2onnx命令
!paddle2onnx
--model_dir inference
--model_filename model.pdmodel
--params_filename model.pdiparams
--save_file mobilenet_v2.onnx
--opset_version 12
执行结果:
2021-01-26 10:53:29 [INFO] ONNX model saved in mobilenet_v2.onnx
模型测试
# 动态图导出的ONNX模型测试
import time
import numpy as np
from onnxruntime import InferenceSession
# 加载ONNX模型
sess = InferenceSession('mobilenet_v2.onnx')
# 准备输入
x = np.random.random((1, 3, 320, 320)).astype('float32')
# 模型预测
start = time.time()
ort_outs = sess.run(output_names=None, input_feed={'image': x})
end = time.time()
print("Exported model has been predicted by ONNXRuntime!")
print('ONNXRuntime predict time: %.04f s' % (end - start))
# 对比ONNX Runtime 和 飞桨的结果
paddle_outs = model(paddle.to_tensor(x))
diff = ort_outs[0] - paddle_outs.numpy()
max_abs_diff = np.fabs(diff).max()
if max_abs_diff < 1e-05:
print("The difference of results between ONNXRuntime and Paddle looks good!")
else:
relative_diff = max_abs_diff / np.fabs(paddle_outs.numpy()).max()
if relative_diff < 1e-05:
print("The difference of results between ONNXRuntime and Paddle looks good!")
else:
print("The difference of results between ONNXRuntime and Paddle looks bad!")
print('relative_diff: ', relative_diff)
print('max_abs_diff: ', max_abs_diff)
执行结果:
Exported model has been predicted by ONNXRuntime!
ONNXRuntime predict time: 0.0260 s
The difference of results between ONNXRuntime and Paddle looks good!
max_abs_diff: 4.2632564e-13
PaddleX基于Paddle2ONNX的OpenVINO部署方案:
https://paddlex.readthedocs.io/zh_CN/develop/deploy/openvino/index.html
飞桨官网导出ONNX模型协议教程:
https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/02_paddle2.0_develop/09_model_to_onnx_cn.html
手把手教你通过ONNX部署飞桨模型教程:
https://aistudio.baidu.com/aistudio/projectdetail/1479970
https://github.com/PaddlePaddle/Paddle2ONNX
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,包括飞桨开源平台和飞桨企业版。飞桨开源平台包含核心框架、基础模型库、端到端开发套件与工具组件,持续开源核心能力,为产业、学术、科研创新提供基础底座。飞桨企业版基于飞桨开源平台,针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。
END
以上是关于Paddle2ONNX最新升级:飞桨模型全面支持ONNX协议啦!的主要内容,如果未能解决你的问题,请参考以下文章
WAVE SUMMIT+2022飞桨平台新升级 全面支撑大模型研发与产业化
WAVE SUMMIT+2022飞桨平台新升级 全面支撑大模型研发与产业化