再升级!PP-OCRv4多场景平均精度提升5%!

news2024/11/17 9:56:34

OCR方向的工程师,一定有在关注PaddleOCR这个项目,其主要推荐的PP-OCR算法更是被国内外企业开发者广泛应用。短短几年时间,PP-OCR累计Star数量已超过32.2k,频频登上GitHub Trending和Paperswithcode日榜月榜第一,称它为OCR方向目前最火的repo绝对不为过。

PaddleOCR主打的PP-OCR系列模型,在去年五月份推出了v3。最近,飞桨AI套件团队针对PP-OCRv3进行了全方位的改进,重磅推出了PP-OCRv4!👏👏👏

从效果上看,速度可比情况下,v4相比v3在多种场景下的精度均有大幅提升:

  • 中文场景,相对于PP-OCRv3中文模型提升超4%。
  • 英文数字场景,相比于PP-OCRv3英文模型提升6%。
  • 多语言场景,优化80个语种识别效果,平均准确率提升超8%。

PP-OCRv4模型目前已随PaddleOCR 2.7版本正式发布,欢迎大家持续关注PaddleOCR~~~

GitHub项目地址

https://github.com/PaddlePaddle/PaddleOCR

PP-OCRv4效果速览
让我们拿结果说话,多图预警!!!

PP-OCRv4效果速览

图片图片图片

英文场景
图片图片

多语言场景

图片

image.png

下面上定量评测结果!

PP-OCRv4在速度可比情况下,中文场景端到端Hmean指标相比于PP-OCRv3提升4.25%,效果大幅提升。具体指标如下表所示:

图片

测试环境:CPU型号为Intel Gold 6148,CPU预测时使用OpenVINO。

除了更新中文模型,本次升级也优化了英文数字模型,在自有评估集上文本识别准确率提升6%,如下表所示:

图片

同时,也对已支持的80余种语言识别模型进行了升级更新,在有评估集的四种语系识别准确率平均提升5%以上,如下表所示:

图片

在飞桨AI套件中使用PP-OCRv4

为了方便大家在线体验效果,并且快速上手PP-OCRv4模型的训练调优和部署,PP-OCRv4目前已上线飞桨AI套件PaddleX!

在线体验推理效果

https://aistudio.baidu.com/projectdetail/6611435

创建自己的PP-OCRv4

https://aistudio.baidu.com/modelsdetail?modelId=286

PaddleX是一站式、全流程、高效率的飞桨AI套件,具备飞桨生态优质模型和产业方案。PaddleX的使命是助力AI技术快速落地,愿景是使人人成为AI Developer。

PaddleX支持10+任务能力,包括图像分类、目标检测、图像分割、3D、OCR和时序预测等;内置36 种飞桨生态特色模型,包括PP-ChatOCR、PP-OCRv4、RT-DETR、PP-YOLOE、PP-ShiTu、PP-LiteSeg、PP-TS等。

PaddleX提供“工具箱”和“开发者”两种开发模式,同时支持云端和本地端。工具箱模式可以无代码调优关键超参,开发者模式可以低代码进行单模型训压推和多模型串联推理。

PaddleX未来还将支持联创开发,收益共享!欢迎广大个人开发者和企业开发者参与进来,共创繁荣的AI技术生态!

目前PaddleX正在快速迭代,欢迎大家试用和指正!

PP-OCRv4十大关键技术点深入解读

PP-OCRv4整体的框架图保持了与PP-OCRv3相同的pipeline,针对检测模型和识别模型进行了数据、网络结构、训练策略等多个模块的优化。PP-OCRv4系统框图如下所示:

图片

从算法改进思路上看,分别针对检测和识别模型,进行了共10个方面的改进:

检测模块

  • PP-LCNetV3:精度更高的骨干网络
  • PFHead:并行head分支融合结构
  • DSR: 训练中动态增加shrink ratio
  • CML:添加Student和Teacher网络输出的KL div loss

识别模块

  • SVTR_LCNetV3:精度更高的骨干网络
  • Lite-Neck:精简的Neck结构
  • GTC-NRTR:稳定的Attention指导分支
  • Multi-Scale:多尺度训练策略
  • DF: 数据挖掘方案
  • DKD :DKD蒸馏策略

敲黑板了,下面让我们对这10个技术点进行一一解读。

检测优化

