PaddleOCR文字识别模型的FineTune

一、paddleOCR

paddle框架为百度开发的深度学习框架,其中对于文字检测、识别具有较为便利的开发条件。同时PaddleOCR文字识别工具较为轻量化,并可按照任务需求进行model的finetune,满足实际的业务需求。
源码来源:githubOCR
在github中对该框架进行较为完整的描述,对于pretrainmodel、parameter进行明确的标注与说明,同时PP飞桨提供每日免费算力进行大模型的finetune,可以用于模型框架的初步认识与训练,满足实际的业务需求。

二、源码解读

1、源码下载

在这里插入图片描述

2、移步开发流程

在该文档中对于模型的开始,安装、预训练、效果展示等都进行明确的描述。
在这里插入图片描述
在这里插入图片描述

3、以CCPD数据集为例进行PaddleOCRmodel的预训练,提高文字识别的精度

(1)首先对下载好的文件夹进行解压,才VScode中进行打开。//任意编辑器
先找到其中的configs 配置文件,其中det表示文字检测model yaml配置文件,rec表示文字识别model yaml配置文件。
在这里插入图片描述
本博客以该配置文件为例,对配置文件中的描述进行解析。
在这里插入图片描述

模型配置文件
Global:debug: false      # 是否debuguse_gpu: true     # 训练过程是否使用GPUepoch_num: 200      # 训练的轮次log_smooth_window: 20    # 训练日志平滑窗口print_batch_step: 10   # 训练时每多少步打印一次日志save_model_dir: ./output/rec_ppocr_v4    # 保存模型的地址save_epoch_step: 10   # 保存模型的间隔eval_batch_step: [0, 2000]   # 验证数据的间隔cal_metric_during_train: true   # 是否计算验证集的指标pretrained_model:                   # 预训练模型的地址  // 可以在这里pretrain的地址,也可以使用命令行输入checkpoints:                  # save_inference_dir:            # 保存预测结果的地址use_visualdl: false             # 是否使用visualdlinfer_img: docs\images\00006737.jpg    # 验证图片的地址        character_dict_path: ppocr/utils/ppocr_keys_v1.txtmax_text_length: &max_text_length 25infer_mode: falseuse_space_char: truedistributed: truesave_res_path: ./output/rec/predicts_ppocrv3.txtd2s_train_image_shape: [3, 48, 320]Optimizer:    # 优化器name: Adam  beta1: 0.9beta2: 0.999lr:name: Cosinelearning_rate: 0.001warmup_epoch: 5regularizer:name: L2factor: 3.0e-05Architecture:      # 模型的配置model_type: rec   # 模型的类型 rec modelalgorithm: SVTR_LCNet     Transform:Backbone:    # 主干网络name: PPLCNetV3    scale: 0.95Head:             # 输出头网络 name: MultiHead   head_list:- CTCHead:Neck:name: svtrdims: 120    # 维度depth: 2     # 深度hidden_dims: 120kernel_size: [1, 3]use_guide: TrueHead:fc_decay: 0.00001- NRTRHead:nrtr_dim: 384max_text_length: *max_text_lengthLoss:        # 损失函数name: MultiLossloss_config_list:- CTCLoss:- NRTRLoss:PostProcess:  name: CTCLabelDecodeMetric:name: RecMetricmain_indicator: accTrain:               # 训练数据集的配置dataset:                name: MultiScaleDataSet  # 多尺度训练ds_width: false    data_dir: ./train_data/    # 训练数据集地址ext_op_transform_idx: 1label_file_list:     # 训练数据集索引标签- ./train_data/train_list.txttransforms:             # 数据增强的处理方式 - DecodeImage:img_mode: BGRchannel_first: false- RecConAug:prob: 0.5ext_data_num: 2image_shape: [48, 320, 3]max_text_length: *max_text_length- RecAug:- MultiLabelEncode:gtc_encode: NRTRLabelEncode- KeepKeys:keep_keys:- image- label_ctc- label_gtc- length- valid_ratiosampler:                # 采样器name: MultiScaleSamplerscales: [[320, 32], [320, 48], [320, 64]]first_bs: &bs 192fix_bs: falsedivided_factor: [8, 16] # w, his_training: Trueloader:shuffle: truebatch_size_per_card: *bsdrop_last: truenum_workers: 8    # 并行线路的最大线程
Eval: dataset: name: SimpleDataSetdata_dir: ./train_data   # 验证数据集地址label_file_list:- ./train_data/val_list.txt    # 验证数据标签   transforms:- DecodeImage:img_mode: BGRchannel_first: false- MultiLabelEncode:gtc_encode: NRTRLabelEncode- RecResizeImg:image_shape: [3, 48, 320]- KeepKeys:keep_keys:- image- label_ctc- label_gtc- length- valid_ratioloader:         # 验证集中数据加载器 dataloder shuffle: falsedrop_last: falsebatch_size_per_card: 128num_workers: 4

