当前位置: 首页 > article >正文

paddleocr笔记

PP-OCRv1

PP-OCR中,对于一张图像,需要完成以下3个步骤提取其中的文字信息:

  1.  使用文本检测方法,获取文本区域多边形信息(PP-OCR中文本检测使用的是DBNet,因此获取的是四点信息)。
  2. 对上述文本多边形区域进行裁剪与透视变换校正,将文本区域转化成矩形框,再使用方向分类器对方 向进行校正。
  3. 基于包含文字区域的矩形框进行文本识别,得到最终识别结果。

经过以上3个步骤便完成了对于一张图像的文本检测与识别过程。 PP-OCR的系统框图如下所示。

 

 文本检测基于后处理方案比较简单的DBNet,文字区域校正使用几何变换以及方向分类器,文本识别使用基 于融合卷积特征与序列特征的CRNN模型,采用CTC loss解决预测结果与标签不一致的问题。

文本检测

  • DBNet算法详解

DB是一个基于分割的文本检测算法,其提出可微分阈值Differenttiable Binarization module(DB module)采用 动态的阈值区分文本区域与背景

 

 基于分割的普通文本检测算法其流程如上图中的蓝色箭头所示,此类方法得到分割结果之后采用一个固定的 阈值得到二值化的分割图,之后采用诸如像素聚类的启发式算法得到文本区域。 DB算法的流程如图中红色箭头所示,最大的不同在于DB有一个阈值图,通过网络去预测图片每个位置处的 阈值,而不是采用一个固定的值,更好的分离文本背景与前景。标准的二值化方法是不可微的,导致网络无法端对端训练。为了解决这个问题,DB算法提出了可微二值 化(Differentiable Binarization,DB).

  • 轻量级特征金字塔网络DBFPN结构

文本检测器的特征融合(neck)部分DBFPN与目标检测任务中的FPN结构类似,融合不同尺度的特征图,以提 升不同尺度的文本区域检测效果。 为了方便合并不同通道的特征图,这里使用 1×1 的卷积将特征图减少到相同数量的通道。 概率图和阈值图是由卷积融合的特征图生成的,卷积也与inner_channels相关联。因此,inner_channels对模型 尺寸有很大的影响。当inner_channels由256减小到96时,模型尺寸由7M减小到4.1M,速度提升48%,但精度 只是略有下降。

  • 移除了SE-Net

随着输入分辨率较大时,例如 640×640,使用SE模块较难估计通道的特征响应,精度提高有限, 但SE模块的时间成本非常高。

  • Cosine 学习率下降策略

Cosine学习率策略指的是学习率在训练的过程中,按照余弦的曲线变化。在 整个训练过程中,Cosine学习率衰减策略使得在网络在训练初期保持了较大的学习速率,在后期学习率会逐渐 衰减至0,其收敛速度相对较慢,但最终收敛精度较好。

  • 学习率预热策略

学习率预热指的是将学习率从一个很小的值开始,逐步增加到初始较大的学习率。它可以保证模型在训练初 期的稳定性。使用学习率预热策略有助于提高图像分类任务的准确性。

  • 模型裁剪策略-FPGM

深度学习模型中一般有比较多的参数冗余,我们可以使用裁剪的方法,去除模型中冗余的参数,从而提升模 型推理效率。 模型裁剪指的是通过去除网络中冗余的通道(channel)、滤波器(filter)、神经元(neuron)等,来得到一个更 轻量的网络,同时尽可能保证模型精度。 相比于裁剪通道或者特征图的方法,裁剪滤波器的方法可以得到更加规则的模型,因此减少内存消耗,加速 模型推理过程。 之前的裁剪滤波器的方法大多基于范数进行裁剪,即,认为范数较小的滤波器重要程度较小,但是这种方法 要求存在的滤波器的最小范数应该趋近于0,否则我们难以去除。

针对上面的问题,基于几何中心点的裁剪算法 (Filter Pruning via Geometric Median, FPGM)被提出。FPGM将 卷积层中的每个滤波器都作为欧几里德空间中的一个点,它引入了几何中位数这样一个概念,即与所有采样 点距离之和最小的点。如果一个滤波器的接近这个几何中位数,那我们可以认为这个滤波器的信息和其他滤 波器重合,可以去掉。 FPGM与基于范数的裁剪算法的对比如下图所示。PaddleSlim/docs/zh_cn/api_cn/dygraph/pruners/fpgm_filter_pruner.rst at release/2.0.0 · PaddlePaddle/PaddleSlim · GitHub

 方向分类器