PP-OCRv4检测模型在PP-OCRv3检测模型的基础上,在网络结构,训练策略,蒸馏策略三个方面做了优化。首先,PP-OCRv4检测模型使用PP-LCNetV3替换MobileNetv3,并提出并行分支融合的PFhead结构;其次,训练时动态调整shrink ratio的比例;最后,PP-OCRv4对CML的蒸馏loss进行优化,进一步提升文字检测效果。

消融实验如下:

图片

测试环境:Intel Gold 6148 CPU,预测引擎使用OpenVINO。

PFhead:多分支融合Head结构

PFhead结构如下图所示,PFHead在经过第一个转置卷积后,分别进行上采样和转置卷积,上采样的输出通过3x3卷积得到输出结果,然后和转置卷积的分支的结果级联并经过1x1卷积层,最后1x1卷积的结果和转置卷积的结果相加得到最后输出的概率图。PP-OCRv4学生检测模型使用PFhead,Hmean从76.22%增加到76.97%。

图片

DSR:收缩比例动态调整策略

动态shrink ratio(dynamic shrink ratio): 在训练中,shrink ratio由固定值调整为动态变化,随着训练epoch的增加,shrink ratio从0.4线性增加到0.6。该策略在PP-OCRv4学生检测模型上,Hmean从76.97%提升到78.24%。

PP-LCNetV3:精度更高的骨干网络

PP-LCNetV3系列模型是PP-LCNet系列模型的延续,覆盖了更大的精度范围,能够适应不同下游任务的需要。PP-LCNetV3系列模型从多个方面进行了优化,提出了可学习仿射变换模块,对重参数化策略、激活函数进行了改进,同时调整了网络深度与宽度。最终,PP-LCNetV3系列模型能够在性能与效率之间达到最佳的平衡,在不同精度范围内取得极致的推理速度。使用PP-LCNetV3替换MobileNetv3 backbone,PP-OCRv4学生检测模型hmean从78.24%提升到79.08%。

CML:融合KD的互学习策略

PP-OCRv4检测模型对PP-OCRv3中的CML(Collaborative Mutual Learning) 协同互学习文本检测蒸馏策略进行了优化。如下图所示,在计算Student Model和Teacher Model的distill Loss时,额外添加KL div loss,让两者输出的response maps分布接近,由此进一步提升Student网络的精度,检测Hmean从79.08%增加到79.56%,端到端指标从61.31%增加到61.87%。

图片

识别优化

PP-OCRv3的识别模块是基于文本识别算法SVTR优化。SVTR不再采用RNN结构,通过引入Transformers结构更加有效地挖掘文本行图像的上下文信息,从而提升文本识别能力。直接将PP-OCRv2的识别模型,替换成SVTR_Tiny,识别准确率从74.8%提升到80.1%(+5.3%),但是预测速度慢了将近11倍,CPU上预测一条文本行,将近100ms。因此,如下图所示,PP-OCRv3采用如下6个优化策略进行识别模型加速。

图片

基于上述策略,PP-OCRv4识别模型相比PP-OCRv3,在速度可比的情况下,精度进一步提升4%。具体消融实验如下所示:

图片

注:测试速度时,输入图片尺寸均为(3,48,320)。在实际预测时,图像为变长输入,速度会有所变化。测试环境:Intel Gold 6148 CPU,预测时使用OpenVINO预测引擎。

DF:数据挖掘方案

DF(Data Filter) 是一种简单有效的数据挖掘方案。核心思想是利用已有模型预测训练数据,通过置信度和预测结果等信息,对全量数据进行筛选。具体的:首先使用少量数据快速训练得到一个低精度模型,使用该低精度模型对千万级的数据进行预测,去除置信度大于0.95的样本,该部分被认为是对提升模型精度无效的冗余数据。其次使用PP-OCRv3作为高精度模型,对剩余数据进行预测,去除置信度小于0.15的样本,该部分被认为是难以识别或质量很差的样本。使用该策略,千万级别训练数据被精简至百万级,显著提升模型训练效率,模型训练时间从2周减少到5天,同时精度提升至72.7%(+1.2%)。

图片

PP-LCNetV3:精度更优的骨干网络

PP-LCNetV3系列模型是PP-LCNet系列模型的延续,覆盖了更大的精度范围,能够适应不同下游任务的需要。PP-LCNetV3系列模型从多个方面进行了优化,提出了可学习仿射变换模块,对重参数化策略、激活函数进行了改进,同时调整了网络深度与宽度。最终,PP-LCNetV3系列模型能够在性能与效率之间达到最佳的平衡,在不同精度范围内取得极致的推理速度。

