因为训练好的模型框架来源比较多, 每个框架部署的方式不一样,造成不便, 可以通过模型转换统一到同一格式. 国内的框架是飞桨paddle
, 所以可以统一到paddle
模型.
比如把torch
框架 ultralytics/yolov5 的模型转换为 paddle
的模型.
技术选型
转换路径: torch -> onnx -> paddle
百度提供PaddlePaddle/X2Paddle 工具来转换.由于版本的差异按照官方文档的代码转换方式全都报错,经过不同的尝试,最后导出成功.如果按官方文档的方式报错,可以尝试切换版本到已成功的环境.
如下所示:1
2
3
4
5onnx 1.11.0
paddlepaddle 2.3.0
torch 1.10.1
torchvision 0.11.2
x2paddle 1.3.6
torchvision
和 torch
的版本是需要相对应的,可以查看 pypi 上面的适配表.
目录结构:1
2
3
4
5
6
7
8
9
10
11$ tree -L 1
.
|-- 1.jpg
|-- pd_model
|-- t1.py
|-- t2p_utils.py
|-- test.py
|-- venv
|-- yolov5
|-- yolov5s.onnx
`-- yolov5s.pt
torch 转换为 onnx
已经成功的是v6.1版本,如果最新代码失败,可以切换到该版本尝试
1 | # 下载代码,并安装依赖, |
onnx 转换为 paddle
转换成功就保存在pd_model目录中1
2
3pip install x2paddle
x2paddle --framework=onnx --model=yolov5s.onnx --save_dir=pd_model
转换成功的目录1
2
3
4
5
6|-- inference_model
| |-- model.pdiparams
| |-- model.pdiparams.info
| `-- model.pdmodel
|-- model.pdparams
`-- x2paddle_code.py