Paddle OCR v4 微调训练文字识别SVTRNet模型实践

news2024/12/24 10:14:50

文字识别步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md

微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md

训练必要性

在这里插入图片描述
在这里插入图片描述

原始模型标点符号和括号容易识别不到

数据准备

参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/dataset/ocr_datasets.md
通用数据 用于训练以文本文件存储的数据集(SimpleDataSet);

一张图片 一行文本
格式类似:
在这里插入图片描述
在这里插入图片描述

注意:图像文件名写xxx.jpg即可,文件夹名可以在配置文件中指定

数据源:垂直领域的pdf,经过剪裁生成了10万张图片(文本内容没有去重,为了保证一些词出现的频率不变)

开始训练

训练v4的模型,所以选择配置文件:ch_PP-OCRv4_rec.yml ,需要做如下更改
更改学习率为[1e-4, 2e-5]左右,
更改图片文件夹路径
更改batch_size大小(训练报错时,适当调节大小,)

下载pretrain model,使用v4预训练模型
https://paddleocr.bj.bcebos.com/PP-OCRv4/chinese/ch_PP-OCRv4_rec_train.tar

注意:v4预训练模型没有best,只有student

正常启动训练

python3 tools/train.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv4_rec_train/student Global.save_model_dir=./output/rec_ppocr_v4

注意使用ch_PP-OCRv4_rec_distill.yml配置文件训练,报错KeyError: ‘NRTRLabelDecode’,官方暂时没有解决。

python3 tools/train.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec_distill.yml -o Global.pretrained_model=./pretrain_models/ch_PP-OCRv4_rec_train/student

导出模型

python3 tools/export_model.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec_jilin.yml  -o Global.pretrained_model=./output/rec_ppocr_v4/best_accuracy  Global.save_inference_dir=./inference/PP-OCRv4_rec_jilin/
python3 tools/infer/predict_rec.py --rec_model_dir="./inference/PP-OCRv4_rec/"  --image_dir="./train_data/rec/jilin_001_0_27_5.jpg"

推理

python3 tools/infer_rec.py -c configs/rec/PP-OCRv4/ch_PP-OCRv4_rec.yml -o Global.pretrained_model=./output/rec_ppocr_v4/best_accuracy Global.infer_img=./train_data/rec/jilin_001_0_27_5.jpg

实践:
参考:https://blog.csdn.net/qq_52852432/article/details/131817619
在这里插入图片描述
一共训练了20轮,第五轮训练测试集达到最大精度,85%,之后精度逐渐下降

在这里插入图片描述

预测

图片:

在这里插入图片描述
在这里插入图片描述

训练的模型:

(‘2218白城师范学院(吉林省白城市,10206)’, 0.9582517743110657)
(‘2225吉林警察学院(长春市,11441)’, 0.9862592816352844)
原始v4模型:

(2218白城师范学院(吉林省白城市,10206)', 0.9726919531822205)
(‘2225吉林警察学院(长春市,11441)’, 0.9829413294792175)

总结

可以看到,训练后模型识别括号基本统一成英文了。其实光是识别,起始v4效果已经很好了,原来检测的效果不太行,会拉低识别正确率

改进:微调文字检测模型,待完成后补充

其他需要注意的

实践时,使用了预训练模型,但一开始模型准确率acc一直为0,因为数据准备错误了,图片包含了多行文字,后来修正了图片,acc飞速提高。

其他版本

由于我数据集存在很多文本, 更改max_length,从25改到50,并且image.shape的宽从320改成640,batch_size改成了32
在这里插入图片描述
第5个epoch达到最大的acc 65%,效果不够好

训练模型可能有的疑问

参考:添加链接描述

  • 如何识别文字比较长的文本
    在这里插入图片描述

  • 合成数据与真实数据比例
    在这里插入图片描述

  • 如何生成数据
    在这里插入图片描述

  • 文本识别训练时宽高比大于 10 或者文本长度大于 25 的图像会直接丢弃吗?会
    参考:https://github.com/PaddlePaddle/PaddleOCR/issues/5017

  • 如果大部分图像都超过了25个字符,建议训练时根据实际情况修改:max_text_length,并将input_size设置为宽高比更大的比例
    参考:https://github.com/PaddlePaddle/PaddleOCR/issues/7500

  • 英文长度是按照字母计算的,需要将空格计算在内。
    我印象中,定义的max_text_length需要比实际的长度至少多两位数。
    比如要想识别身份证号,实际中身份证号是18位,那在config文件中定义的max_text_length至少要为20,否则会报错。

  • 训练检测模型时,不会用到标签中的文本字段。

  • 如果训练数据较少的话,配置越高越容易过拟合。

参考:https://aistudio.baidu.com/projectdetail/4484441
1.7 简单的对于精度要求不高的OCR任务,数据集需要准备多少张呢?

A:(1)训练数据的数量和需要解决问题的复杂度有关系。难度越大,精度要求越高,则数据集需求越大,而且一般情况实际中的训练数据越多效果越好。

(2)对于精度要求不高的场景,检测任务和识别任务需要的数据量是不一样的。对于检测任务,500张图像可以保证基本的检测效果。对于识别任务,需要保证识别字典中每个字符出现在不同场景的行文本图像数目需要大于200张(举例,如果有字典中有5个字,每个字都需要出现在200张图片以上,那么最少要求的图像数量应该在200-1000张之间),这样可以保证基本的识别效果。

1.8 当训练数据量少时,如何获取更多的数据?

A:当训练数据量少时,可以尝试以下三种方式获取更多的数据:(1)人工采集更多的训练数据,最直接也是最有效的方式。(2)基于PIL和opencv基本图像处理或者变换。例如PIL中ImageFont, Image, ImageDraw三个模块将文字写到背景中,opencv的旋转仿射变换,高斯滤波等。(3)利用数据生成算法合成数据,例如pix2pix等算法。

1.9 如何更换文本检测/识别的backbone?

A:无论是文字检测,还是文字识别,骨干网络的选择是预测效果和预测效率的权衡。一般,选择更大规模的骨干网络,例如ResNet101_vd,则检测或识别更准确,但预测耗时相应也会增加。而选择更小规模的骨干网络,例如MobileNetV3_small_x0_35,则预测更快,但检测或识别的准确率会大打折扣。幸运的是不同骨干网络的检测或识别效果与在ImageNet数据集图像1000分类任务效果正相关。飞桨图像分类套件PaddleClas汇总了ResNet_vd、Res2Net、HRNet、MobileNetV3、GhostNet等23种系列的分类网络结构,在上述图像分类任务的top1识别准确率,GPU(V100和T4)和CPU(骁龙855)的预测耗时以及相应的117个预训练模型下载地址。

(1)文字检测骨干网络的替换,主要是确定类似与ResNet的4个stages,以方便集成后续的类似FPN的检测头。此外,对于文字检测问题,使用ImageNet训练的分类预训练模型,可以加速收敛和效果提升。

(2)文字识别的骨干网络的替换,需要注意网络宽高stride的下降位置。由于文本识别一般宽高比例很大,因此高度下降频率少一些,宽度下降频率多一些。可以参考PaddleOCR中MobileNetV3骨干网络的改动。

V4使用的高精度中文场景文本识别模型SVTR详解

参考:https://aistudio.baidu.com/projectdetail/4263032
参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/applications/%E9%AB%98%E7%B2%BE%E5%BA%A6%E4%B8%AD%E6%96%87%E8%AF%86%E5%88%AB%E6%A8%A1%E5%9E%8B.md,但一直没下载成功SVTR中文模型文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FIR滤波器——DSP学习笔记三(包含一个滤波器设计的简明案例)

​​​​​​ 背景知识 FIR滤波器的特性与优点 可精确地实现线性相位响应(Linear phase response),无相位失真; 总是稳定的,所有极点都位于原点 线性相位FIR滤波器的性质、类型及零点位置 冲击响应满足:奇…

Java中的File类

File类概述和构造方法 File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已,它可以存在,也可以不存在 我们对Fie的操…

通过maven命令行mvn的方式,下载依赖jar包

目录 目标步骤执行mvn命令 目标 有时通过idea-maven-reload all maven projects更新项目依赖时,会报错Could not find artifact xxx.xx:xxx.x:xxx.jar (https://repo1.maven.org/maven2/org/)。 此时可尝试通过mvn命令行进行依赖下载(需要配置maven本地…

工业前沿 | 科东软件亮相2024成都工博会

2024年4月24日,成都国际工业博览会盛大开幕,本届大会以**“创链新工业,共碳新未来”**为主题,吸引了全球30个国家和地区的近600家参展企业。盛会汇聚了众多行业精英和新兴力量,共同探讨制造业的低碳化和数字化转型。科…

Docker资源控制管理

目录 一.CPU 资源控制 1.定义 2.cgroups四大功能 (1)资源限制:可以对任务使用的资源总额进行限制 (2)优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优…

牛客社区帖子分页显示实现

下图是前端分页的组件: 下面是对应的静态html页面,每一个方块,都是一个a标签,可以点击,执行的链接是/community/index,GET请求,拼接的参数是current,也就是pageNum,只需…

云服务器搭建XSS-platform、DVWA靶机和Permeate论坛

目录 前言准备环境安装步骤一、 部署MySQL二、 系统部署三、系统安装主页介绍 前言 我发现目前网上的xss-platform的搭建教程都是基于本地搭建的,这样搭建好的xss平台只能在本地使用,无法测试别的网站。而网络上的大部分xss平台又几乎都是收费的&#x…

网工内推 | 云计算运维,厂商云相关认证优先,股票期权,全勤奖

01 国科科技 招聘岗位:云计算运维 职责描述: 1、负责私有云平台的运维管理工作,包括云平台日常运维、故障处理、扩容、版本升级、优化和维护等。 2、根据业务需求,从技术角度支持及配合各业务系统上云工作。 3、为云上业务系统提供云产品、云服务方面的…

vue3项目手写记录(持续更新中)

安装pnpm 1)npm install -g pnpm 安装到全局, 2)pnpm create vue创建项目,不要在根级别c盘路径下创建项目.生成的这个项目,不要直接在根路径下,根路径内的文件夹下创建. 3)pnpm dev 运行项目 pnpm install 安装包node_modules. 配置eslient和pretteir 在.eslintrc.cjs文…

