前段时间做项目需要将pth转成onnx模型,这里将经验分享出来。
首先你得看你的pth模型是只有参数还是说既有参数,也有模型结构,怎么看呢?将你的pth模型在netron中打开Netron,如果模型是黑白的,就说明只有参数,没有模型结构,如图一。如果是彩色的,就是既有参数也有模型结构的,如图二。
下面直接上代码(只有参数的pth):
import torch
import nets.facenet as models
from utils.config import cfg_mnettorch_model = torch.load("facenet_mobilenet.pth", map_location= 'cpu') # pytorch模型加载
model = models.Facenet(mode='val')
#model.load_state_dict(torch_model)batch_size = 1#批处理大小
input_shape = (3, 160, 160)#输入数据,改成自己的输入shape# #set the model to inference mode
model.eval()x = torch.randn(batch_size, *input_shape)# 生成张量
export_onnx_file = "facenet_mobilenet.onnx"# 目的ONNX文件名
torch.onnx.export(model,
x,
export_onnx_file,
opset_version=10,
do_constant_folding=True,# 是否执行常量折叠优化
input_names=["input"], # 输入名
output_names=["output"])# 输出名
#dynamic_axes={"input":{0:"batch_size"},# 批处理变量
#"output":{0:"batch_size"}})
整体思路就是:因为我们模型只有参数,所以要加上模型架构。
对于既有参数有模型架构的,网络上有很多,这里就不说了。
图一:
文章图片
图二:
文章图片
【深度学习|pth转onnx】
推荐阅读
- 大数据|阿里巴巴达摩院发布2021十大科技趋势!
- 人工智能|海洋捕食者算法 MPA
- 文献阅读|Transformer系列目标检测模型小抄(1)
- 目标检测|目标检测损失函数
- 目标检测|YOLOv5-6.1添加注意力机制(SE、CBAM、ECA、CA)
- 设备指纹技术详解丨设备指纹知多少,看这场直播就够了!
- DeepLearning学习|(pytorch-深度学习)使用pytorch框架nn.RNN实现循环神经网络
- 编程语言|一起看 I/O | Android 更新一览
- 深度学习|yolov5-labelimg进行数据标注【深度学习】