Lite-Neck:精简参数的Neck结构

Lite-Neck整体结构沿用PP-OCRv3版本,在参数上稍作精简,识别模型整体的模型大小可从12M降低到8.5M,而精度不变;在CTCHead中,将Neck输出特征的维度从64提升到120,此时模型大小从8.5M提升到9.6M,精度提升0.5%。

GTC-NRTR:Attention指导CTC训练策略

GTC(Guided Training of CTC),是在PP-OCRv3中使用过的策略,融合多种文本特征的表达,可有效提升文本识别精度。在PP-OCRv4中使用训练更稳定的Transformer模型NRTR作为指导,相比SAR基于循环神经网络的结构,NRTR基于Transformer实现解码过程泛化能力更强,能有效指导CTC分支学习。解决简单场景下快速过拟合的问题。模型大小不变,识别精度提升至73.21%(+0.5%)。

图片

Multi-Scale:多尺度训练策略

动态尺度训练策略,是在训练过程中随机resize输入图片的高度,以增大模型的鲁棒性。在训练过程中随机选择(32,48,64)三种高度进行resize,实验证明在测试集上评估精度不掉,在端到端串联推理时,指标可以提升0.5%。

图片

DKD:蒸馏策略

识别模型的蒸馏包含两个部分,NRTRhead蒸馏和CTCHead蒸馏;

对于NRTR head,使用了DKD loss蒸馏,使学生模型NRTR head输出的logits与教师NRTR head接近。最终NRTR head的loss是学生与教师间的DKD loss和与ground truth的cross entropy loss的加权和,用于监督学生模型的backbone训练。通过实验,我们发现加入DKD loss后,计算与ground truth的cross entropy loss时去除label smoothing可以进一步提高精度,因此我们在这里使用的是不带label smoothing的cross entropy loss。

对于CTCHead,由于CTC的输出中存在Blank位,即使教师模型和学生模型的预测结果一样,二者输出的logits分布也会存在差异,影响教师模型向学生模型的知识传递。PP-OCRv4识别模型蒸馏策略中,将CTC输出logits沿着文本长度维度计算均值,将多字符识别问题转换为多字符分类问题,用于监督CTC Head的训练。使用该策略融合NRTRhead DKD蒸馏策略,指标从0.7377提升到0.7545。

在AI Studio在线体验PP-OCRv4的推理效果

https://aistudio.baidu.com/projectdetail/6611435

飞桨AI套件PaddleX中的PP-OCRv4

https://aistudio.baidu.com/modelsdetail?modelId=286

PaddleOCR项目地址

https://github.com/PaddlePaddle/PaddleOCR

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

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

相关文章

Navicat for Mysql 显示 emoji 表情符号乱码问题 — 其它乱码情况都可参考

系统环境: 操作系统:MAC OS 10.11.6 MySQL:Server version: 5.6.21 MySQL Community Server (GPL) Navicat for MySQL: version 9.3.1 - standard 1、问题发现 在客户端执行用户注册,用户名包括 emoji 表情符号,注册完…

SpringBoot基于AOP注解方式实现Redis缓存

一、前言 Spring中的AOP(Aspect Oriented Programming)是基于代理的AOP实现,通过使用基于代理的技术,可以在不修改原有代码的情况下,对原有代码进行增强和改进。Spring AOP实现了面向切面编程的功能,将横切…

电工-捡测电动机绕组首尾端的电路接线图

电工捡测电动机绕组首尾端的电路接线图 若三相电动机绕组首尾端接错,电动机起动时,会引起振动、噪声、三相电流严重不平衡、电动机过热、转速降低,甚至电动机不转等故障。 可用交流电源和灯泡来检查电动机三相绕组的首尾端用以检测电动机首尾…

Vue3项目实战

目录 一、项目准备 二、基础语法应用 2.1、mixin应用 2.2、网络请求 2.3、显示与隐藏 2.4、编程式路由跳转 2.5、下载资料 2.6、调用方法 2.7、监听路由变化 2.8、pinia应用 (1)存储token(user.js) (2)全选全不选案例(car.js) 一、项目准备 下载: cnp…

Google Play上线问题及解决方案

将应用上线到Google Play商店也可能会面临一些问题,在上线应用到Google Play商店之前,确保你充分测试应用,遵循Google Play的开发者政策和要求,以及关注用户的反馈,这些都能帮助你尽可能地解决问题并提供优秀的用户体验…

