zoukankan      html  css  js  c++  java
  • finetune cnocr

    • 制作数据集
      1. 这里用的是text-render制作的数据集, 这个开源项目可以制作包含中英文字符的数据,但是这里我们想要制作包含希腊字母的数据,项目本身不支持希腊字母,因此首先需要下载支持希腊字母的字体,我下载的是Gentiumarial-unicode-ms,下载完之后还需要制作一个包含要生成希腊字符的txt文件greek.txt。我的文件里不仅包含希腊字符还包含了数学符号和英文字母。到时候生成数据的时候就是从这个txt里随机选取字符。同时还要注意将额外添加的希腊字母添加到./data/label_cn.txt中否则无法生成图片
      2. 具体操作指令见这里, 最后生成的图片会./output/greek/路径下,除了图片还有有一个label.txt文件,文件中包含了图片名字,以及图片字符在./data/label_cn中对应的id(位置)
    • 处理数据
      1. 将./output/greek/路径下的图片分为train和text,同时生成一个train.txt和text.txt文件, 最后整理得到一个含有图片和txt的文件夹greek-dataset,文件内容包括 greek, train.txt, test.txt
      2. 执行makefile数据处理的步骤,gen-lst和gen-rec
      ATA_ROOT_DIR = data/sample-data
      REC_DATA_ROOT_DIR = data/sample-data-lst
      
      # `EMB_MODEL_TYPE` 可取值:['conv', 'conv-lite-rnn', 'densenet', 'densenet-lite']
      EMB_MODEL_TYPE = densenet-lite
      # `SEQ_MODEL_TYPE` 可取值:['lstm', 'gru', 'fc']
      SEQ_MODEL_TYPE = fc
      MODEL_NAME = $(EMB_MODEL_TYPE)-$(SEQ_MODEL_TYPE)
      
      # 产生 *.lst 文件
      gen-lst:
          python scripts/im2rec.py --list --num-label 20 --chunks 1 
              --train-idx-fp $(DATA_ROOT_DIR)/train.txt --test-idx-fp $(DATA_ROOT_DIR)/test.txt --prefix 
              $(REC_DATA_ROOT_DIR)/sample-data
      
      # 利用 *.lst 文件产生 *.idx 和 *.rec 文件。
      # 真正的图片文件存储在 `examples` 目录,可通过 `--root` 指定。
      gen-rec:
          python scripts/im2rec.py --pack-label --color 1 --num-thread 1 --prefix $(REC_DATA_ROOT_DIR) --root examples
      
    • finetune
      python scripts/cnocr_train.py --gpu 0
            --emb_model_type $(EMB_MODEL_TYPE) 
            --seq_model_type $(SEQ_MODEL_TYPE)  
            --epoch 20 --lr 1e-4 
            --train_file $(REC_DATA_ROOT_DIR)/sample-data_train 
            --test_file $(REC_DATA_ROOT_DIR)/sample-data_test 
            --load_epoch 0040 --out_model_dir path/to/cn_ocr_model/
      
      作者提供的train指令是从头开始训练的指令,如果想finetune的话需要执行上边的指令. 如果需要在GPU上训练,把上面命令中的参数 --gpu 0改为--gpu <num_gpu>,其中的<num_gpu> 为使用的GPU数量。
    • 注意,使用GPU训练需要安装mxnet的GPU版本,如mxnet-cu90。在安装的时候要注意pip install cnocr会自动安装cpu版本mxnet,之后如果自己再安装gpu版本的mxnet, 运行的时候会报错。经多次尝试发现发现要先分别安装gluoncv和对应CUDA版本下的mxnet,再去除依赖直接安装cnocr。 安装顺序如下(顺序不要乱!)
      conda install -c anaconda cudatoolkit==9.0
      pip install gluoncv
      pip install mxnet-cu101
      pip install cnocr --no-dependencies
      
    • 给字典添加额外字符
      • 当我们给字典添加额外字符后,需要修改https://github.com/breezedeus/cnocr/blob/master/cnocr/hyperparams/cn_hyperparams.py中的self._num_classes的值, 将其改为目前字典中的字数+1,此外还要调整网络结构,更改网络最后的fc层的输出数目, 具体可以参看这篇文章link
  • 相关阅读:
    nexus 手动更改 私服包
    maven 构建时 错误: 程序包netscape.javascript不存在
    RocketMQ
    NSQ
    beego 实现API自动化文档
    动态追踪技术漫谈
    go vendor管理Golang项目依赖
    consul介绍
    golang rpc介绍
    golang 使用os/exec配合context实现的超时机制
  • 原文地址:https://www.cnblogs.com/laozhanghahaha/p/14681081.html
Copyright © 2011-2022 走看看