WS-BAN模型(细粒度图像分类)

WS-BAN模型(细粒度图像分类) 摘要Abstract1. WS-BAN1.1 文献摘要1.2 背景1.3 创新点1.4 WS-BAN方法1.4.1 弱监督注意学习1.4.2 注意力丢弃 1.5 实验1.5.1 数据集1.5.2 实施细节1.5.3 对比试验结果 2. Transformer代码学习3. 细粒度图像分类代码复现 摘要…

商店数据(八)

目录 57.后台权限表 58.推荐记录表 ​59.系统上传资源表 ​60.角色表 ​61.订单结算表 62.店铺表 63.店铺认证表 64.店铺申请(移动端)表 57.后台权限表 CREATE TABLE wat_privilgeid (privilegeod int(11) NOT NULL AUTO_INCREMENT COMMENT 自增…

时间序列模型(含python程序实现)

常用按时间顺序排列的一组随机变量来表示一个随机事件的时间序列,简记为 用表示该随机序列的n个有序观察值,称之为序列长度为n的观察值序列。 常用的时间序列模型 时间序列的预处理 拿到一个观察值序列后,首先要对它的纯随机性和平稳性进行…

分享开放原子AtomGit开源协作平台评测报告

AtomGit平台的总体介绍 开放原子开源基金会是致力于推动全球开源事业发展的非营利机构,于 2020 年 6 月在北京成立,由阿里巴巴、百度、华为、浪潮、360、腾讯、招商银行等多家龙头科技企业联合发起。目前有三个主要机构设置,技术监督委员会&…

09_Scala函数和对象

文章目录 函数和对象1.函数也是对象 scala中声明了一个函数 等价于声明一个函数对象2.将函数当作对象来用,也就是访问函数,但是不执行函数结果3.对象拥有数据类型(函数类型),对象可以进行赋值操作4.函数对象类型的省略写法,也就是…

2024Xtu程设第一次练习题解

程设练习题谢大会专门查重 1.1531奇怪的数字 题目让我们从小到大输出1e6以内所有的答案,其实也没什么好的思路 就是将一个数n的所有位都拆出来,遍历这些位(每次取一个x),然后通过作除法(y n / x&#xf…

挤压激励注意力 SE | Squeeze-and-Excitation Networks

论文名称:《Squeeze-and-Excitation Networks》 论文地址:https://arxiv.org/pdf/1709.01507.pdf 代码地址: https://github.com/hujie-frank/SENet 卷积神经网络 (CNN) 的核心构建块是卷积运算符,它使网络能够通过在每一层的局…

杰发科技AC7840——CAN通信简介(6)_监听模式

参考:http://t.csdnimg.cn/AFFPC 0. 简介 7840支持4种扩展模式,其中监听模式。 监听模式概念 作用: 这里写的用于诊断,实际上我还没有用到,不太理解为啥可以用作诊断。 我的理解是,在多个总线下,使用监听…

Bug记录:AttributeError: module ‘numpy‘ has no attribute ‘object‘

使用Tensorflow进行模型训练时,之前都好用的,突然报错:AttributeError: module numpy has no attribute object。 问题原因:Numpy版本不兼容,我之前是1.24.4,后来又重装了好几个版本都不太行。 最终解决方…

verilog 从入门到看得懂---matlab 自动生成verilog

matlab 的强大不用多说,以前经常用simulink 生成c,最近尝试用simulink进行了verilog的生成,方法也很简单。 一个简单的示例如下。 1,新建一个模型文件,并且根据需要进行模型搭建 2.配置HDL生成模块 3.点击 generation…

基于Springboot的玩具租赁系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的玩具租赁系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…