在这里插入图片描述
在快速开始文档中可以查找具体的启动步骤与方式 // 以现有的det为例
在这里插入图片描述

---
comments: true
---# PP-OCRv3 文本检测模型训练## 1. 简介PP-OCRv3在PP-OCRv2的基础上进一步升级。本节介绍PP-OCRv3检测模型的训练步骤。有关PP-OCRv3策略介绍参考[文档](../blog/PP-OCRv3_introduction.md)## 2. 检测训练PP-OCRv3检测模型是对PP-OCRv2中的[CML](https://arxiv.org/pdf/2109.03144.pdf)(Collaborative Mutual Learning) 协同互学习文本检测蒸馏策略进行了升级。PP-OCRv3分别针对检测教师模型和学生模型进行进一步效果优化。其中,在对教师模型优化时,提出了大感受野的PAN结构LK-PAN和引入了DML(Deep Mutual Learning)蒸馏策略;在对学生模型优化时,提出了残差注意力机制的FPN结构RSE-FPN。PP-OCRv3检测训练包括两个步骤:- 步骤1:采用DML蒸馏方法训练检测教师模型
- 步骤2:使用步骤1得到的教师模型采用CML方法训练出轻量学生模型### 2.1 准备数据和运行环境训练数据采用icdar2015数据,准备训练集步骤参考[ocr_dataset](./dataset/ocr_datasets.md).运行环境准备参考[文档](./installation.md)### 2.2 训练教师模型教师模型训练的配置文件是[ch_PP-OCRv3_det_dml.yml](https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml)。教师模型模型结构的Backbone、Neck、Head分别为Resnet50, LKPAN, DBHead,采用DML的蒸馏方法训练。有关配置文件的详细介绍参考[文档](./knowledge_distillation.md)。下载ImageNet预训练模型:```bash linenums="1"
# 下载ResNet50_vd的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/pretrained/ResNet50_vd_ssld_pretrained.pdparams

启动训练

# 单卡训练
python3 tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml \-o Architecture.Models.Student.pretrained=./pretrain_models/ResNet50_vd_ssld_pretrained \Architecture.Models.Student2.pretrained=./pretrain_models/ResNet50_vd_ssld_pretrained \Global.save_model_dir=./output/
# 如果要使用多GPU分布式训练,请使用如下命令:
python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml \-o Architecture.Models.Student.pretrained=./pretrain_models/ResNet50_vd_ssld_pretrained \Architecture.Models.Student2.pretrained=./pretrain_models/ResNet50_vd_ssld_pretrained \Global.save_model_dir=./output/

训练过程中保存的模型在output目录下,包含以下文件:

best_accuracy.states
best_accuracy.pdparams  # 默认保存最优精度的模型参数
best_accuracy.pdopt     # 默认保存最优精度的优化器相关参数
latest.states
latest.pdparams  # 默认保存的最新模型参数
latest.pdopt     # 默认保存的最新模型的优化器相关参数

