首页 > 其他分享 >PaddleOCR手写文字识别模型训练(摘抄所得,非原创)

PaddleOCR手写文字识别模型训练(摘抄所得,非原创)

时间:2024-03-14 17:55:25浏览次数:33  
标签:PP 训练 PaddleOCR OCRv3 摘抄 train rec 手写 data

1. 安装环境

# 首先git官方的PaddleOCR项目,安装需要的依赖
git clone https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
pip install -r requirements.txt

2. 数据准备

本项目使用公开的手写文本识别数据集,包含Chinese OCR, 中科院自动化研究所-手写中文数据集CASIA-HWDB2.x,以及由中科院手写数据和网上开源数据合并组合的数据集等,该项目已经挂载处理好的数据集,可直接下载使用进行训练。

下载并解压数据
tar -xf hw_data.tar

3. 模型训练

3.1 下载预训练模型

首先需要下载我们需要的PP-OCRv3识别预训练模型,更多选择请自行选择其他的文字识别模型

# 使用该指令下载需要的预训练模型
wget -P ./pretrained_models/ https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_train.tar
# 解压预训练模型文件
tar -xf ./pretrained_models/ch_PP-OCRv3_rec_train.tar -C pretrained_models

3.2 修改配置文件

我们使用configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml,主要修改训练轮数和学习率参相关参数,设置预训练模型路径,设置数据集路径。 另外,batch_size可根据自己机器显存大小进行调整。 具体修改如下几个地方:

  epoch_num: 100 # 训练epoch数
  save_model_dir: ./output/ch_PP-OCR_v3_rec
  save_epoch_step: 10
  eval_batch_step: [0, 100] # 评估间隔,每隔100step评估一次
  pretrained_model: ./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy  # 预训练模型路径


  lr:
    name: Cosine # 修改学习率衰减策略为Cosine
    learning_rate: 0.0001 # 修改fine-tune的学习率
    warmup_epoch: 2 # 修改warmup轮数

Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data # 训练集图片路径
    ext_op_transform_idx: 1
    label_file_list:
    - ./train_data/chineseocr-data/rec_hand_line_all_label_train.txt # 训练集标签
    - ./train_data/handwrite/HWDB2.0Train_label.txt
    - ./train_data/handwrite/HWDB2.1Train_label.txt
    - ./train_data/handwrite/HWDB2.2Train_label.txt
    - ./train_data/handwrite/hwdb_ic13/handwriting_hwdb_train_labels.txt
    - ./train_data/handwrite/HW_Chinese/train_hw.txt
    ratio_list:
    - 0.1
    - 1.0
    - 1.0
    - 1.0
    - 0.02
    - 1.0
  loader:
    shuffle: true
    batch_size_per_card: 64
    drop_last: true
    num_workers: 4
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data # 测试集图片路径
    label_file_list:
    - ./train_data/chineseocr-data/rec_hand_line_all_label_val.txt # 测试集标签
    - ./train_data/handwrite/HWDB2.0Test_label.txt
    - ./train_data/handwrite/HWDB2.1Test_label.txt
    - ./train_data/handwrite/HWDB2.2Test_label.txt
    - ./train_data/handwrite/hwdb_ic13/handwriting_hwdb_val_labels.txt
    - ./train_data/handwrite/HW_Chinese/test_hw.txt
  loader:
    shuffle: false
    drop_last: false
    batch_size_per_card: 64
    num_workers: 4

由于数据集大多是长文本,因此需要注释掉下面的数据增广策略,以便训练出更好的模型。

- RecConAug:
    prob: 0.5
    ext_data_num: 2
    image_shape: [48, 320, 3]

3.3 开始训练

我们使用上面修改好的配置文件configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml,预训练模型,数据集路径,学习率,训练轮数等都已经设置完毕后,可以使用下面命令开始训练。

# 开始训练识别模型
python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

4. 模型评估

在训练之前,我们可以直接使用下面命令来评估预训练模型的效果:

# 评估预训练模型
python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy"
[2022/07/14 10:46:22] ppocr INFO: load pretrain successful from ./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy
eval model:: 100%|████████████████████████████| 687/687 [03:29<00:00,  3.27it/s]
[2022/07/14 10:49:52] ppocr INFO: metric eval ***************
[2022/07/14 10:49:52] ppocr INFO: acc:0.03724954461811258
[2022/07/14 10:49:52] ppocr INFO: norm_edit_dis:0.4859541065843199
[2022/07/14 10:49:52] ppocr INFO: Teacher_acc:0.0371584699368947
[2022/07/14 10:49:52] ppocr INFO: Teacher_norm_edit_dis:0.48718814890536477
[2022/07/14 10:49:52] ppocr INFO: fps:947.8562684823883

可以看出,直接加载预训练模型进行评估,效果较差,因为预训练模型并不是基于手写文字进行单独训练的,所以我们需要基于预训练模型进行finetune。
训练完成后,可以进行测试评估,评估命令如下:

# 评估finetune效果
python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./output/ch_PP-OCR_v3_rec/best_accuracy"

评估结果如下,可以看出识别准确率为54.3%。

[2022/07/14 10:54:06] ppocr INFO: metric eval ***************
[2022/07/14 10:54:06] ppocr INFO: acc:0.5430100180913
[2022/07/14 10:54:06] ppocr INFO: norm_edit_dis:0.9203322593158589
[2022/07/14 10:54:06] ppocr INFO: Teacher_acc:0.5401183969626324
[2022/07/14 10:54:06] ppocr INFO: Teacher_norm_edit_dis:0.919827504507755
[2022/07/14 10:54:06] ppocr INFO: fps:928.948733797251

