CRNN-pytorch模型转libtorch模型踩坑记录

2023-05-16

这段时间一直在做CRNN文字识别的问题,从pytorch中训练好的模型然后转到libtorch中去,但是CRNN提供的代码没有转libtorch模型的部分,于是就在网上到处乱找,其中找到了这篇转的代码crnn模型转换。感兴趣的可以进去看一下,这个大哥也是从git上找的别人,可能他的训练代码的网络和转换代码的网络是一样的结构,所以它可以转换成功。
我在转换的时候首先是报不能转换成功,然后修改了部分代码之后,能够转换成功,但是在libtorch上推理的时候为啥一点准确度都没有呢,哪怕准确一点就可以啊,然后就开始各种查,检测每个变量时候和pytorch的变量是否一样,不管是图片的预处理还是从网络输出的张量形状,最后还是不行,就寻思是不是转换的时候出了问题,然后就在他的基础上进行了修改,最后可以在自己的网络结构上转换成功;

import numpy as np
import time
import cv2
import torch
from torch.autograd import Variable
import lib.utils.utils as utils
import lib.models.crnn as crnn
import lib.config.alphabets as alphabets
import yaml
from easydict import EasyDict as edict
import os
import random


def deal_cfg(path_cfg):
    with open(path_cfg, 'r') as f:
        config = yaml.load(f)
        config = edict(config)

    config.DATASET.ALPHABETS = alphabets.alphabet
    config.MODEL.NUM_CLASSES = len(config.DATASET.ALPHABETS)
    print("len(config.DATASET.ALPHABETS):",len(config.DATASET.ALPHABETS))
    return config

if __name__ == '__main__':

    path_cfg = "./lib/config/OWN_config.yaml"
    path_pth = "/root/CRNN_Chinese_Characters_Rec-stable/output/OWN/crnn/acc_0.9766.pth"


    print("cuda?", torch.cuda.is_available())
    config = deal_cfg(path_cfg)
    device = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu')

    converter = utils.strLabelConverter(config.DATASET.ALPHABETS)

    model = crnn.get_crnn(config).to(device)
    print('loading pretrained model from {0}'.format(path_pth))
    checkpoint = torch.load(path_pth)
    if 'state_dict' in checkpoint.keys():
        model.load_state_dict(checkpoint['state_dict'])
    else:
        model.load_state_dict(checkpoint)

    model.eval()

    img = torch.ones(1,1,32,320).cuda()

    img = img.type(torch.FloatTensor)

    img = img.to(device)
   


    ##################################################################
    traced_script_module = torch.jit.trace(model, img)
    traced_script_module.save("./acc.9833.pt")
    ##############################################################

这样转成功了,我的网络结构和上面那位大哥提供连接的结构不一样,所以我猜是结构的原因,导致推理不准确,
另外还是有一点是我在训练的时候添加了dropout层,在转换的时候我把dropout层给注销掉了,我也不知道该不该注销,先这样吧。接下来验证一下精度是否可以。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CRNN-pytorch模型转libtorch模型踩坑记录 的相关文章