其中,best_accuracy是保存的精度最高的模型参数,可以直接使用该模型评估。

模型评估命令如下:

python3 tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml -o Global.checkpoints=./output/best_accuracy

训练的教师模型结构更大,精度更高,用于提升学生模型的精度。

提取教师模型参数
best_accuracy包含两个模型的参数,分别对应配置文件中的Student,Student2。提取Student的参数方法如下:

import paddle
# 加载预训练模型
all_params = paddle.load("output/best_accuracy.pdparams")
# 查看权重参数的keys
print(all_params.keys())
# 模型的权重提取
s_params = {key[len("Student."):]: all_params[key] for key in all_params if "Student." in key}
# 查看模型权重参数的keys
print(s_params.keys())
# 保存
paddle.save(s_params, "./pretrain_models/dml_teacher.pdparams")

提取出来的模型参数可以用于模型进一步的finetune训练或者蒸馏训练。

2.3 训练学生模型

训练学生模型的配置文件是ch_PP-OCRv3_det_cml.yml
上一节训练得到的教师模型作为监督,采用CML方式训练得到轻量的学生模型。

下载学生模型的ImageNet预训练模型:

# 下载MobileNetV3的预训练模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/pretrained/MobileNetV3_large_x0_5_pretrained.pdparams

启动训练

# 单卡训练
python3 tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml \-o Architecture.Models.Student.pretrained=./pretrain_models/MobileNetV3_large_x0_5_pretrained \Architecture.Models.Student2.pretrained=./pretrain_models/MobileNetV3_large_x0_5_pretrained \Architecture.Models.Teacher.pretrained=./pretrain_models/dml_teacher \Global.save_model_dir=./output/
# 如果要使用多GPU分布式训练,请使用如下命令:
python3  -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml \-o Architecture.Models.Student.pretrained=./pretrain_models/MobileNetV3_large_x0_5_pretrained \Architecture.Models.Student2.pretrained=./pretrain_models/MobileNetV3_large_x0_5_pretrained \Architecture.Models.Teacher.pretrained=./pretrain_models/dml_teacher \Global.save_model_dir=./output/

训练过程中保存的模型在output目录下,
模型评估命令如下:

python3 tools/eval.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml -o Global.checkpoints=./output/best_accuracy

best_accuracy包含三个模型的参数,分别对应配置文件中的Student,Student2,Teacher。提取Student参数的方法如下:

import paddle
# 加载预训练模型
all_params = paddle.load("output/best_accuracy.pdparams")
# 查看权重参数的keys
print(all_params.keys())
# 模型的权重提取
s_params = {key[len("Student."):]: all_params[key] for key in all_params if "Student." in key}
# 查看模型权重参数的keys
print(s_params.keys())
# 保存
paddle.save(s_params, "./pretrain_models/cml_student.pdparams")

提取出来的Student的参数可用于模型部署或者做进一步的finetune训练。

3. 基于PP-OCRv3检测finetune训练

本节介绍如何使用PP-OCRv3检测模型在其他场景上的finetune训练。

finetune训练适用于三种场景:

  • 基于CML蒸馏方法的finetune训练,适用于教师模型在使用场景上精度高于PP-OCRv3检测模型,且希望得到一个轻量检测模型。
  • 基于PP-OCRv3轻量检测模型的finetune训练,无需训练教师模型,希望在PP-OCRv3检测模型基础上提升使用场景上的精度。
  • 基于DML蒸馏方法的finetune训练,适用于采用DML方法进一步提升精度的场景。

基于CML蒸馏方法的finetune训练

下载PP-OCRv3训练模型:

wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar
tar xf ch_PP-OCRv3_det_distill_train.tar

ch_PP-OCRv3_det_distill_train/best_accuracy.pdparams包含CML配置文件中Student、Student2、Teacher模型的参数。

