paddlepaddle模型转换onnx指导文档

一、检查本机cuda版本

1、右键找到invdia控制面板

2、找到系统信息

3、点开"组件"选项卡, 可以看到cuda版本,我们这里是cuda11.7

cuda驱动版本为516.94

二、安装paddlepaddle环境

1、获取pip安装命令 ,我们到paddlepaddle官网,找到cuda对应的安装命令

因为安装 完成paddlepaddle后还需要安装其他依赖,所以我们加上 -i 指定国内的pip源

python 复制代码
python -m pip install -i   https://mirror.baidu.com/pypi/simple  paddlepaddle-gpu==2.5.1.post117 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

2、在anaconda中新建一个python3.9的环境

python 复制代码
conda create -n py39_paddle python=3.9

3、切换conda环境到我们新建的环境

python 复制代码
conda activate py39_paddle

4、运行pip安装命令

python 复制代码
python -m pip install -i   https://mirror.baidu.com/pypi/simple  paddlepaddle-gpu==2.5.1.post117 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html

Installing collected packages: paddle-bfloat, sniffio, protobuf, Pillow, numpy, idna, h11, exceptiongroup, decorator, certifi, astor, opt-einsum, anyio, httpcore, httpx, paddlepaddle-gpu
Successfully installed Pillow-10.0.1 anyio-4.0.0 astor-0.8.1 certifi-2023.7.22 decorator-5.1.1 exceptiongroup-1.1.3 h11-0.14.0 httpcore-0.18.0 httpx-0.25.0 idna-3.4 numpy-1.26.0 opt-einsum-3.3.0 paddle-bfloat-0.1.7 paddlepaddle-gpu-2.5.1.post117 protobuf-3.20.2 sniffio-1.3.0

安装成功!!

三、模型转换

1、安装转换工具paddle2onnx

python 复制代码
python -m pip install -i   https://mirror.baidu.com/pypi/simple  paddle2onnx

2.训练模型

python 复制代码
import paddle
from paddle.vision.transforms import Normalize

transform = Normalize(mean=[127.5], std=[127.5], data_format='CHW')
# 下载数据集并初始化 DataSet
train_dataset = paddle.vision.datasets.MNIST(mode='train', transform=transform)
test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)

# 模型组网并初始化网络
lenet = paddle.vision.models.LeNet(num_classes=10)
model = paddle.Model(lenet)

# 模型训练的配置准备,准备损失函数,优化器和评价指标
model.prepare(paddle.optimizer.Adam(parameters=model.parameters()),
              paddle.nn.CrossEntropyLoss(),
              paddle.metric.Accuracy())

# 模型训练
model.fit(train_dataset, epochs=5, batch_size=64, verbose=1)
# 模型评估
model.evaluate(test_dataset, batch_size=64, verbose=1)

3.环境报错

报错内容: cudnn没有装!

4、安装cudnn,cudatookit,参考:cudnn安装指导

https://www.notion.so/3a4f57edc6e54e4eaa63ed86234cf533?pvs=25

5、训练成功!

6、模型转换

python 复制代码
# export to ONNX
save_path = 'onnx.save/lenet1' # 需要保存的路径
x_spec = paddle.static.InputSpec([None, 1, 28, 28], 'float32', 'x') # 为模型指定输入的形状和数据类型,支持持 Tensor 或 InputSpec ,InputSpec 支持动态的 shape。
paddle.onnx.export(lenet, save_path, input_spec=[x_spec], opset_version=14)

成功生成onnx文件

7、检查转换结果,没有问题

python 复制代码
# 导入 ONNX 库
import onnx
# 载入 ONNX 模型
onnx_model = onnx.load("onnx.save/lenet1.onnx")
# 使用 ONNX 库检查 ONNX 模型是否合理
check = onnx.checker.check_model(onnx_model)
# 打印检查结果
print('check: ', check)
check:  None

四、模型精度测试

1、paddlepaddle模型推理

python 复制代码
import onnxruntime
import numpy as np
img = np.random.randn(1, 1, 28, 28).astype(np.float32)
lenet.eval()
paddle_input = paddle.to_tensor(img) 
pad_output = lenet(paddle_input)

2、onnx模型推理

python 复制代码
ort_session = onnxruntime.InferenceSession('onnx.save/lenet1.onnx',providers=['CPUExecutionProvider', 'CUDAExecutionProvider'])
model_inputs = ort_session.get_inputs()
ort_inputs = {model_inputs[0].name: img}
onnx_output = ort_session.run(['linear_11.tmp_1'], ort_inputs)[0]

### 3、检查推理 结果

python 复制代码
paddle.max(pad_output-onnx_output)
Tensor(shape=[], dtype=float32, place=Place(gpu:0), stop_gradient=False,
       0.00000381)
相关推荐
码农土豆1 天前
PaddlePaddle飞桨Linux系统Docker版安装
linux·docker·paddlepaddle
该醒醒了~3 天前
PaddlePaddle推理模型利用Paddle2ONNX转换成onnx模型
人工智能·paddlepaddle
WeeJot嵌入式21 天前
使用PaddlePaddle实现线性回归模型
人工智能·线性回归·paddlepaddle
IT闫1 个月前
使用微信小程序调用飞桨PaddleX平台自行训练的模型——微信小程序用训练的牡丹花模型Demo测试
人工智能·paddlepaddle
算力魔方AIPC1 个月前
在Ubuntu 24.04 LTS上安装飞桨PaddleX
linux·ubuntu·paddlepaddle
李楷杰1 个月前
PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)
人工智能·python·开源·ocr·paddlepaddle·印章识别
诗句藏于尽头2 个月前
基于百度飞桨paddle的paddlepaddle2.4.2等系列项目的运行
百度·paddlepaddle·paddle
九转成圣2 个月前
使用DJL和PaddlePaddle的口罩检测详细指南
java·人工智能·计算机视觉·paddlepaddle·djl
飞桨PaddlePaddle2 个月前
飞桨首创 FlashMask :加速大模型灵活注意力掩码计算,长序列训练的利器
人工智能·百度·paddlepaddle·飞桨
山川而川-R2 个月前
记录如何在RK3588板子上跑通paddle的OCR模型
深度学习·ocr·paddlepaddle·1024程序员节