方向分类器的任务是用于分类出文本检测出的文本实例的方向,将文本旋转到0度之后,再送入后续的文本 识别器中。PP-OCR中,考虑了 0 度和 180 度2个方向。

 文本识别

  • CTC算法:CRNN

基于 CTC 最典型的算法是CRNN (Convolutional Recurrent Neural Network),它的特征提取部分使用主流的卷 积结构,常用的有ResNet、MobileNet、VGG等。由于文本识别任务的特殊性,输入数据中存在大量的上下文信 息,卷积神经网络的卷积核特性使其更关注于局部信息,缺乏长依赖的建模能力,因此仅使用卷积网络很难 挖掘到文本之间的上下文联系。为了解决这一问题,CRNN文本识别算法引入了双向 LSTM(Long Short-Term Memory) 用来增强上下文建模,通过实验证明双向LSTM模块可以有效的提取出图片中的上下文信息。最终 将输出的特征序列输入到CTC模块,直接解码序列结果。该结构被验证有效,并广泛应用在文本识别任务中。

CRNN属于规则文本识别,即文字不能弯曲。CRNN 的网络结构体系如下所示,从下往上分别为卷积层、递归层和转录层三部分:

 

  •  Sequence2Sequence

 Sequence2Sequence 算法是由编码器 Encoder 把所有的输入序列都编码成一个统一的语义向量,然后再由解码 器Decoder解码。在解码器Decoder解码的过程中,不断地将前一个时刻的输出作为后一个时刻的输入,循环 解码,直到输出停止符为止。一般编码器是一个RNN,对于每个输入的词,编码器输出向量和隐藏状态,并 将隐藏状态用于下一个输入的单词,循环得到语义向量;解码器是另一个RNN,它接收编码器输出向量并输 出一系列字以创建转换。

 

 以上两个算法在规则文本上都有很不错的效果,但由于网络设计的局限性,这类方法很难解决弯曲和旋转的 不规则文本识别任务。

  •  学习率策略和正则化

在识别模型训练中,学习率下降策略与文本检测相同,也使用了Cosine+Warmup的学习率策略。 正则化是一种广泛使用的避免过度拟合的方法,一般包含L1正则化和L2正则化。在大多数使用场景中,都使用L2正则化。它主要的原理就是计算网络中权重的L2范数,添加到损失函数中。在L2正则化的帮助下, 网络的权重趋向于选择一个较小的值,最终整个网络中的参数趋向于0,从而缓解模型的过拟合问题,提高 了模型的泛化性能。 

  •  特征图降采样策略

骨干网络一般都是使用的图像分类任务中的骨干网络,它的 输入分辨率一般设置为224x224,降采样时,一般宽度和高度会同时降采样。 但是对于文本识别任务来说,由于输入图像一般是32x100,长宽比非常不平衡,此时对宽度和高度同时降采样,会导致特征损失严重,因此图像分类任务中的骨干网络应用到文本识别任务中需要进行特征图降采样方面的适配

在PaddleOCR中,CRNN中文文本识别模型设置的输入图像的高度和宽度设置为32和320。原始MobileNetV3来 自分类模型,如前文所述,需要调整降采样的步长,适配文本图像输入分辨率。具体地,为了保留更多的水平信息,将下采样特征图的步长从 (2,2)修改为 (2,1),第一次下采样除外。最终如下图所示。

 

 为了保留更多的垂直信息,进一步将第二次下采样特征图的步长从 (2,1)修改为 (1,1)。因此,第二 个下采样特征图的步长s2会显著影响整个特征图的分辨率和文本识别器的准确性。在PP-OCR中,s2被设置为 (1,1),可以获得更好的性能。同时,由于水平的分辨率增加,CPU的推理时间从 11.84ms 增加到 12.96ms。

  • PACT 在线量化策略

采用与方向分类器量化类似的方案来减小文本识别器的模型大小。由于LSTM量化的复杂性,PP-OCR中 没有对LSTM进行量化。使用该量化策略之后,模型大小减小 67.4%、预测速度加速 8%、准确率提升 1.6%, 量化可以减少模型冗余,增强模型的表达能力。

PP-OCRv2