启动训练:

# 单卡训练
python3 tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml \-o Global.pretrained_model=./ch_PP-OCRv3_det_distill_train/best_accuracy \Global.save_model_dir=./output/
# 如果要使用多GPU分布式训练,请使用如下命令:
python3  -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml \-o Global.pretrained_model=./ch_PP-OCRv3_det_distill_train/best_accuracy  \Global.save_model_dir=./output/

基于PP-OCRv3轻量检测模型的finetune训练

下载PP-OCRv3训练模型,并提取Student结构的模型参数:

wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar
tar xf ch_PP-OCRv3_det_distill_train.tar

提取Student参数的方法如下:

import paddle
# 加载预训练模型
all_params = paddle.load("output/best_accuracy.pdparams")
# 查看权重参数的keys
print(all_params.keys())
# 模型的权重提取
s_params = {key[len("Student."):]: all_params[key] for key in all_params if "Student." in key}
# 查看模型权重参数的keys
print(s_params.keys())
# 保存
paddle.save(s_params, "./student.pdparams")

使用配置文件ch_PP-OCRv3_det_student.yml训练。

启动训练

# 单卡训练
python3 tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml \-o Global.pretrained_model=./student \Global.save_model_dir=./output/
# 如果要使用多GPU分布式训练,请使用如下命令:
python3  -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml \-o Global.pretrained_model=./student \Global.save_model_dir=./output/

基于DML蒸馏方法的finetune训练

以ch_PP-OCRv3_det_distill_train中的Teacher模型为例,首先提取Teacher结构的参数,方法如下:

import paddle
# 加载预训练模型
all_params = paddle.load("ch_PP-OCRv3_det_distill_train/best_accuracy.pdparams")
# 查看权重参数的keys
print(all_params.keys())
# 模型的权重提取
s_params = {key[len("Teacher."):]: all_params[key] for key in all_params if "Teacher." in key}
# 查看模型权重参数的keys
print(s_params.keys())
# 保存
paddle.save(s_params, "./teacher.pdparams")

启动训练

# 单卡训练
python3 tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml \-o Architecture.Models.Student.pretrained=./teacher \Architecture.Models.Student2.pretrained=./teacher \Global.save_model_dir=./output/
# 如果要使用多GPU分布式训练,请使用如下命令:
python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml \-o Architecture.Models.Student.pretrained=./teacher \Architecture.Models.Student2.pretrained=./teacher \Global.save_model_dir=./output/

三、数据集准备方式

rec文字识别图像数据集准备方式:
在这里插入图片描述
txt数据集准备方式:图像路径 + ” “(空格) + 文字
在这里插入图片描述
dict创建:
创建所有的 出现文字的字典集 == 可以采用默认。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/497193.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark生态圈

Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。 Spark有完善的生态圈: Spark Core:实现了…

影刀进阶指令 | Kimi (对标ChatGPT)

文章目录 影刀进阶指令 | Kimi (对标ChatGPT)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 确定问题2\. 填写问题并发送3\. 检测答案是否出完 四. 运维 影刀进阶指令 | Kimi (对标ChatGPT) 简单讲讲RPA调用kimi实现…

Spring Security3.0.2版本

前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…

--spring.profiles.active=prod

rootproduct-qualification:~# ps -ef | grep java root 5110 1 3 16:57 ? 00:00:54 java -jar productQualification.jar --spring.profiles.activeprod root 6476 5797 0 17:26 pts/0 00:00:00 grep --colorauto java好的,你使用 ps …

力扣矩阵-算法模版总结

lc-73.矩阵置零-(时隔14天)-12.27 思路:(23min22s) 1.直接遍历遇0将行列设0肯定不行,会影响后续判断,题目又要求原地算法,那么进一步考虑是否可以将元素为0,其行列需要设为0的位置给存储下来,最后再遍历根据…

