Bootstrap

百度飞桨paddleocr训练rec模型记录

目录

一、背景

二、训练流程

        2.1、下载paddleocr项目

        2.2、创建相关文件夹

        2.3、下载rec预训练模型

        2.4、修改训练配置文件

        2.5、训练

        2.6、保存inference

        2.7、预测


一、背景

        在项目进行中,遇到了一个比较棘手的问题,爬虫遇到网站有验证码识别校验的情况。当时第一步是寻找了相关的python识别包直接去识别,第一个找的就是paddleocr这个包,但效果不是很好。可能是因为验证码图片上的干扰线太多导致的。调研后跟着也官方文档尝试了一下paddleocr的训练。

二、训练流程

        2.1、下载paddleocr项目

        两种方式,从GitHub上克隆paddleocr的项目到本地或者从GitHub上下载zip包再解压

git clone http://github.com/PaddlePaddle/PaddleOCR.git

        2.2、创建相关文件夹

paddleocr
    pretrain_models
    tranMyOCR
        rec
            test
                xxx.png
            train
                xxx1.png
                xxx2.png
            codeChar.txt
            rec_gt_train.txt
            rec_gt_test.txt

其中:
    pretrain_models文件夹存放下载的预训练模型;
    paddleocr是克隆下来的项目文件夹;
    tranMyOCR是我们训练主文件夹;
    rec文件夹用来标识我们训练的模型类别,常用的有det、cls、rec等;
    test文件夹下存放验证集;
    train文件夹下存放训练集;
    codeChar.txt是所有希望能被正确识别的字符;
    rec_gt_train.txt列出了所有训练集数据与标签集合;
        xxx.jpg    1a4d
    rec_gt_test.txt列出了所有测试集数据与标签集合;

        test文件夹下存放验证集:

        train文件夹下存放训练集:

        codeChar.txt文件内容:

./tranMyOCR/rec/train/

        rec_gt_train.txt文件内容:

         rec_gt_test.txt文件内容:

        2.3、下载rec预训练模型

        本文示例使用的是en_pp-ocrv3_rec版本的实验的,可能v4版本效果更好,需要自行去尝试。下载后移入到事先建好的pretrain_models文件夹下,再解压即可。

https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar

        2.4、修改训练配置文件

        rec模型训练配置文件路径:./configs/rec/PP-OCRv3 下的en_PP-OCRv3_rec.yml文件,同目录下有中文、英文分别。不明白有什么区别,不过我想既然要训练的是字符验证码,那肯定是要使用英文模型训练配置文件。

        配置文件中涉及到修改的参数有:

Global:
    use_gpu:是否开启GPU训练
    epoch_num:训练轮数
    print_batch_step:多少轮输出一次日志
    save_model_dir:最终模型保存路径
    save_epoch_step:多少轮保存一次模型
    eval_batch_step:一个区间,没搞懂
    pretrained_model:预训练模型路径
    save_inference_dir:导出inference模型路径,导出时候需要用到
    character_dict_path:字符字典路径
    use_space_char:是否正常识别空格

Train:
    dataset:
        data_dir:训练集数据文件夹
        label_file_list:训练标签文件路径,也就是rec_gt_train.txt文件的路径
    loader:
        shuffle: false
        batch_size_per_card: 每轮训练数量吧
        drop_last: false
        num_workers: 指定多少个线程训练吧

Eval:
    dataset:
        data_dir:验证集数据文件夹
        label_file_list:验证标签文件路径,也就是rec_gt_test.txt文件的路径

        2.5、训练

        进入到paddleocr项目文件夹下,打开命令行后执行训练命令。

# 训练
python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_new.yml

# 若训练配置文件没有配置pretrained_model
python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy

        2.6、保存inference

        训练完成后的保存到save_model_dir配置下的模型不能直接使用,需要转换成inference模型后,才能让paddleocr使用。打开命令行执行下面转换命令即可。

# 导出inference模型
python tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml

# 若训练配置文件没有配置pretrained_model、save_inference_dir
python tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy  Global.save_inference_dir=./inference/rec_crnn/

        2.7、预测

# 识别图片
python tools/infer_rec.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml Global.infer_img=./tranMyOCR/rec/test/gz4a.png

# 若训练配置文件没有配置pretrained_model
python tools/infer_rec.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy  Global.infer_img=./tranMyOCR/rec/test/gz4a.png

;