相比于PP-OCR,PP-OCRv2 在骨干网络、数据增广、损失函数这三个方面进行进一步优化,解决端侧预测效 率较差、背景复杂和相似字符误识等问题,同时引入了知识蒸馏训练策略,进一步提升模型精度。具体地:

  1. 检测模型优化: (1) 采用 CML 协同互学习知识蒸馏策略;(2) CopyPaste 数据增广策略;
  2. 识别模型优化: (1) PP-LCNet 轻量级骨干网络;(2) U-DML 改进知识蒸馏策略;(3) Enhanced CTC loss 损 失函数改进。 从效果上看,主要有三个方面提升:
  3. 在模型效果上,相对于 PP-OCR mobile 版本提升超7%;
  4. 在速度上,相对于 PP-OCR server 版本提升超过220%;
  5. 在模型大小上,11.6M 的总大小,服务器端和移动端都可以轻松部署。

 

文字检测

  •  CML知识蒸馏策略

知识蒸馏的方法在部署中非常常用,通过使用大模型指导小模型学习的方式,在通常情况下可以使得小模型 在预测耗时不变的情况下,精度得到进一步的提升,从而进一步提升实际部署的体验。 标准的蒸馏方法是通过一个大模型作为 Teacher 模型来指导 Student 模型提升效果,而后来又发展出 DML 互 学习蒸馏方法,即通过两个结构相同的模型互相学习,相比于前者,DML 脱离了对大的 Teacher 模型的依赖, 蒸馏训练的流程更加简单,模型产出效率也要更高一些。 PP-OCRv2 文字检测模型中使用的是三个模型之间的 CML (Collaborative Mutual Learning) 协同互蒸馏方法,既 包含两个相同结构的 Student 模型之间互学习,同时还引入了较大模型结构的 Teacher 模型。CML与其他蒸馏 算法的对比如下所示。

pp-ocrv2的文本检测任务中,CML的结构框图如下所示。这里的 response maps 指的就是DBNet最后一层的概率 图输出 (Probability map) 。在整个训练过程中,总共包含3个损失函数。

• GT loss

两个 Student 模型中大部分的参数都是从头初始化的,因此它们在训练的过程中需要受到 groundtruth (GT) 信 息的监督。DBNet 训练任务的 pipeline 如下所示。其输出主要包含 3 种 feature map,具体如下所示。对这 3 种 feature map 使用不同的 loss function 进行监督

 

• DML loss

• Distill loss

Teacher 模型的骨干网络为 ResNet18_vd,2 个 Student 模型的骨干网络为 MobileNetV3。

 

方向文本分类

文本检测 

 PP-OCRv3

具体的优化策略包括:

检测模块

  1. LK-PAN:大感受野的PAN结构
  2. DML:教师模型互学习策略
  3. RSE-FPN:残差注意力机制的FPN结构

识别模块

  1. SVTR_LCNet:轻量级文本识别网络
  2. GTC:Attention指导CTC训练策略
  3. TextConAug:挖掘文字上下文信息的数据增广策略
  4. TextRotNet:自监督的预训练模型
  5. UDML:联合互学习策略
  6. UIM:无标注数据挖掘方案 

超轻量OCR系统PP-OCRv3技术解读 - 知乎 (zhihu.com)

PP-OCRv4

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

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

  • 检测模块:
    • LCNetV3:精度更高的骨干网络
    • PFHead:并行head分支融合结构
      • PFhead结构如下图所示,PFHead在经过第一个转置卷积后,分别进行上采样和转置卷积,上采样的输出通过3x3卷积得到输出结果,然后和转置卷积的分支的结果级联并经过1x1卷积层,最后1x1卷积的结果和转置卷积的结果相加得到最后输出的概率图。PP-OCRv4学生检测模型使用PFhead,hmean从76.22%增加到76.97%。
    • 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%。

PP-StructureV1

PP-Structure是一个可用于复杂文档结构分析和处理的OCR工具包,旨在帮助开发者更好的完成文档理解相关任务

PP-Structure的主要特性如下:

  • 支持对图片形式的文档进行版面分析,可以划分文字、标题、表格、图片以及列表5类区域(与Layout-Parser联合使用)
  • 支持文字、标题、图片以及列表区域提取为文字字段(与PP-OCR联合使用)
  • 支持表格区域进行结构化分析,最终结果输出Excel文件
  • 支持python whl包和命令行两种方式,简单易用
  • 支持版面分析和表格结构化两类任务自定义训练
  • 支持文档视觉问答(Document Visual Question Answering,DocVQA)任务-语义实体识别(Semantic Entity Recognition,SER)和关系抽取(Relation Extraction,RE)