Markov test笔记

补充知识 来源于数学之美第五章: 到了 19 世纪,概率论的发展从相对静止的随机变量的研究发展到随机变量的时间序列 ( s 1 , s 2 , s 3 , … ) (s_1, s_2, s_3, \dots) (s1​,s2​,s3​,…),即随机过程(动态的)。这在…

DeepSpeed 使用 LoRA 训练后文件结构详解

DeepSpeed 使用 LoRA 训练后文件结构详解 在大语言模型(LLM)的训练过程中,DeepSpeed 提供了强大的分布式训练能力,而 LoRA(Low-Rank Adaptation)通过参数高效微调技术显著减少了资源占用。完成训练后&…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…

docker-开源nocodb,使用已有数据库

使用已有数据库 创建本地数据库 数据库:nocodb 用户:nocodb 密码:xxxxxx修改docker-compose.yml 默认网关的 IP 地址是 172.17.0.1(适用于 bridge 网络模式)version: "2.1" services:nocodb:environment:…

uniapp 前端解决精度丢失的问题 (后端返回分布式id)

原因: 后端使用分布式id, id为19位数,导致精度丢失 ,前端解决方法 这个是通过浏览器请求回来的数据,这个时候id 数据已经丢失了,在数据库查询不到,在调获详情接口的时候会有问题 实际的: 解决…

SQL-leetcode-180. 连续出现的数字

180. 连续出现的数字 表:Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中,id 是该表的主键。 id 是一个自增列。 找出所有至少连续出现三次的数字。 返回的…

【教程】通过Docker运行AnythingLLM

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 官方教程:Local Docker Installation ~ AnythingLLM 1、先创建一个目录用于保存anythingllm的持久化文件: sudo mkdir /app su…

soular使用教程

用 soular 配置你的组织,工作更高效!以下是快速上手的简单步骤:  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责的清晰分配。  1.1 用…

Github - 如何提交一个带有“verified”标识的commit

Github - 如何提交一个带有“verified”标识的commit 前言(Why) 今天在Github上浏览某项目的commit记录的时候发现,有的commit记录带有verified绿色标识,有的带有橘色的Unverified标识,还有的什么都不显示。 既然我是根正苗红的作者(bushi)…

基于Bregman的交替方向乘子法

目录标题 ADMM方法简介Bregman散度Bregman ADMM的原理主要优势代码示例:各个符号的解释:**梯度的几何含义**:具体数学公式:**应用示例**:**ADMM的标准形式:****ADMM中的变量角色:****ADMM中的更…

【操作系统】课程 3进程同步与通信 同步测练 章节测验

3.1知识点导图 无 3.2进程同步与互斥 【本章学习目标】 (1)了解进程通信的机制和通信方式。 (2)理解多道程序环境下进程间通信的机制;消息传递系统的实现。 (3)掌握临界资源和临界区的概念…

React中最优雅的异步请求

给大家分享在React19中使用useSuspense处理异步请求为什么是被认为最优雅的解决方案 一. 传统方案 解决异步请求的方案中,我们要处理至少两个最基本的逻辑 正常的数据显示数据加载的UI状态 例如: export default function Index(){const [content, …

《机器视觉:开启智能新时代》

《机器视觉:开启智能新时代》 一、机器视觉:工业之眼的崛起二、核心组件:构建精准视觉系统(一)光源:照亮视界的画笔(二)镜头:聚焦精准的慧眼(三)相…

STM32F103RCT6学习之四:定时器

1.基础 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、…

3DMAX镂空星花球建模插件FloralStarBall使用方法

3DMAX镂空星花球建模插件FloralStarBall使用教程 就是那个3DMAX镂空星花球建模,再也不用手动做了,使用3DMAX镂空星花球建模FloralStarBall插件可以一键生成! 3DMAX镂空星花球建模插件FloralStarBall,经典星形球体的美丽变体。星形…