如需获取已训练模型,请加入PaddleX官方交流频道,获取20G OCR学习大礼包(内含《动手学OCR》电子书、课程回放视频、前沿论文等重磅资料)

将下载或训练完成的模型放置在对应目录下即可完成模型推理

5. 模型导出推理

训练完成后,可以将训练模型转换成inference模型。inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。

5.1 模型导出

导出命令如下:

# 转化为推理模型
python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./output/ch_PP-OCR_v3_rec/best_accuracy" Global.save_inference_dir="./inference/rec_ppocrv3/"

5.2 模型推理

导出模型后,可以使用如下命令进行推理预测:

# 推理预测
python tools/infer/predict_rec.py --image_dir="train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg" --rec_model_dir="./inference/rec_ppocrv3/Student"
[2022/07/14 10:55:56] ppocr INFO: In PP-OCRv3, rec_image_shape parameter defaults to '3, 48, 320', if you are using recognition model with PP-OCRv2 or an older version, please set --rec_image_shape='3,32,320
[2022/07/14 10:55:58] ppocr INFO: Predicts of train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg:('品结构,差异化的多品牌渗透使欧莱雅确立了其在中国化妆', 0.9904912114143372)
# 可视化文字识别图片
from PIL import Image  
import matplotlib.pyplot as plt
import numpy as np
import os


img_path = 'train_data/handwrite/HWDB2.0Test_images/104-P16_4.jpg'

def vis(img_path):
    plt.figure()
    image = Image.open(img_path)  
    plt.imshow(image)
    plt.show()
    # image = image.resize([208, 208])  


vis(img_path)

标签:PP,训练,PaddleOCR,OCRv3,摘抄,train,rec,手写,data
From: https://www.cnblogs.com/liuzijin/p/18070756

相关文章

  • Database Connection Pool 数据库连接池-01-概览及简单手写实现
    拓展阅读第一节从零开始手写mybatis(一)MVP版本。第二节从零开始手写mybatis(二)mybatisinterceptor插件机制详解第三节从零开始手写mybatis(三)jdbcpool从零实现数据库连接池第四节从零开始手写mybatis(四)-mybatis事务管理机制详解连接池的作用资源重用由于数据库......
  • nodejs集成C++代码:手写简单的addon
    文章目录nodejs与node-gyp手写一个简单的addon编写一个简单的binding.gyp文件编写C++源文件V8版本:addon.ccnapi_api版本:addon_api.cc编译命令JS调用在这个专栏里,已经提到过web系统中c++的两大应用场景了:assembly和cef框架的应用,这两个可以说都是客户......
  • 手写解复用(一):TS解析
    1、本文的基本作用:引导理解封装格式,但更重要的是要自己去阅读协议,上手实践;2、本文的最大价值:久之,皆已遗忘;顾之,皆已忆起。一、基本知识1、TSHeader2、PAT3、PMT二、重点代码1、解析TSHeaderTS码流一般为188个字节为一包,以同步字节0x47开头,头上有4个字节,按上面格式......
  • 第143篇:手写vue-router,实现router-view
    好家伙, 今天来手写我们的老伙计vue-router, 1.替换router新开一个项目,并使用我们手写的router 2.大致结构letVue;//保存vue的构造函数classVueRouter{constructor(options){}}VueRouter.install=(_Vue)=>{Vue=_Vue;//备......
  • python 使用PaddleOCR读取图片文字,并用pyttsx3转为音频
    python小白,纯纯小白,很久之前看了一遍菜鸟官网,但实在没有应用场景,所以过目即忘。最近工作不是很忙,给我出了个题目,觉得挺有意思,就玩一玩。  所以关键点就是,图片提取出文字,然后文字转音频。1.图片提取文字,PaddleOCR出题人士,给出了git上一个ocr的工具库,支持图文信息的抽取。用......
  • 【2024-03-09】连岳摘抄
    23:59对于我来说,爱乃头等要务。审视世界、解释世界或藐视世界,或许是思想家的事。我唯一的事,是爱这个世界。不藐视世界,不憎恶世界和自己,怀抱爱,惊叹和敬畏地注视一切存在之物和我自己。                             ......
  • 【2024-03-10】连岳摘抄
    23:59风和日暖,令人愿意永远活下去。世上一切算得什么,只要有你。                                                 ——朱生豪太多人耽误自己,太多父母耽误孩子,都是在......
  • PaddleOCR 服务化部署(基于PaddleHub Serving)
    最近用到百度飞桨的PaddleOCR,研究了一下PaddleOCR的服务化部署,简单记录一些部署过程和碰到的问题。基础环境paddlepaddle2.5.2python3.7paddlehub2.1.0PaddleOCR2.6pip20#查看python版本python--version#查看pip版本pip--version#查看paddlepaddle版本......
  • 【2024-03-03】连岳摘抄
    23:59看看生鸡活鸭、鲜鱼水菜,碧绿的南瓜、通红的辣椒,热热闹闹,挨挨挤挤,让人感到一种生之乐趣。                                                 ——汪曾祺运气是和......
  • 【2024-03-02】连岳摘抄
    23:59别怕美好的一切消失,咱们先来让它存在。                                                 ——王小波孔子有句教诲很好,“不在其位,不谋其政”。它往往被消极理解,......