随机推荐

  • Makefile

    Makefile的引入及规则 使用keil mdk avr等工具开发程序时点点鼠标就可以编译了 xff0c 使用Keil xff0c MDK xff0c AVR等工具开发程序时点点鼠标就可以编译了 它的内部机制是什么 它怎么组织管理程序 怎
  • 转载知乎-深度可分离卷积

    深度可分离卷积
  • vgg16网络改深度可分离卷积

    原网络 span class token keyword class span span class token class name CNN0 span span class token punctuation span nn span
  • Dropout 丢弃函数的使用

    Class span class token class name USeDropout span span class token punctuation span nn span class token punctuation span
  • libtorch-resnet18

    与大家分享一下自己在学习使用libtorch搭建神经网络时学到的一些心得和例子 xff0c 记录下来供大家参考 首先我们要参考着pytorch版的resnet来搭建 xff0c 这样我们可以省去不必要的麻烦 xff0c 上代码 xff1a
  • Yolov5 -libtorch部署

    将python训练好的网络模型转为可以再libtorch上走的pth模型 xff0c 转换代码如下 xff1a 可以直接赋值粘贴 import argparse import sys import time sys span class t
  • c++ 关于error LINK2005: XXXX已经在 .obj 中定义“的问题

    代码很多的时候出现这个问题很棘手 xff0c 小号大量时间来排查问题 xff0c 所以一边学习一边记录学习中出现的问题 原因 xff1a 是因为编程习惯的问题 xff0c 直接在头文件 h中直接定义了变量或者函数 xff0c 然后A cpp
  • 使用vs2019将libtorch或者网络打包成dll

    最近在搞一个程序 xff0c 需要把libtorch打包成dll xff0c 让别人使用 xff0c 在网上找了好久都没只有找到合适的答案 xff0c 最后在一个博主大哥那里找到了 xff0c 很是感激这位大哥与我们分享自己的经验 xff0
  • 【无标题】 libtorch C++ vs2017 debug模式可以正确加载模型,release模式错误

    转发 xff1a libtorch C 43 43 vs2017 debug模式可以正确加载模型 xff0c release模式错误 https blog csdn net weixin 43862688 article details 1
  • targetcli

    Linux IO LIO Target is an open source implementation of the SCSI target thathas become the standard one included in the
  • libtorch-加载预训练模型出现No such serialized submodule: ‘xxx‘

    今天在用libtorch训练得时候 xff0c 想用预训练模型加速训练 xff0c 居然报错 xff0c 以为是模型得问题 xff0c 然后重新训练了一个模型 xff0c 作为预训练模型 xff0c 还是报错 xff0c 一时找不到原因 x
  • QT学习之路-记事本

    1 在创建记事本之前先明白有哪些功能 xff1a 先创建一个菜单栏 xff0c 菜单栏是用来装各种功能的一个地方如上图所示 xff0c 文件 编辑所在的地方为菜单栏 xff0c span class token comment 创建菜单栏
  • yolov5-pytorch导出模型问题

    在官网提供的代码中 xff0c 很方便的可以把pytorch的模型转为libtorch的模型 xff0c 但是在转换前要明白自己转换后的模型是仅仅为了推理部署 xff0c 还是说用转换后的模型作为libtorch的预训练模型继续使用呢 xf
  • libtorch与pytorch索引张量值操作([:]与index)

    由于我最近在学习libtorch相关的东西 xff0c 所以就记录一下使用libtorch与pytorch一样对张量操作的语法 下面是我转载的一位大佬的文章 xff0c 这里只做技术探讨 xff0c 不做其他用途 想要学习的可以参考一下大佬
  • QT 报 QMetaObject::connectSlotsByName: No matching signal for on_btn_clicked()

    在QT中 xff0c 自己编写命名信号和槽的时候 xff0c 在用connect的时候报出以下错误 xff1a QMetaObject span class token double colon punctuation span conne
  • CRNN-模型转换问题Missing Errorin loading state_dict for CRNN

    在将CRNN pytorch模型转为libtorch模型的时候出现报错情况 xff0c Missing Errorin loading state dict span class token keyword for span CRNN 96
  • CRNN-libtorch模型推理的时候报错std:runtime_error

    使用libtorch模型推理的时候出现报错std runtime error 这里报错的情况一般是数据不同步的问题 xff0c 也就是说我们的模型是在gpu上 xff0c 而数据是在cpu上 xff0c 那么要做的一件事就是检查forwar
  • 数据集txt格式划分为多个txt文件夹

    简单记录一下数据标签txt格式划分为多个文件 xff0c 通常我们标注号的标签 xff0c 都是在一个txt文件夹中 xff0c 我们训练的时候需要把txt中的标签按照一定的比例划分为多个文件 xff0c 这里贴出划分为三个文件的代码 xf
  • 租用终端训练网络遇到的一些坑

    最近由于电脑配置和经济的问题 xff0c 想训练模型 xff0c 无奈只能选择在平台上训练了 xff0c 我使用的是AutoDL这个平台 xff0c 感觉还行 xff0c 还是挺划算 感兴趣或者需要的老铁可以点击蓝色字体进去尝试一下 接下来
  • CRNN-pytorch模型转libtorch模型踩坑记录

    这段时间一直在做CRNN文字识别的问题 xff0c 从pytorch中训练好的模型然后转到libtorch中去 xff0c 但是CRNN提供的代码没有转libtorch模型的部分 xff0c 于是就在网上到处乱找 xff0c 其中找到了这篇