一键转换onnx、动态batchsize、测试onnx、判断转换前后精度是否一致、将onnx模型的每个节点特征图信息输出(超详细合集、多输入)

本文详细介绍如何将PyTorch模型转换为ONNX格式,并提供精度验证方法及特征图输出技巧。

最近项目用到onnx,对onnx内容进行总结,每一种都是测过可行,可以根据对应情况修改对应内容。

一、转换onnx

1. pt格式权重转onnx

#双输入,单输出
import torch.onnx
#根据模型图片输入设定input的h和w的尺寸大小,我是512
input = (torch.randn([1,3,512,512]).cuda(), torch.randn([1,3,512,512]).cuda())  
input_names = ['input_1', 'input_2']
output_names = ['output']

weight_path = './onnx/*****.pt'
model=torch.load(weight_path)
model = model.cuda()
model.eval()
print('load model over')

torch.onnx.export(model,
                  args=input,
                  f = './onnx/*****.onnx',
                  opset_version=11,
                  input_names=input_names,
                  output_names=output_names
                  )
print('to onnx success!')

2.pth格式权重转onnx

import torch.onnx
from model.siamunet_diff.SiamUNet_Diff import SiamUnet_diff #根据自己模型定义

####转换onnx####
input = (torch.randn([1,3,512,512]).cuda(), torch.randn([1,3,512,512]).cuda())

input_names = ['input_1', 'input_2']
output_names = ['output']

weight_path = '/home/*****.pth'
model = SiamUnet_diff(input_nbr=3, label_nbr=2).cuda()#根据自己模型定义

model.load_state_dict(torch.load(weight_path))
model.eval()#固定住dropout、 batchnorm

print('load model over')
OpenVINO可以将动态batchsizeONNX模型转换为其支持的静态batchsize模型。下面是一种实现方式: 首先,安装OpenVINO工具包,并将模型优化器(Model Optimizer)集成到环境中。该工具用于将ONNX模型转换为OpenVINO可以加载和推理的IR模型。 在转换ONNX模型之前,我们需要了解该模型动态输入形状。通常,动态batchsize模型在网络的输入节点上会标记为-1或None。我们可以使用ONNX Runtime库来动态推理模型并获取输入形状。 下一步是使用Model Optimizer将ONNX模型转换为IR模型。为了支持静态batchsize,我们需要在转换过程中指定batch参数。命令行示例如下: ``` python mo.py --input_model model.onnx --output_dir output --input_shape [B,C,H,W] --mean_values [mean_values] --scale_values [scale_values] --batch B ``` 在命令行中,我们需要提供转换ONNX模型输出目录,输入形状,均值和缩放值。重要的是,在输入形状中指定batch维度并将其设置为所需的静态batchsize。 完成转换后,我们可以使用OpenVINO进行推理,输入静态batchsize的数据进行推理。 需要注意的是,在转换和推理过程中,我们需要确保模型和数据的形状匹配,以避免错误发生。如果需要批量推理,可以使用循环迭代每个批量进行推理。 这就是使用OpenVINO将动态batchsizeONNX模型转换为静态batchsize模型的简要步骤。通过这种方式,我们可以使用OpenVINO对不同大小的批量进行高效推理。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值