CRNN+CTCocr识别采坑记录

最近在做ocr识别项目,由于是第一次接触这个东西,所以在整个过程中采到了非常多的坑,这里就记录一下采坑的地方,以及都是怎么解决的,方便大家接下来使用。
1、首先是这个坑

pytorch错误:RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED (安装cuda)
RuntimeError: CUDA error: unspecified launch failure

这两个错误表达的意思好像是内存或者显存不够,这个一般是在训练开始几轮之后才会发生,这个时候就要去检查train时传入hatch_size和test的batch_size,一般这个这两个是同时使用的,train和test同时发生,如果train的batch_size和test的都等于4那么两个在一起就是8了,这个时候内存很有可能不够,就会发生这个错误,那么我们要做的就是把这两个数字调小。
2、第二个经验就是我们使用360w提供的数据集的时候注意他们的标签长度都是10个,而且都是需要在加载数据的时候去查字典,把编码转换成真正的文字符号的,那么我们在训练我们自己的数据集的时候有很多时候都是不定长的,我们还有360w的那个数据加载代码肯定是会报错的,所以我们必须使用own这个文件里面的代码。数据集的格式是下面这个样子
在这里插入图片描述左边是我们训练的图片,右边是txt格式的文件,文件里面是图片的名字+格式 (格式和内容之间保留一个空格)+图片上的内容,
3、要注意你在训练的时候是使用完整的训练还是迁移训练,这个可以在train文件的代码中可以看到

    if config.TRAIN.FINETUNE.IS_FINETUNE:#迁移学习
        model_state_file = config.TRAIN.FINETUNE.FINETUNE_CHECKPOINIT
        if model_state_file == '':
            print(" => no checkpoint found")
        checkpoint = torch.load(model_state_file, map_location='cpu')
        if 'state_dict' in checkpoint.keys():
            checkpoint = checkpoint['state_dict']

        from collections import OrderedDict
        model_dict = OrderedDict()
        for k, v in checkpoint.items():
            if 'cnn' in k:
                model_dict[k[4:]] = v
        model.cnn.load_state_dict(model_dict)
        if config.TRAIN.FINETUNE.FREEZE:
            for p in model.cnn.parameters():
                p.requires_grad = False

    elif config.TRAIN.RESUME.IS_RESUME:#重新训练
        model_state_file = config.TRAIN.RESUME.FILE
        if model_state_file == '':
            print(" => no checkpoint found")

差不多与这个一样。
4、还有一个就是.yaml文件的修改以及里面参数的意思这里与大家分享一下

GPUID: 0 #GPU的编号
WORKERS: 0 #0表示单线程工作,一般设置为0 
PRINT_FREQ: 10 # 多少个step打印一次训练信息
SAVE_FREQ: 10 #多少个epoch保存一次
PIN_MEMORY: False #读取数据集加速
OUTPUT_DIR: 'output'

CUDNN:
  BENCHMARK: True 
  DETERMINISTIC: False
  ENABLED: True

DATASET:
  DATASET: OWN
  ROOT: "C:/Users/ljs/Desktop/test3" #加载图片的路径
  CHAR_FILE: 'lib/dataset/txt/char_std_5990.txt' #加载字典的路径
  JSON_FILE: {'train': 'lib/dataset/txt/train.txt', 'val': 'lib/dataset/txt/test.txt'} #这两个是训练和测试需要文件路径
  SCALE_FACTOR: 0.25
  ROT_FACTOR: 30
  STD: 0.193 #这个与下面这个应该是归一化的参数,
  MEAN: 0.588 
  ALPHABETS: '' #字母表

TRAIN:
  BATCH_SIZE_PER_GPU: 2 #训练时加载数据batch_size的大小
  SHUFFLE: True #洗牌,避免喂入数据的顺序对网络造成影响,增加随机性,提高泛化能力
  BEGIN_EPOCH: 0
  END_EPOCH: 200 #训练圈数
  RESUME:
    IS_RESUME: False #是否重新训练
    FILE: ''
  OPTIMIZER: 'adam'
  LR: 0.0001
  WD: 0.0
  LR_STEP: [60, 80]
  LR_FACTOR: 0.1
  MOMENTUM: 0.0
  NESTEROV: False #梯度下降算法
  RMSPROP_ALPHA:
  RMSPROP_CENTERED:
  FINETUNE: #迁移训练
    IS_FINETUNE: True
    FINETUNE_CHECKPOINIT: 'output/checkpoints/crnn.pth'
    FREEZE: true #使用迁移训练是否冻结参数

TEST:
  BATCH_SIZE_PER_GPU: 2 #测试时加载batch_size的大小
  SHUFFLE: True  # for random test rather than test on the whole validation set
  NUM_TEST_BATCH: 4
  NUM_TEST_DISP: 10

MODEL:
  NAME: 'crnn'
  IMAGE_SIZE:
    OW: 280. # origial width: 280
    H: 32
    W: 160   # resized width: 160
  NUM_CLASSES: 0
  NUM_HIDDEN: 256

目前只记得这些,如果接下来还有别的错误发生我会随时记录下来与大家分享一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值