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
posted @   老张哈哈哈  阅读(371)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示