16年前的电影《功夫》可以说是家喻户晓,并将武侠片推向了一个新的高潮。在电影中,街头小混混阿星偶然间被打通了任督二脉,因善开悟,再有“如来神掌”的加持,让他的武功变得登峰造极,最后从天而降,一掌击败了大反派火云邪神。相信不少小伙伴们都因此萌生了武侠梦、功夫梦,梦想自己有一天也能“开挂”,变得天下无敌!
如果当时做个问卷调查,问获得绝世武功的第一步需要什么?即使很多人说不清楚任脉和督脉的位置,他们仍然会回答——打通任督二脉!
“只有打通任督二脉,才能加速真气运行效率,从而获得神功”已成为多数少侠们的共同认识。其实,这个道理同样能应用于现实之中。比如,在人工智能领域,开源开放非常普遍,只有打通壁垒,实现互通有无,才能促进发展的效率。近期,飞桨进入了2.0时代,不仅API体系得到了全面升级,动态图模式变得更加完备,为广大开发者带来“动静统一的开发体验”,还集成了最新版的Paddle2ONNX工具,进一步提升了框架的开放性。除了原先的Paddle Inference和Paddle Lite等高性能部署方案外,用户还可以通过使用paddle.onnx.export接口,将模型保存为ONNX协议格式后进行部署,极大丰富了飞桨的软硬件部署生态!
Paddle2ONNX项目地址:
https://github.com/PaddlePaddle/Paddle2ONNX
什么是ONNX
ONNX(Open Neural Network Exchange)是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架,可以采用相同格式存储模型数据并交互。
简而言之,ONNX相当于是一套统一的深度学习模型格式。基于这一套统一的格式,很多厂商的硬件和软件天然支持运行ONNX格式的模型。关注飞桨的用户此前就应该了解到,Paddle Lite不仅可以支持飞桨原生模型部署,同时也支持PyTorch模型的部署,其技术路径就是通过PyTorch导出ONNX格式模型,再通过X2Paddle转换为飞桨模型格式进行部署。
不了解的童鞋快戳链接,了解X2Paddle项目:
https://github.com/PaddlePaddle/X2Paddle
什么是Paddle2ONNX
飞桨作为国内最早开源的开源框架,在过去一年中技术生态迅猛发展,为开源社区贡献多个模型套件。其中,目标检测模型套件推出产业实践最优模型PP-YOLO,性能和精度都超过原生的YOLO-V4;在文字识别方向,PP-OCR在2020年一经开源,便吸引了大量开发者使用,多次登陆GitHub技术趋势榜;另外,在多个国际权威语义评测中获得冠军的预训练模型ERNIE,也升级至2.0。飞桨进步,永不止步。为了帮助开发同学解决部署环境难题,飞桨也在不断探索。
现在,飞桨与ONNX开源组织进行了合作,开源了Paddle2ONNX项目,并基于Paddle2ONNX与英特尔合作,打通了飞桨模型在OpenVINO上的部署推理。
本月,我们将发布Paddle2ONNX最新版本V0.5,带来更多重磅功能,覆盖更多飞桨官方模型,期望通过ONNX这个桥梁,进一步推动飞桨、开发者和软硬件厂商的合作!
ONNX的桥梁作用
Paddle2ONNX项目升级解读
基于飞桨框架2.0,新版本的Paddle2ONNX主要新增实现了以下重要功能。
支持基于飞桨框架2.0导出动态图模型
在飞桨框架升级2.0后,框架已经内置paddle.onnx.export接口,用户在代码中可以调用接口以ONNX协议格式保存模型。此外,用户已经保存的飞桨模型,也可以通过Paddle2ONNX加载后进行转换。本文的使用教程部分,会附有针对动态图和静态图模型的转换方法,以供大家参考体验。
更丰富的Paddle OP覆盖
新版本的Paddle2ONNX支持多达88个Paddle OP算子。在转换过程中,支持用户指定转换为ONNX 1到12任意版本的模型,提升模型的适配能力。
支持转换飞桨CV、NLP领域的主流模型
覆盖CV和NLP领域主流模型,不仅支持PP-YOLO这样模型新星的转换,还开始支持ERNIE这样NLP领域的王牌!它们均已支持转为ONNX进行部署,有需求的同学快去试试吧!
此前就有部分用户咨询飞桨小哥哥:飞桨PP-YOLO、ERNIE等明星模型,能不能用ONNX方式来部署?现在小哥哥现身回答你!
Paddle2ONNX使用教程
本教程将向大家展示如何将飞桨官方内置的MobileNetV2动态图模型,导出为ONNX格式的模型,并使用ONNXRunTime工具验证模型的正确性。
将动态图模型导出为ONNX模型
使用飞桨框架2.0构建的动态图模型,可以通过调用paddle.onnx.export接口,实现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 格式文件——mobilenet_v2.onnx。
将静态图模型导出为ONNX模型
通过命令行调用paddle2onnx命令可完成静态图模型的转换。
# 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
执行结果:
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
这里,我们可以看到推理时间需要0.0260秒,推理结果与转换前的飞桨模型相比几乎一致。详细示例信息可以参考AI Studio项目“Paddle2.0导出ONNX模型和推理”,地址:
https://aistudio.baidu.com/aistudio/projectdetail/1461212
除了上面的例子外,还有更多使用和了解Paddle2ONNX的方式:
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
Paddle2ONNX项目地址:
https://github.com/PaddlePaddle/Paddle2ONNX
欢迎给项目Star,支持项目工程师的工作!
未来,Paddle2ONNX还将支持更多的模型,如果您有相关的需求,欢迎加入官方群与我们交流。
如扫码失败,请加微信 AIDigest,备注“模型”,飞桨小哥哥拉你入群
如果您想详细了解更多飞桨的相关内容,请参阅以下文档。
·飞桨官网地址·
https://www.paddlepaddle.org.cn/·
飞桨开源框架项目地址·
GitHub: https://github.com/PaddlePaddle/Paddle
Gitee: https://gitee.com/paddlepaddle/Paddle
https://www.oschina.net/search?scope=news&q=%E6%9E%9C%E6%95%A2%E8%80%81%E8%A1%97%E8%B5%8C%E5%9C%BA%E9%91%AB%E4%BD%B0%E5%88%A9%E7%BD%91%E5%9D%80B2024%C2%B7CN%E4%B8%9C%E8%90%A5%E8%AE%BF%E8%B0%88 https://ai.baidu.com/search/%E7%8E%89%E5%92%8C%E5%A8%B1%E4%B9%90%20%E4%BC%9A%E5%91%98%E4%B8%AD%E5%BF%83%E7%9B%B4%E8%90%A5%E7%BD%91TL262%C2%B7C%EF%BC%AFM%E6%88%90%E9%83%BD%E7%83%AD%E9%97%A8%EF%BC%93%EF%BD%9E/product/1 https://search.dxy.cn/?age=1&words=%E6%B0%B8%E6%98%8C%E5%A8%B1%E4%B9%90%E6%9C%89%E6%B2%A1%E6%9C%89%E5%81%87%E3%80%90TL262%C2%B7C%EF%BC%AFM%E3%80%91%E6%BB%A8%E5%B7%9E%E7%BE%8E%E9%A3%9F%EF%BC%A2%EF%BD%99 http://app.chinaarchives.cn/?wd=%E7%BC%85%E7%94%B8%E9%BE%99%E8%85%BE%E5%A8%B1%E4%B9%90%E6%B3%A8%E5%86%8C%E3%80%90%E5%AE%98%E7%BD%91%E2%86%92B2024%C2%B7CN%E3%80%91%E7%99%BE%E8%89%B2%E4%BA%BA%E6%89%8D%E7%BD%91%EF%BD%98&app=search&controller=index&action=search&type=all&order=segments&page=1 https://www.36dm.club/search.php?keyword=%E6%B2%B3%E5%8D%97%E6%BC%AF%E6%B2%B3%E7%9C%9F%E4%BA%BA%E9%BE%99%E8%99%8E%E3%80%90%E5%AE%98%E7%BD%91%E2%86%92B2024%C2%B7CN%E3%80%91%E6%B5%8E%E5%8D%97%E8%81%94%E9%80%9A%EF%BC%A8%EF%BC%A1%EF%BD%98
赞!
框架界的互联互通~
非常棒