pytorch篇---权重转换之pth转onnx

pytorch 模型训练得到的权重(.pth)

转换成onnx

import io
import numpy as np
import torch
import torch.onnx
from model.nets.yolo4 import YoloBody
from conf.my_conf import anchors_path, classes_path, model_path_train


weight_file = '../data/weights/Epoch75-Total_Loss0.7506-Val_Loss1.6806.pth'
image_path = '../data/img/0617_Bin_026.jpg'
onnx_file_name = '../data/weights/Yolo_bin.onnx'
batch_size = 1
num_anchors, num_classes = 3, 3
IN_IMAGE_H = 416
IN_IMAGE_W = 416


model = YoloBody(num_anchors, num_classes)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

# 加快模型训练的效率
model_dict = model.state_dict()
pretrained_dict = torch.load(weight_file, map_location=device)
pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)}
model_dict.update(pretrained_dict)
model.load_state_dict(model_dict)

dummy_input1 = torch.randn((1, 3, IN_IMAGE_H, IN_IMAGE_W), requires_grad=True)
input_names = ["input"]  # onnx输入接口的名字,需要与模型输入结果对应
output_names = ["output0", "output1", "output2"]  # onnx输出接口的名字,需要与模型输出结果对应
dynamic_axes = {"input": {0: "batch_size"}, "output0": {0: "batch_size"}, "output1": {0: "batch_size"}, "output2": {0: "batch_size"}}


torch.onnx.export(model,
                  dummy_input1,
                  onnx_file_name,
                  export_params=True,
                  opset_version=11,
                  do_constant_folding=True,
                  input_names=input_names,
                  output_names=output_names,
                  dynamic_axes=dynamic_axes)

得到一个如下的权重文件
在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心惠天意

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值