crnn-pth转换成onnx(pth输入输出变长转换)

注意事项

1.首先torch1.1.0是没有dynamic_axes这个开关的,所以我升级到了1.14.0。
2.其次如果是变长的话,pth模型找不到input和output的node-name,可以自己随意定义。
3.weights和data必须同样的dtype,可以是cpu也可以是gpu,如果多gpu训练的model,去掉module即可。
4.dynamic_axes找到当前变长的维度,用list或者dict表示,list自动分配名字,很方便。

import torch
import torchvision
import onnx
from crnn.models import crnn as crnn
from collections import OrderedDict

from crnn import keys
from config import ocrModel, LSTMFLAG, GPU


alphabet = keys.alphabetChinese
# LSTMFLAG=True crnn 否则 dense ocr
model = crnn.CRNN(32, 1, len(alphabet) + 1, 256,
                    1, lstmFlag=True)

state_dict = torch.load(ocrModel,map_location='cpu')
new_state_dict = OrderedDict()
for k, v in state_dict.items():
    name = k.replace('module.', '')  # remove `module.`
    new_state_dict[name] = v
# load params
model.load_state_dict(new_state_dict)
model.eval()

input_names = ["input"]
output_names = ["output"]
 #batch,channel,h,w

image = torch.zeros(1, 1, 32, 32)
inputs = image

#w->w*32/h

dynamic_axes = {"input":[3],"output":[0]}
torch.onnx.export(model, inputs, './oup_dingchang.onnx', 
                    export_params=True, 
                    verbose=False, 
                    input_names=input_names, 
                    output_names=output_names, 
                    dynamic_axes=dynamic_axes,
                    opset_version=9)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值