opencv 案例实战02-停车场车牌识别SVM模型训练及验证

1. 整个识别的流程图: 2. 车牌定位中分割流程图: 三、车牌识别中字符分割流程图: 1.准备数据集 下载车牌相关字符样本用于训练和测试,本文使用14个汉字样本和34个数字跟字母样本,每个字符样本数为40,样本尺…

无涯教程-PHP - preg_replace()函数

preg_replace() - 语法 mixed preg_replace (mixed pattern, mixed replacement, mixed string [, int limit [, int &$count]] ); preg_replace()函数的操作与POSIX函数ereg_replace()相同,不同之处在于可以在模式和替换输入参数中使用正则表达式。 可选的输…

PowerJob的启动及使用

首先,本文中提到的server就是指powerjob-server模块(也就是powerJob的重点之一的调度服务) 一、初始化项目 1. PowerJob的下载 官方文档 2. 导入到IDEA中,下载依赖后,打开powerjob-server模块的a…

开发中常用的小脚本、工具

文章目录 1. mysql数据库相关1.1 查看数据库各表占用内存大小1.2 数据库字段脱敏脚本 1. mysql数据库相关 1.1 查看数据库各表占用内存大小 SELECT table_name, ROUND(((data_length index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.t…

Instagram合规运营的10条策略

Instagram每月活跃用户15亿,是跨境外贸开发客户与广告引流的常用工具。本文总结10条Instagram运营基本策略与原则,帮助各位跨境人更好的了解平台规则,规避风险,提高投放效率! 1、使用商业账号 企业在instagram 上进行…

高精度参考电压源是什么意思

高精度参考电压源是一种能够提供稳定、准确且可靠的参考电压的电路或器件。在电子系统中,参考电压起着至关重要的作用,它被用作比较、校准、测量等各种应用中的基准电压。高精度参考电压源能够提供高精度的参考电压,具有很低的温漂、噪声和漂…

软考A计划-系统集成项目管理工程师-项目变更管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

2023年天府杯A 题:震源属性识别模型构建与震级预测

基于数据分析的震源属性识别模型构建与震级预测问题的研究 问题一: 解题思路: 第一部: 对数据进行一个处理,将数据进行分类,求出数据中的最大值,最小值,极差,方差等等一系列特征数据。,将天然…

Git企业开发控制理论和实操-从入门到深入(三)|分支管理

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

PhantomJS+java 后端生成echart图表的图片

PhantomJSjava 后端生成echart图表的图片 前言源码效果实现echarts-convertPhantomJS实现echarts截图得到图片java延时读取base64数据 参考 前言 该项目仅用作个人学习使用 源码 地址 docker镜像: registry.cn-chengdu.aliyuncs.com/qinjie/java-phantomjs:1.0 …

【Git】代码误推送还原(真实项目环境,非纸上谈兵)

背景 RT, 我今天眼睛花了,不小心把工作分支【合并】到了一个不相干的功能分支上,并且代码已经推送到远程仓库了。于是,只能尝试还原到上一次提交中。 【合并】分支有一个点我们是不可避免的,文字很难描述,…

一文总结:如何在csdn中使用markdown写出精美文章

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

导出功能exportExcel (现成直接用)

1. 实体类字段上加 Excel(name "xxx"), 表示要导出的字段 Excel(name "订单号")private String orderNo; 2. controller (get请求) /*** 导出订单列表*/ApiOperation("导出订单列表")GetMapping("/export")public void export(HttpS…

Ompl初探

在/ompl-1.x.0/build/Release/bin下有很多生成的demo可执行文件 在终端执行 ./demo_Point2DPlanning 测试程序 #include <ompl/base/SpaceInformation.h> #include <ompl/base/spaces/SE3StateSpace.h> #include <ompl/base/StateSpace.h> #include <o…

Python“牵手”蘑菇街商品详情API接口运用场景及功能介绍,蘑菇街接口申请指南

蘑菇街是专注于时尚女性消费者的电子商务网站&#xff0c;是时尚和生活方式目的地。 蘑菇街通过形式多样的时尚内容等时尚商品&#xff0c;让人们在分享和发现流行趋势的同时&#xff0c;享受购物体验。蘑菇街不是一个购物平台&#xff0c;它是一个购物指南网站&#xff0c;帮…