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)
相关推荐
Ronin-Lotus1 天前
深度学习篇---模型参数调优
人工智能·pytorch·python·深度学习·paddlepaddle·batch·学习率
Ronin-Lotus1 天前
深度学习篇---模型GPU训练
人工智能·pytorch·python·深度学习·paddlepaddle·并行·openmp
Ronin-Lotus7 天前
深度学习篇---PaddleOCR
人工智能·python·深度学习·paddlepaddle·paddleocr·文本识别
冲上云霄的Jayden16 天前
基于CPU使用paddlex OCR识别图片内容
python·ocr·conda·paddlepaddle·paddlex·银行回执·单据提取
步木木17 天前
使用 PaddlePaddle 官方提供的 Docker 镜像
人工智能·docker·paddlepaddle
OdooWizard1 个月前
【深度学习】使用飞桨paddle实现波士顿房价预测任务
深度学习·paddlepaddle·paddle
Logout:1 个月前
[AI]docker封装包含cuda cudnn的paddlepaddle PaddleOCR
人工智能·docker·paddlepaddle
路来了2 个月前
爬虫案例-爬取某度文档利用飞桨ch_pp-ocrv3模型提高对图片的识别
人工智能·爬虫·paddlepaddle
沉到海底去吧Go2 个月前
【自动化办公】批量图片PDF自定义指定多个区域识别重命名,批量识别铁路货物运单区域内容改名,基于WPF和飞桨ocr深度学习模型的解决方案
ocr·paddlepaddle·自动化办公pdf批量操作·pdf电子发票批量提取解决方案·pdf电子发票提取明细到表格·批量获取pdf多区域内容表格·pdf订单详情多区域提取表格
Ronin-Lotus2 个月前
深度学习篇---计算机视觉任务&模型的剪裁、量化、蒸馏
人工智能·pytorch·python·深度学习·计算机视觉·paddlepaddle·模型剪裁、量化、蒸馏