将YoloV3模型的pytorch权重文件转化为onxx

pytorch训练有两种方式保存权重文件,一是保存模型本身文件另一种是保存state_dict文件
保存state_dict文件速度较快但要先读取模型

torch.save(model.state_dict(), 'logs/Epoch%d-Total_Loss%.4f-Val_Loss%.4f.pth'%((epoch+1),total_loss/(epoch_size+1),val_loss/(epoch_size_val+1)))

torch.save(model, 'logs/Epoch%d-Total_Loss%.4f-Val_Loss%.4f.pt' % ((epoch + 1), total_loss / (epoch_size + 1), val_loss / (epoch_size_val + 1)))

state_dict

参考yolov3中训练文件,其中YoloBody是训练中的模型代码,config是定义的类名和类数量等数据,会影响最后的推理输出层,在这里需要

import torch
from nets.yolo3 import YoloBody
from utils.config import Config

config=Config
        # ---------------------------------------------------#
        #   建立yolov3模型
        # ---------------------------------------------------#
net = YoloBody(config)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)

state_dict= torch.load('Epoch259-Total_Loss37.5095-Val_Loss38.6587.pth', map_location=device)
net.load_state_dict(state_dict)
net.eval()
net.cuda()
batch_size = 1  #批处理大小
input_shape = (3,416,416)   #输入数据

input_data_shape = torch.randn(batch_size, *input_shape, device=device)

torch.onnx.export(net, input_data_shape, "helmet.onnx", verbose=True)

model

torch.load读取的直接为net也不需要导入模型代码

import torch



device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)

net= torch.load('Epoch5-Total_Loss90.9717-Val_Loss83.7143.pt', map_location=device)
net.eval()
net.cuda()
batch_size = 1  #批处理大小
input_shape = (3,416,416)   #输入数据

input_data_shape = torch.randn(batch_size, *input_shape, device=device)

torch.onnx.export(net, input_data_shape, "helmet2.onnx", verbose=True)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值