PaddleOCR 算法与模型全景解析:两阶段、端到端、表格与关键信息抽取算法体系
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
本文系统梳理 PaddleOCR 仓库中已支持的 OCR 前沿算法与模型体系,涵盖文本检测、文本识别、文本超分辨率、公式识别、端到端 OCR、表格识别与关键信息抽取共七大类算法,并汇总各算法在英文公开数据集上的精度指标、配置文件与模型索引。读完本文,你将掌握 PaddleOCR 算法矩阵的全貌,能够根据业务场景在检测/识别/端到端/表格/KIE 等算法之间做出正确的模型选型,并能循着模块化架构在 PaddleOCR 中快速接入新算法。
本文的主体内容源自仓库文档 docs/version2.x/algorithm/overview.md,并补充了源码、配置文件与教程链接作为深化佐证。
1. 算法分类总览
PaddleOCR 将已支持的算法划分为两大技术路线:
- 两阶段算法(Two-stage):先由文本检测算法从图像中定位文本行,再由文本识别算法对裁剪出的文本行进行内容识别。两阶段算法内部又细分为文本检测、文本识别、文本超分辨率、公式识别四个子类。
- 端到端算法(End-to-end):在单个模型中同时完成文本检测与识别,共享 CNN 特征并联合训练,模型更小、推理更快。
在两阶段路线之外,PaddleOCR 还提供了面向结构化文档理解的表格识别算法与关键信息抽取(KIE)算法,共同构成完整的文档智能处理链路。
PaddleOCR 持续新增支持 OCR 领域前沿算法与模型,并面向开发者开放了算法共建流程:新增算法可参考 使用 PaddleOCR 架构添加新算法 教程。关于更多包括中文在内的其他数据集上的自研模型,请参考 PP-OCR 系列模型列表。
2. 两阶段算法:文本检测
2.1 已支持的检测算法
PaddleOCR 已支持的文本检测算法(点击链接获取各算法的使用教程):
- DB 与 DB++
- EAST
- SAST
- PSENet
- FCENet
- DRRG
- CT
这 7 个算法覆盖了检测领域的典型技术流派:DB/DB++ 属于基于可微二值化的实时检测方法,EAST/SAST 面向多方向文本,PSENet 与 FCENet 针对弯曲文本的渐进式扩展与傅里叶轮廓建模,DRRG 与 CT 面向任意形状文本的图推理与连接文本提议。
2.2 ICDAR2015 数据集指标
在 ICDAR2015 文本检测公开数据集上,算法复现效果如下(precision/recall/Hmean,单位均为 %):
| 模型 | 骨干网络 | precision | recall | Hmean |
|---|---|---|---|---|
| EAST | ResNet50_vd | 88.71 | 81.36 | 84.88 |
| EAST | MobileNetV3 | 78.20 | 79.10 | 78.65 |
| DB | ResNet50_vd | 86.41 | 78.72 | 82.38 |
| DB | MobileNetV3 | 77.29 | 73.08 | 75.12 |
| SAST | ResNet50_vd | 91.39 | 83.77 | 87.42 |
| PSE | ResNet50_vd | 85.81 | 79.53 | 82.55 |
| PSE | MobileNetV3 | 82.20 | 70.48 | 75.89 |
| DB++ | ResNet50 | 90.89 | 82.66 | 86.58 |
在 Total-text 文本检测公开数据集上,算法效果如下:
| 模型 | 骨干网络 | precision | recall | Hmean |
|---|---|---|---|---|
| SAST | ResNet50_vd | 89.63 | 78.44 | 83.66 |
| CT | ResNet18_vd | 88.68 | 81.70 | 85.05 |
在 CTW1500 文本检测公开数据集上,算法效果如下:
| 模型 | 骨干网络 | precision | recall | Hmean |
|---|---|---|---|---|
| FCE | ResNet50_dcn | 88.39 | 82.18 | 85.27 |
| DRRG | ResNet50_vd | 89.92 | 80.91 | 85.18 |
说明:SAST 模型训练额外加入了 ICDAR2013、ICDAR2017、COCO-Text、ArT 等公开数据集进行调优,因此其在多方向文本上的 Hmean 指标显著领先于同骨干网络的 DB/EAST。各模型训练权重与推理模型的下载地址可在对应算法教程页(如 DB 与 DB++)中获取,PaddleOCR 用到的经过整理格式的英文公开数据集也可在对应教程中查询下载途径。
2.3 检测模型配置与模块化组网
从指标表可以看出,同一算法搭配不同骨干网络(如 ResNet50_vd 与 MobileNetV3)会在精度与模型体积之间形成不同取舍。PaddleOCR 对代码进行了模块化,训练不同检测模型只需更换配置文件。以 DB 算法为例,其训练配置位于 configs/det/det_r50_vd_db.yml,核心配置段如下:
Architecture: model_type: det algorithm: DB Transform: # 检测模型通常不使用 Transform Backbone: name: ResNet_vd layers: 50 Neck: name: DBFPN out_channels: 256 Head: name: DBHead k: 50 Loss: name: DBLoss balance_loss: true main_loss_type: DiceLoss alpha: 5 beta: 10 ohem_ratio: 3 PostProcess: name: DBPostProcess thresh: 0.3 # 二值化阈值 box_thresh: 0.7 # 检测框过滤阈值 max_candidates: 1000 unclip_ratio: 1.5 # 文本框扩张比例这份配置体现了 PaddleOCR 的四段式模块化组网设计:网络按照 transforms → backbones → necks → heads 的顺序依次通过四个部分。这一结构在 ppocr/modeling/architectures/base_model.py 的BaseModel类中落地实现,它依次调用build_transform、build_backbone、build_neck、build_head完成组网,并在forward中按同一顺序前向传播;每一段都可选(置空即跳过),从而让 CRNN、DB、TableMaster 等完全不同的算法共用同一套装配逻辑。
数据侧同样模块化:训练时经过DecodeImage(图像解码)、DetLabelEncode(检测标签编码)、IaaAugment(仿射/翻转/缩放增强)、EastRandomCropData(随机裁剪)、MakeBorderMap与MakeShrinkMap(DB 特有的阈值图与收缩图 label 制作)、NormalizeImage与ToCHWImage(归一化与通道变换)等模块,最终由KeepKeys指定 dataloader 返回的字段顺序。这些模块的实现在 ppocr/data/imaug 目录下,并通过 ppocr/data/imaug/init.py 统一导出。
3. 两阶段算法:文本识别
3.1 已支持的识别算法
PaddleOCR 已支持的文本识别算法(点击链接获取使用教程):
- CRNN
- Rosetta
- STAR-Net
- RARE
- SRN
- NRTR
- SAR
- SEED
- SVTR
- ViTSTR
- ABINet
- VisionLAN
- SPIN
- RobustScanner
- RFL
- ParseQ
- CPPD
- SATRN
识别算法在技术路线上覆盖了 CNN+CTC(CRNN、Rosetta、SVTR)、空间变换+CTC/Attention(STAR-Net、RARE)、基于 Transformer 的语言模型(SRN、NRTR、SATRN)、语义推理(ABINet、VisionLAN)、序列建模(SAR、SPIN、RobustScanner)以及端到端可训练的视觉 Transformer(ViTSTR、ParseQ)等主流方向。
3.2 公开数据集指标
PaddleOCR 参考 DTRB 文字识别训练和评估流程,使用 MJSynth 与 SynthText 两个文字识别数据集训练,在 IIIT、SVT、IC03、IC13、IC15、SVTP、CUTE 数据集上进行评估,各模型复现效果如下(Avg Accuracy 列单位 %):
| 模型 | 骨干网络 | Avg Accuracy | 模型存储命名 |
|---|---|---|---|
| Rosetta | Resnet34_vd | 79.11 | rec_r34_vd_none_none_ctc |
| Rosetta | MobileNetV3 | 75.80 | rec_mv3_none_none_ctc |
| CRNN | Resnet34_vd | 81.04 | rec_r34_vd_none_bilstm_ctc |
| CRNN | MobileNetV3 | 77.95 | rec_mv3_none_bilstm_ctc |
| StarNet | Resnet34_vd | 82.85 | rec_r34_vd_tps_bilstm_ctc |
| StarNet | MobileNetV3 | 79.28 | rec_mv3_tps_bilstm_ctc |
| RARE | Resnet34_vd | 83.98 | rec_r34_vd_tps_bilstm_att |
| RARE | MobileNetV3 | 81.76 | rec_mv3_tps_bilstm_att |
| SRN | Resnet50_vd_fpn | 86.31 | rec_r50fpn_vd_none_srn |
| NRTR | NRTR_MTB | 84.21 | rec_mtb_nrtr |
| SAR | Resnet31 | 87.20 | rec_r31_sar |
| SEED | Aster_Resnet | 85.35 | rec_resnet_stn_bilstm_att |
| SVTR | SVTR-Tiny | 89.25 | rec_svtr_tiny_none_ctc_en |
| ViTSTR | ViTSTR | 79.82 | rec_vitstr_none_ce |
| ABINet | Resnet45 | 90.75 | rec_r45_abinet |
| VisionLAN | Resnet45 | 90.30 | rec_r45_visionlan |
| SPIN | ResNet32 | 90.00 | rec_r32_gaspin_bilstm_att |
| RobustScanner | ResNet31 | 87.77 | rec_r31_robustscanner |
| RFL | ResNetRFL | 88.63 | rec_resnet_rfl_att |
| ParseQ | VIT | 91.24 | rec_vit_parseq_synth |
| CPPD | SVTR-Base | 93.8 | rec_svtrnet_cppd_base_en |
| SATRN | ShallowCNN | 88.05 | rec_satrn |
表中的"模型存储命名"字段直接对应模型参数文件的命名规范,同时与仓库 configs/rec 目录下的配置文件一一对应(例如rec_r34_vd_none_bilstm_ctc对应 configs/rec/rec_r34_vd_none_bilstm_ctc.yml,rec_mv3_none_bilstm_ctc对应 configs/rec/rec_mv3_none_bilstm_ctc.yml),方便开发者按命名快速检索配置与权重。
3.3 识别模型配置解读
以 CRNN 的轻量实现 configs/rec/rec_mv3_none_bilstm_ctc.yml 为例,其网络结构配置展示了识别模型与检测模型在模块装配上的差异:
Global: character_dict_path: # 字符字典路径 max_text_length: 25 # 最大文本长度 use_space_char: False # 是否使用空格字符 Architecture: model_type: rec algorithm: CRNN Transform: # 识别可选用 TPS 等空间变换 Backbone: name: MobileNetV3 scale: 0.5 model_name: large Neck: name: SequenceEncoder encoder_type: rnn # 序列编码:rnn/cnn/reshape hidden_size: 96 Head: name: CTCHead # 输出头:CTCHead 或 AttentionHead fc_decay: 0 Loss: name: CTCLoss PostProcess: name: CTCLabelDecode对照 BaseModel 源码 可以看到:识别任务通过Neck的SequenceEncoder对骨干网络输出的特征图进行序列编码(rnn 类型即双向 LSTM),再由CTCHead输出逐帧字符概率分布,配合CTCLoss完成训练;若将Head换成 Attention 类型并配套AttentionLoss,即切换为 RARE 一类的注意力机制方案——同一骨架通过配置即可在 CTC 与 Attention 两种范式间切换,这正是模块化组网的价值所在。
4. 两阶段算法:文本超分辨率与公式识别
4.1 文本超分辨率算法
低分辨率文本行会显著拉低识别精度,文本超分辨率(Text Super-Resolution)作为识别前处理可有效缓解该问题。PaddleOCR 已支持的超分辨率算法(点击链接获取使用教程):
- Text Gestalt
- Text Telescope
在 TextZoom 公开数据集上,算法效果如下:
| 模型 | 骨干网络 | PSNR_Avg | SSIM_Avg | 配置文件 |
|---|---|---|---|---|
| Text Gestalt | tsrn | 19.28 | 0.6560 | configs/sr/sr_tsrn_transformer_strock.yml |
| Text Telescope | tbsrn | 21.56 | 0.7411 | configs/sr/sr_telescope.yml |
Text Telescope 在 PSNR 与 SSIM 两项指标上均高于 Text Gestalt,适合对识别前图像质量要求较高的场景。训练、评估与预测的完整流程可参考对应的 超分辨率教程。
4.2 公式识别算法
公式识别(Formula Recognition)用于将数学公式图像转换为 LaTeX 序列。PaddleOCR 已支持的公式识别算法:
- CAN
- LaTeX-OCR
在 CROHME 手写公式数据集上,算法效果如下:
| 模型 | 骨干网络 | 配置文件 | ExpRate |
|---|---|---|---|
| CAN | DenseNet | configs/rec/rec_d28_can.yml | 51.72% |
CAN(Counting-Aware Network)通过引入计数模块强化对公式结构的感知,ExpRate 衡量的是整条公式识别完全正确的比例,其难度显著高于逐字符精度,因此该指标在公式识别任务中具有较强区分度。
5. 端到端算法:PGNet
端到端 OCR 算法可在单个模型中同时完成文字检测与文字识别。与两阶段方案相比,其共享检测与识别模块的 CNN 特征并联合训练,模型更小、推理更快。PaddleOCR 已支持的端到端算法:
- PGNet
PGNet 具备以下特性(详见 PGNet 教程):
- 设计 PGNet loss 指导训练,不需要字符级别的标注;
- 不需要 NMS 和 ROI 相关操作,显著加速预测;
- 提出预测文本行内阅读顺序的模块;
- 提出基于图的修正模块(GRM)进一步提升识别性能。
输入图像经特征提取后送入四个分支:文本边缘偏移量预测(TBO)、文本中心线预测(TCL)、文本方向偏移量预测(TDO)与文本字符分类图预测(TCC)。其中 TBO 与 TCL 的输出经后处理得到文本检测结果,TCL、TDO、TCC 联合负责文本识别。
在 Total Text 测试集(测试环境:NVIDIA Tesla V100-SXM2-16GB)上的复现效果如下:
| 模型 | det_precision | det_recall | det_f_score | e2e_precision | e2e_recall | e2e_f_score | FPS |
|---|---|---|---|---|---|---|---|
| PGNetA(论文) | 85.30 | 86.80 | 86.10 | - | - | 61.70 | 38.20 (size=640) |
| PGNetA(PaddleOCR 复现) | 87.03 | 82.48 | 84.69 | 61.71 | 58.43 | 60.03 | 48.73 (size=768) |
说明:PaddleOCR 中的 PGNet 实现针对预测速度做了优化,在精度下降可接受范围内显著提升了端到端预测速度(FPS 由 38.20 提升至 48.73)。PGNet 对应的训练/推理脚本位于 tools/infer/predict_e2e.py。
6. 表格识别算法:TableMaster
表格识别用于从表格图像中还原单元格结构与内容,是文档结构化的关键环节。PaddleOCR 已支持的表格识别算法:
- TableMaster
在 PubTabNet 表格识别公开数据集上,算法效果如下:
| 模型 | 骨干网络 | 配置文件 | acc |
|---|---|---|---|
| TableMaster | TableResNetExtra | configs/table/table_master.yml | 77.47% |
configs/table/table_master.yml 是 TableMaster 的训练配置,其关键参数包括:Global.box_format支持xywh/xyxy/xyxyxyxy四种框格式;Global.d2s_train_image_shape: [3, 480, 480]控制训练输入尺寸;网络部分采用TableResNetExtra骨干(含 GC 模块配置gcb_config)与TableMasterHead输出头(含hidden_size: 512、headers: 8等 Transformer 解码参数);损失函数为TableMasterLoss,其ignore_index需设为字典长度 + 3。除 TableMaster 外,仓库 configs/table 还提供了 SLANet 系列的表格结构识别配置,可按需选用。
7. 关键信息抽取算法(KIE)
关键信息抽取(Key Information Extraction)用于从版面文档中抽取出语义化的字段(如发票中的金额、日期),是文档理解与 RAG 场景的核心能力。PaddleOCR 已支持的关键信息抽取算法:
- VI-LayoutXLM
- LayoutLM / LayoutLMv2 / LayoutXLM
- SDMGR
7.1 wildreceipt 发票数据集指标
在 wildreceipt 发票公开数据集上,算法复现效果如下:
| 模型 | 骨干网络 | 配置文件 | hmean |
|---|---|---|---|
| SDMGR | VGG6 | configs/kie/sdmgr/kie_unet_sdmgr.yml | 86.70% |
SDMGR 采用图神经网络对文本节点进行关系建模,其配置以model_type: kie、algorithm: SDMGR声明任务类型,训练时通过Global.class_path指定类别列表文件,Global.img_scale: [1024, 512]控制输入尺寸,优化器使用Piecewise分段学习率衰减。
7.2 XFUND_zh 数据集指标(SER 与 RE)
在 XFUND_zh 公开数据集上,KIE 算法在语义实体识别(SER)与关系抽取(RE)两种任务上的效果如下:
| 模型 | 骨干网络 | 任务 | 配置文件 | hmean |
|---|---|---|---|---|
| VI-LayoutXLM | VI-LayoutXLM-base | SER | configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh_udml.yml | 93.19% |
| LayoutXLM | LayoutXLM-base | SER | configs/kie/layoutlm_series/ser_layoutxlm_xfund_zh.yml | 90.38% |
| LayoutLM | LayoutLM-base | SER | configs/kie/layoutlm_series/ser_layoutlm_xfund_zh.yml | 77.31% |
| LayoutLMv2 | LayoutLMv2-base | SER | configs/kie/layoutlm_series/ser_layoutlmv2_xfund_zh.yml | 85.44% |
| VI-LayoutXLM | VI-LayoutXLM-base | RE | configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh_udml.yml | 83.92% |
| LayoutXLM | LayoutXLM-base | RE | configs/kie/layoutlm_series/re_layoutxlm_xfund_zh.yml | 74.83% |
| LayoutLMv2 | LayoutLMv2-base | RE | configs/kie/layoutlm_series/re_layoutlmv2_xfund_zh.yml | 67.77% |
从指标可以清晰看到视觉语言模型(LayoutLM → LayoutLMv2 → LayoutXLM → VI-LayoutXLM)的演进收益:融合视觉特征(LayoutLMv2)、引入多语言增强(LayoutXLM)并进一步轻量化(VI-LayoutXLM)后,SER 的 hmean 由 77.31% 提升至 93.19%,RE 的 hmean 由 67.77% 提升至 83.92%。注意同一配置文件中 SER 与 RE 通过不同 yml(ser_前缀与re_前缀)区分,任务类型由配置文件的Architecture段声明,训练与预测流程分别参见 VI-LayoutXLM 教程 与 SDMGR 教程。
8. 基于指标表的模型选型建议
综合本文各公开数据集指标,可形成如下选型参考:
- 实时检测:需要兼顾速度与精度的通用场景,优先选择 DB(ResNet50_vd 版 ICDAR2015 Hmean 82.38%,MobileNetV3 版仅 75.12% 但体积大幅缩减);追求极限精度可选 DB++(Hmean 86.58%);
- 多方向/弯曲文本检测:Total-text 与 CTW1500 场景分别选择 SAST(Hmean 83.66%)与 FCE/DRRG(Hmean 约 85.2%);
- 高精度识别:在 DTRB 评估协议下,CPPD(93.8%)、ParseQ(91.24%)、ABINet(90.75%)位居前列,适合对精度敏感的离线场景;SVTR-Tiny(89.25%)则提供了轻量与精度的良好平衡;
- 低分辨率文本:识别前接入 Text Telescope 超分(TextZoom PSNR 21.56 / SSIM 0.7411)可改善识别效果;
- 端到端需求:需要单模型同时输出检测框与识别结果、且对延迟敏感时选择 PGNet(复现 FPS 48.73);
- 文档结构化:表格场景选择 TableMaster(PubTabNet acc 77.47%),字段抽取场景选择 VI-LayoutXLM(XFUND_zh SER 93.19% / RE 83.92%)或 SDMGR(wildreceipt hmean 86.70%)。
需要说明:以上指标均为各算法在英文公开数据集上的复现结果,用于算法横向对比;面向中文等实际业务场景时,应优先选用仓库 docs/version2.x/ppocr/model_list.md 中提供的 PP-OCR 系列推理模型/训练模型/预训练模型/nb 模型(含多语言模型),其配置文件位于 configs 目录。
9. 从算法到实现:模块化架构与算法接入
PaddleOCR 之所以能以"换配置即换算法"的方式覆盖如此多的算法,得益于其高度模块化的架构。所有算法均按统一范式拆解为以下模块(目录结构见 ppocr):
- 数据加载与处理(ppocr/data):图片读取、数据增强与 label 制作,全部由可插拔的 module 顺序执行;
- 网络(ppocr/modeling):分为 architectures(组网)、transforms(图像变换)、backbones(特征提取)、necks(特征增强)、heads(输出模块)五部分;
- 后处理(ppocr/postprocess):解码网络输出得到文本框或识别文本,例如 DB 的后处理实现于 ppocr/postprocess/db_postprocess.py;
- 损失函数(ppocr/losses):计算网络输出与 label 之间的距离;
- 指标评估(ppocr/metrics):计算当前 batch 上的性能指标;
- 优化器(ppocr/optimizer):训练优化器及其内置的正则化与学习率衰减模块。
若要在 PaddleOCR 中新增一个算法,只需按照 使用 PaddleOCR 架构添加新算法 教程,在上图中的每个部分内新增对应模块文件(例如在 ppocr/modeling/backbones 下新建my_backbone.py并实现继承nn.Layer的类),随后在对应__init__.py中注册,最后在 yml 配置文件中以name字段引用即可完成接入。训练与推理入口分别为 tools/train.py 与 tools/infer 目录下的predict_det.py、predict_rec.py、predict_e2e.py、predict_system.py等脚本。
10. 总结
本文以 PaddleOCR 算法概览文档为主线,系统梳理了仓库支持的全部算法矩阵:文本检测(7 种)、文本识别(18 种)、文本超分辨率(2 种)、公式识别(2 种)、端到端 OCR(1 种)、表格识别与关键信息抽取(5 种 KIE 模型),并给出了它们在 ICDAR2015、Total-text、CTW1500、DTRB 评测集、TextZoom、CROHME、PubTabNet、wildreceipt、XFUND_zh 等公开数据集上的复现指标。所有指标、配置文件与教程均可直接对应到仓库源码与配置(如 configs/det、configs/rec、configs/table、configs/kie),开发者既可按表选型,也可循模块化架构快速接入新算法,将 PaddleOCR 的算法能力平滑地集成到自己的文档智能处理流程中。
【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100+ languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考