PP-StructureV2 

PP-StructureV2在PP-StructureV1的基础上进一步改进,主要有以下3个方面升级:

  • 系统功能升级 :新增图像矫正和版面复原模块,图像转word/pdf、关键信息抽取能力全覆盖!
  • 系统性能优化 :
    • 版面分析:发布轻量级版面分析模型,速度提升11倍,平均CPU耗时仅需41ms
    • 表格识别:设计3大优化策略,预测耗时不变情况下,模型精度提升6%
    • 关键信息抽取:设计视觉无关模型结构,语义实体识别精度提升2.8%,关系抽取精度提升9.1%
  • 中文场景适配 :完成对版面分析与表格识别的中文场景适配,开源开箱即用的中文场景版面结构化模型!

PP-StructureV2系统流程图如下所示,文档图像首先经过图像矫正模块,判断整图方向并完成转正,随后可以完成版面信息分析与关键信息抽取2类任务。版面分析任务中,图像首先经过版面分析模型,将图像划分为文本、表格、图像等不同区域,随后对这些区域分别进行识别,如,将表格区域送入表格识别模块进行结构化识别,将文本区域送入OCR引擎进行文字识别,最后使用版面恢复模块将其恢复为与原始图像布局一致的word或者pdf格式的文件;关键信息抽取任务中,首先使用OCR引擎提取文本内容,然后由语义实体识别模块获取图像中的语义实体,最后经关系抽取模块获取语义实体之间的对应关系,从而提取需要的关键信息。

从算法改进思路来看,对系统中的3个关键子模块,共进行了8个方面的改进。

  • 版面分析

    • PP-PicoDet:轻量级版面分析模型
    • FGD:兼顾全局与局部特征的模型蒸馏算法
  • 表格识别

    • PP-LCNet: CPU友好型轻量级骨干网络
    • CSP-PAN:轻量级高低层特征融合模块
    • SLAHead:结构与位置信息对齐的特征解码模块
  • 关键信息抽取

    • VI-LayoutXLM:视觉特征无关的多模态预训练模型结构
    • TB-YX:考虑阅读顺序的文本行排序逻辑
    • UDML:联合互学习知识蒸馏策略

最终,与PP-StructureV1相比:

  • 版面分析模型参数量减少95.6%,推理速度提升11倍,精度提升0.4%;
  • 表格识别预测耗时不变,模型精度提升6%,端到端TEDS提升2%;
  • 关键信息抽取模型速度提升2.8倍,语义实体识别模型精度提升2.8%;关系抽取模型精度提升9.1%。

 参考:

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7

PaddleOCR/ppstructure/docs/PP-StructureV2_introduction.md at release/2.7 · PaddlePaddle/PaddleOCR · GitHub


http://www.kler.cn/news/148167.html

相关文章:

  • cocos2dx ​​Animate3D(二)
  • 【TiDB】TiDB离线方式部署
  • Ubuntu18.04安装A-Loam保姆级教程
  • BUUCTF [MRCTF2020]Ez_bypass 1
  • npm管理发布包-创建与发布
  • python:range函数的使用
  • 蓝桥杯-01简介
  • 「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求
  • 获得文件MD5——校验完整性 window 和 Linux下操作
  • 2023亚太地区数学建模C题思路分析+模型+代码+论文
  • oracle 表树形结构查询递归查询
  • 学习知识回顾随笔(远程连接MySQL|远程访问Django|HTTP协议|Web框架)
  • assert
  • Nevron Vision for .NET 2023.1 Crack
  • vue脚手架的基础搭建过程
  • Android frameworks 开发总结之九(Settings)
  • electron入门(一)环境搭建,实现样例
  • Rust UI开发(四):iced中如何添加菜单栏(串口调试助手)
  • 【React】打包优化-配置CDN
  • 002、ArkTS
  • 计算机基础知识59
  • python循环
  • ESP32-Web-Server编程- JS 基础 4
  • 从赛车到服务台:IT团队可以从F1赛车中学到什么?
  • 了解JSX
  • 算法效率的度量
  • Mysql面经
  • 4.Spring源码解析-loadBeanDefinitions(XmlBeanDefinitionReader)
  • 2161根据数字划分数组
  • 没有哈希时间锁定合约的跨链原子交换