学习记录:PP-OCRv4

学习记录:PP-OCRv4

2009.PP-OCR: APractical Ultra Lightweight OCR System

2109.PP-OCRv2: Bag ofTricks for Ultra Lightweight OCR System

2206.PP-OCRv3: MoreAttempts for the Improvement of Ultra Lightweight OCR System

2308.PP-OCRv4: 目前代码已发布(2023.08.07)

工程代码:github_PaddleOCR_2.7(https://github.com/PaddlePaddle/PaddleOCR

1. 简介

PP-OCRv4在PP-OCRv3的基础上进一步升级。整体的框架图保持了与PP-OCRv3相同的pipeline,针对检测模型和识别模型进行了数据、网络结构、训练策略等多个模块的优化。 PP-OCRv4系统框图如下所示:
在这里插入图片描述

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

  • 检测模块:
    • 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蒸馏策略

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

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

2. 检测优化

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

消融实验如下:

序号策略模型大小hmean速度(cpu + mkldnn)
baselinePP-OCRv33.4M78.84%69ms
baseline studentPP-OCRv3 student3.4M76.22%69ms
01+PFHead3.6M76.97%96ms
02+Dynamic Shrink Ratio3.6M78.24%96ms
03+PP-LCNetv34.8M79.08%94ms
03+CML4.8M79.87%67ms

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

Hmean

调和平均数是一种用于计算一组正数的平均值的统计方法。它通过将每个数的倒数取平均值的倒数来计算。

(1)PFhead:多分支融合Head结构

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

在这里插入图片描述

上采样(Upsampling)

上采样是一种将图像或特征图的尺寸增大的操作。最常见的上采样方法是插值,例如最近邻插值、双线性插值等。上采样可以通过复制像素或者插值算法来增加图像的尺寸,但并没有引入新的参数。

转置卷积(Transposed Convolution)

转置卷积也称为反卷积,是一种通过学习的方式将输入特征图的尺寸增大的操作。转置卷积通过学习卷积核的权重来实现图像尺寸的扩大,并且引入了可学习的参数。它可以通过调整步长和填充来控制输出特征图的尺寸。

区别

-上采样是一种固定的操作,没有可学习的参数,而转置卷积是通过学习权重来实现尺寸的扩大。

-上采样的结果可能不够精细,因为它只是简单地复制像素或使用插值算法,而转置卷积可以通过学习权重来更好地重建细节。

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

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

收缩比率控制了正则化项的权重,该项被添加到模型的损失函数中。通过增加正则化项的权重,模型在训练过程中更倾向于简化,减少对训练数据的过度拟合。这样可以提高模型在未见过的数据上的泛化能力。

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

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

在这里插入图片描述

深度可分离卷积(Depthwise Separable Convolution):https://blog.csdn.net/zml194849/article/details/117021815

它是一种轻量级的卷积操作。DW卷积由两个步骤组成:深度卷积(DepthwiseConvolution)和逐点卷积(Pointwise Convolution)。

深度卷积(Depthwise Convolution)

是在每个输入通道上应用一个单独的卷积核,以捕捉输入数据的空间特征。这样可以减少参数量和计算量,因为每个通道都有自己的卷积核。

逐点卷积(Pointwise Convolution)

是在深度卷积的输出上使用一个1x1的卷积核在输入数据上进行卷积,过在每个位置上进行卷积操作来整合深度卷积的结果,用于将通道数降低或增加。逐点卷积可以帮助学习通道之间的非线性关系,并进行特征融合。这种分离的方式可以减少卷积核的数量。

在PPLCNet中,DW和PW的组合常用于替代传统的标准卷积操作,以减少模型的参数量和计算量,从而提高模型的效率和性能。深度卷积中,每个输入通道都共享一个卷积核,而在逐点卷积中,每个位置都共享一个卷积核。这种参数共享的方式进一步减少了模型的参数量。标准卷积操作需要在每个位置上同时处理所有输入通道的卷积操作,因此计算量更大。

h-swish

在这里插入图片描述

论文地址:https://arxiv.org/pdf/2109.15099.pdf

(4)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%。

在这里插入图片描述

KL div loss:相对熵

在这里插入图片描述

知识蒸馏

采取Teacher-Student模式:将复杂且大的模型作为Teacher,Student模型结构较为简单,用Teacher来辅助Student模型的训练,Teacher学习能力强,可以将它学到的知识迁移给学习能力相对弱的Student模型,以此来增强Student模型的泛化能力。复杂笨重但是效果好的Teacher模型不上线,就单纯是个导师角色,真正部署上线进行预测任务的是灵活轻巧的Student小模型。

3. 识别优化

PP-OCRv4识别模型在PP-OCRv3的基础上进一步升级。如下图所示,整体的框架图保持了与PP-OCRv3识别模型相同的pipeline,分别进行了数据、网络结构、训练策略等方面的优化。
在这里插入图片描述

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

ID策略模型大小精度预测耗时(CPU openvino)
01PP-OCRv312M71.50%8.54ms
02+DF12M72.70%8.54ms
03+ LiteNeck + GTC9.6M73.21%9.09ms
04+ PP-LCNetV311M74.18%9.8ms
05+ multi-scale11M74.20%9.8ms
06+ TextConAug11M74.72%9.8ms
08+ UDML11M75.45%9.8ms

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

(1)DF:数据挖掘方案

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

在这里插入图片描述

理解

高置信度样本被认为是冗余样本的原因是,它们的特征和其他样本非常相似,对于模型的学习和泛化能力没有额外的贡献。这些样本可能在训练数据中出现了多次,或者它们的特征在整个数据集中非常常见。将这些冗余样本添加到训练数据中可能会导致过拟合,即模型在训练数据上表现很好,但在新数据上的泛化能力较差。因此,通常建议将高置信度样本从训练数据中移除,以避免模型过拟合和提高整体模型性能。当一个样本的置信度小于0.15时,它被认为是低置信度样本,意味着模型对该样本的预测结果不确定。这些样本通常被认为是难以识别或质量较差的样本。

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

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

(3)Lite-Neck:精简参数的Neck结构

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

Backbone、Neck、Head

backbone是模型的主要组成部分,通常是一个卷积神经网络(CNN)或残差神经网络(ResNet)等。backbone负责提取输入图像的特征,以便后续的处理和分析。backbone 通常具有许多层和许多参数,可以提取出图像的高级特征表示。

neck 是连接 backbone 和head 的中间层。neck 的主要作用是对来自 backbone 的特征进行降维或调整,以便更好地适应任务要求。neck可以采用卷积层、池化层或全连接层等。

head是模型的最后一层,通常是一个分类器或回归器。head 通过输入经过 neck 处理过的特征,产生最终的输出。head的结构根据任务的不同而不同,例如对于图像分类任务,可以使用 softmax 分类器;对于目标检测任务,可以使用边界框回归器和分类器等。

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

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

在这里插入图片描述

CTC

CTC可以对输入序列和输出序列之间的对齐进行建模。然后,通过最大化对齐概率,CTC可以学习到输入序列和输出序列之间的映射关系。

GTC理解

将Attention机制引入到CTC训练中,以指导模型在生成输出序列时更加关注输入序列的重要部分。具体来说,该策略在训练过程中,同时使用CTC损失和Attention损失进行优化。CTC损失用于对齐训练数据的标签序列和模型的预测序列,而Attention损失用于衡量模型生成的输出序列与标签序列之间的相似度。

NRTR

在这里插入图片描述

论文地址:https://arxiv.org/pdf/1806.00926.pdf

(5)Multi-Scale:多尺度训练策略

动态尺度训练策略,是在训练过程中随机resize输入图片的高度,以增强识别模型在端到端串联使用时的鲁棒性。在训练时,每个iter从(32,48,64)三种高度中随机选择一种高度进行resize。实验证明,使用该策略,尽管在识别测试集上准确率没有提升,但在端到端串联评估时,指标提升0.5%。

在这里插入图片描述

(6)DKD:蒸馏策略

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

对于NRTR head,使用了DKD loss蒸馏,拉近学生模型和教师模型的NRTR head logits。最终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蒸馏策略,指标从74.72%提升到75.45%。

4. 端到端评估

经过以上优化,最终PP-OCRv4在速度可比情况下,中文场景端到端Hmean指标相比于PP-OCRv3提升4.5%,效果大幅提升。具体指标如下表所示:

ModelHmeanModel Size (M)Time Cost (CPU, ms)
PP-OCRv357.99%15.678
PP-OCRv462.24%15.876

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

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

ModelACC
PP-OCR_en54.38%
PP-OCRv3_en64.04%
PP-OCRv4_en70.1%

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

Model拉丁语系阿拉伯语系日语韩语
PP-OCR_mul69.60%40.50%38.50%55.40%
PP-OCRv3_mul71.57%72.90%45.85%77.23%
PP-OCRv4_mul80.00%75.48%56.50%83.25%
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力不秃头的小仙主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值