☰
PaddleOCR 关键信息抽取算法 VI-LayoutXLM:原理、配置与 SER/RE 全流程实战指南
2026/10/18 7:43:46 网站建设 项目流程

PaddleOCR 关键信息抽取算法 VI-LayoutXLM:原理、配置与 SER/RE 全流程实战指南

【免费下载链接】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 中的VI-LayoutXLM 关键信息抽取算法(视觉无关版 LayoutXLM),系统讲解其在语义实体识别(SER)与关系抽取(RE)两大任务上的模型原理、数据集准备、配置详解、训练/评估/预测以及 inference 模型导出与推理部署的完整链路。读完本文,你将能够基于configs/kie/vi_layoutxlm/下的配置文件,在 XFUND_zh 等数据集上独立完成 VI-LayoutXLM 从训练到 Python 推理部署的端到端实战,并理解其"去掉视觉骨干、精度无损、推理加速"的设计动机与底层实现。

1. 算法简介:从 LayoutXLM 到 VI-LayoutXLM

1.1 算法定位

VI-LayoutXLM(Visual-Independent LayoutXLM)是 PaddleOCR 中对LayoutXLM多模态文档理解模型的关键信息抽取改进。其核心思路是:在下游任务(SER/RE)的训练过程中,去除视觉骨干网络(visual backbone)模块,仅依赖文本与布局(bbox)两种模态完成文档关键信息抽取。由于视觉特征不再参与计算,模型在最终精度基本无损的前提下,推理速度进一步提升。

从源码结构看,该改进体现在 vqa_layoutlm.py 中LayoutXLMForSer与 vqa_layoutlm.py 中LayoutXLMForRe的实现:

if ( hasattr(self.model.layoutxlm, "use_visual_backbone") and self.model.layoutxlm.use_visual_backbone is False ): self.use_visual_backbone = False def forward(self, x): if self.use_visual_backbone is True: image = x[4] else: image = None

当检测到底层 PaddleNLP 预训练模型的use_visual_backbone为False时,image输入被置为None,网络跳过图像特征分支。而 VI-LayoutXLM 系列预训练模型(vi-layoutxlm-base-uncased)恰好以"无视觉骨干"的形式发布,从而在训练与推理中省去整个视觉特征提取的计算开销。

1.2 复现精度

在XFUND_zh数据集上,PaddleOCR 官方复现效果如下:

模型骨干网络任务配置文件hmean下载链接
VI-LayoutXLMVI-LayoutXLM-baseSERser_vi_layoutxlm_xfund_zh_udml.yml93.19%训练模型 / 推理模型
VI-LayoutXLMVI-LayoutXLM-baseREre_vi_layoutxlm_xfund_zh_udml.yml83.92%训练模型 / 推理模型

说明:上表两个配置均为U-DML 知识蒸馏训练配置(后缀udml),hmean 为该配置下的复现结果。此外,configs/kie/vi_layoutxlm/目录还提供对应的非蒸馏基础配置ser_vi_layoutxlm_xfund_zh.yml与re_vi_layoutxlm_xfund_zh.yml。

1.3 算法家族与技术背景

VI-LayoutXLM 属于 PaddleOCR 关键信息抽取(KIE)算法家族中的 LayoutXLM 系列。LayoutXLM(论文 arXiv:2104.08836)是面向**多语言视觉丰富文档理解(Visually-rich Document Understanding)**的多模态预训练模型,其前置工作包括 LayoutLM(arXiv:1912.13318)与 LayoutLMv2(arXiv:2012.14740)。该系列模型将文本(text)、布局(layout/bbox)与图像(image)三种模态统一建模,用于票据、证件、表格等场景的文档信息抽取。论文引用格式见本文最后一节。

2. 环境配置与项目克隆

训练与推理 VI-LayoutXLM 前,需要先完成 PaddleOCR 的运行环境准备与项目克隆:

  • 运行环境准备:请参考《运行环境准备》,安装 PaddlePaddle 与 PaddleOCR 依赖(PaddleOCR 的 KIE 模型通过 PaddleNLP 加载 LayoutXLM 预训练模型,需确保 PaddleNLP 正确安装)。
  • 项目克隆:请参考《项目克隆》获取仓库代码。

完成上述两步后,后续所有训练、评估、预测与导出命令均在该仓库根目录下执行。

3. 数据准备:从 XFUND 原始数据到 PaddleOCR 训练格式

VI-LayoutXLM 训练使用SimpleDataSet(文本文件存储的通用数据格式)。PaddleOCR 对代码进行了模块化,训练不同的 KIE 模型只需要更换配置文件即可,数据格式完全通用。完整的数据准备细节可参考关键信息抽取教程。

3.1 数据集目录组织

训练数据默认存放在train_data目录。若本地已有数据集,可创建软链接:

# linux and mac os ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/dataset # windows mklink /d <path/to/paddle_ocr>/train_data/dataset <path/to/dataset>

最终数据集推荐结构如下:

|-train_data |-data_name |- train.json |- train |- zh_train_0.png |- zh_train_1.jpg | ... |- val.json |- val |- zh_val_0.png |- zh_val_1.jpg | ...

3.2 标注文件格式

训练集与验证集各用一个文本文件记录"图片路径 + 标注信息",二者用\t分割(不可使用其他分隔符,否则训练报错),标注信息为 JSON 字符串:

"图像文件名\t图像标注信息" zh_train_0.jpg [{"transcription": "汇丰晋信", "label": "other", "points": [[104, 114], [530, 114], [530, 175], [104, 175]], "id": 1, "linking": []}, {"transcription": "受理时间:", "label": "question", "points": [[126, 267], [266, 267], [266, 305], [126, 305]], "id": 7, "linking": [[7, 13]]}, {"transcription": "2020.6.15", "label": "answer", "points": [[321, 239], [537, 239], [537, 285], [321, 285]], "id": 13, "linking": [[7, 13]]}]

每个元素(字典)字段含义如下:

字段含义
transcription文本行的文字内容
label该文本行所属的类别(SER 标签)
points文本行的四点(左上、右上、右下、左下)坐标
id文本行 id,用于 RE 任务的实体配对
linking文本行之间的连接信息(实体关系对),用于 RE 任务

3.3 字典文件

所有标签的类别列表存放在字典文件中(如class_list.txt),每行一个类别。以 XFUND_zh 为例共 4 类:

OTHER QUESTION ANSWER HEADER

注意两点:

  • 类别信息不区分大小写,HEADER与header会被解析为同一类别 id,因此不能用仅大小写不同的字符串表示不同类别;
  • 建议将other类别放在第一行,解析时other的类别 id 为 0,后续可视化时该类别不会被绘制。

3.4 公开数据下载与格式转换

没有本地数据时,可从 XFUND 或 FUNSD 官网下载原始数据,再用仓库内转换脚本生成 PaddleOCR 训练格式:

  • XFUND 转换脚本:trans_xfun_data.py
  • FUNSD 转换脚本:ppstructure/kie/tools/trans_funsd_label.py

以 XFUND 为例,转换脚本会将原始 json 中的box转为四点points,并保留id、linking字段,输出"图片路径\t标注json"格式:

python3 ppstructure/kie/tools/trans_xfun_data.py \ --ori_gt_path <XFUND原始gt.json> \ --output_path train_data/XFUND/zh_train/train.json

更多公开数据集说明见关键信息抽取数据集文档。如需人工标注,可使用 PPOCRLabel。

3.5 快速下载已处理好的 XFUND_zh 数据集

mkdir train_data cd train_data wget https://paddleocr.bj.bcebos.com/ppstructure/dataset/XFUND.tar && tar -xf XFUND.tar cd ..

4. 模型训练

4.1 下载预训练模型(可选)

如果只想体验评估、预测、动转静、推理流程,可跳过数据训练,直接下载基于 XFUND 的 SER 与 RE 预训练模型:

mkdir pretrained_model cd pretrained_model # 下载并解压SER预训练模型 wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_pretrained.tar && tar -xf ser_vi_layoutxlm_xfund_pretrained.tar # 下载并解压RE预训练模型 wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_pretrained.tar && tar -xf re_vi_layoutxlm_xfund_pretrained.tar

4.2 启动训练

  • 若安装的是 CPU 版本 PaddlePaddle,请将配置文件中的use_gpu改为False;
  • PaddleOCR 训练时会自动下载 VI-LayoutXLM 预训练模型(基于 PaddleNLP 加载vi-layoutxlm-base-uncased),无需预先手动下载;
  • 训练日志会自动保存到配置文件中Global.save_model_dir目录下的train.log。
# SER 单卡训练 python3 tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml # SER 多卡训练,通过--gpus参数指定卡号 python3 -m paddle.distributed.launch --gpus '0,1,2,3' tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml # RE 任务单卡训练 python3 tools/train.py -c configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh.yml

以 SER 为例,正常启动训练后日志如下:

[2022/08/08 16:28:28] ppocr INFO: epoch: [1/200], global_step: 10, lr: 0.000006, loss: 1.871535, avg_reader_cost: 0.28200 s, avg_batch_cost: 0.82318 s, avg_samples: 8.0, ips: 9.71838 samples/s, eta: 0:51:59 [2022/08/08 16:28:33] ppocr INFO: epoch: [1/200], global_step: 19, lr: 0.000018, loss: 1.461939, avg_reader_cost: 0.00042 s, avg_batch_cost: 0.32037 s, avg_samples: 6.9, ips: 21.53773 samples/s, eta: 0:37:55 [2022/08/08 16:28:39] ppocr INFO: cur metric, precision: 0.11526348939743859, recall: 0.19776657060518732, hmean: 0.14564265817747712, fps: 34.008392345050055 [2022/08/08 16:28:45] ppocr INFO: save best model is to ./output/ser_vi_layoutxlm_xfund_zh/best_accuracy

日志字段含义:

字段含义
epoch当前迭代轮次
iter当前迭代次数
lr当前学习率
loss当前损失函数值
reader_cost当前 batch 数据处理耗时
batch_cost当前 batch 总耗时
samples当前 batch 内的样本数
ips每秒处理图片的数量

PaddleOCR 支持训练与评估交替进行,可在配置文件中修改eval_batch_step设置评估频率(ser_vi_layoutxlm_xfund_zh.yml默认每 19 个 iter 评估一次)。评估过程中默认将最佳 hmean 模型保存为output/ser_vi_layoutxlm_xfund_zh/best_accuracy/。若验证集很大,建议减少评估次数或训练完再评估。

4.3 自定义数据集的配置修改

训练自己的数据集时,需要修改配置文件中的数据配置、字典文件与类别数。以configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml为例,核心修改点如下:

Architecture: Backbone: name: LayoutXLMForSer pretrained: True mode: vi # 采用BIO标注时:字典含n个字段(含other)则类别数为2n-1;不含other则为2n+1。 # 否则训练会报 IndexError: (OutOfRange) label value should less than the shape of axis dimension num_classes: &num_classes 7 PostProcess: name: VQASerTokenLayoutLMPostProcess # 修改为自定义数据集的字典路径 class_path: &class_path train_data/XFUND/class_list_xfun.txt Train: dataset: name: SimpleDataSet data_dir: train_data/XFUND/zh_train/image # 修改为训练数据目录 label_file_list: - train_data/XFUND/zh_train/train.json # 修改为训练标签文件 loader: batch_size_per_card: 8 # 训练单卡 batch_size Eval: dataset: name: SimpleDataSet data_dir: train_data/XFUND/zh_val/image # 修改为验证数据目录 label_file_list: - train_data/XFUND/zh_val/val.json # 修改为验证标签文件 loader: batch_size_per_card: 8 # 验证单卡 batch_size

注意:预测/评估时的配置文件务必与训练保持一致。

4.4 断点训练

训练中断后,可通过Architecture.Backbone.checkpoints指定已保存的模型路径恢复训练:

python3 tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./output/ser_vi_layoutxlm_xfund_zh/best_accuracy

重要注意事项:

  • Architecture.Backbone.checkpoints的优先级高于Architecture.Backbone.pretrained。加载之前训练好的模型做微调/恢复训练/评估时,必须用checkpoints指定参数路径;若使用默认通用预训练模型从头训练,则pretrained设为True且checkpoints设为空(null);
  • LayoutXLM 系列模型均调用 PaddleNLP 中的预训练模型,模型加载与保存逻辑与 PaddleNLP 一致,因此无需指定Global.pretrained_model或Global.checkpoints;
  • LayoutXLM 系列模型的蒸馏训练目前不支持断点训练。

4.5 分布式训练

多机多卡训练时,通过--ips指定机器 IP、--gpus指定 GPU ID:

python3 -m paddle.distributed.launch --ips="xx.xx.xx.xx,xx.xx.xx.xx" --gpus '0,1,2,3' \ tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml

注意:(1)需将ips替换为实际机器地址,机器之间需能相互 ping 通(可用ifconfig查看 IP);(2)需在多台机器上分别启动命令;(3)更多分布式训练性能说明参考分布式训练教程。

4.6 基于 U-DML 的知识蒸馏训练

PaddleOCR 支持基于 U-DML 知识蒸馏的 KIE 模型训练,配置文件为 ser_vi_layoutxlm_xfund_zh_udml.yml 与 re_vi_layoutxlm_xfund_zh_udml.yml,训练命令:

python3 tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh_udml.yml

蒸馏配置文件采用DistillationModel结构,同时定义Teacher与Student两个LayoutXLMForSer子模型,并通过CombinedLoss组合多路蒸馏损失:

Architecture: name: DistillationModel algorithm: Distillation Models: Teacher: Backbone: name: LayoutXLMForSer pretrained: True mode: vi num_classes: &num_classes 7 Student: Backbone: name: LayoutXLMForSer pretrained: True mode: vi num_classes: *num_classes Loss: name: CombinedLoss loss_config_list: - DistillationVQASerTokenLayoutLMLoss: weight: 1.0 model_name_list: ["Student", "Teacher"] key: backbone_out num_classes: *num_classes - DistillationSERDMLLoss: weight: 1.0 act: "softmax" use_log: true model_name_pairs: - ["Student", "Teacher"] key: backbone_out - DistillationVQADistanceLoss: weight: 0.5 mode: "l2" model_name_pairs: - ["Student", "Teacher"] key: hidden_states_5 - DistillationVQADistanceLoss: weight: 0.5 mode: "l2" model_name_pairs: - ["Student", "Teacher"] key: hidden_states_8

该配置同时使用标签损失、SER-DML 损失以及中间层(hidden_states_5、hidden_states_8)的 L2 距离损失来约束学生模型逼近教师模型。更多知识蒸馏说明参考知识蒸馏文档。

注意:LayoutXLM 系列 KIE 模型与 PaddleNLP 的保存/加载逻辑保持一致,蒸馏过程中仅保存学生模型参数。若用保存的模型进行评估,需要使用学生模型对应的配置(蒸馏配置对应的学生模型为 ser_vi_layoutxlm_xfund_zh.yml)。

4.7 其他训练环境

  • Windows GPU/CPU:仅支持单卡训练与预测,指定 GPU 用set CUDA_VISIBLE_DEVICES=0;DataLoader 仅支持单进程,需将num_workers设为 0;
  • macOS:不支持 GPU,需在配置文件中设置use_gpu: False,其余命令与 Linux 相同;
  • Linux DCU:需设置环境变量export HIP_VISIBLE_DEVICES=0,1,2,3,其余命令与 Linux GPU 相同。

5. 模型评估与测试

5.1 指标评估

训练中模型参数默认保存在Global.save_model_dir目录下。评估时需用Architecture.Backbone.checkpoints指向保存的参数文件,评估数据集通过配置文件中 Eval 段的data_dir/label_file_list设置:

python3 tools/eval.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./output/ser_vi_layoutxlm_xfund_zh/best_accuracy

输出结果包含 precision、recall、hmean 等指标:

[2022/08/09 07:59:28] ppocr INFO: metric eval *************** [2022/08/09 07:59:28] ppocr INFO: precision:0.697476609016161 [2022/08/09 07:59:28] ppocr INFO: recall:0.8861671469740634 [2022/08/09 07:59:28] ppocr INFO: hmean:0.7805806758686339 [2022/08/09 07:59:28] ppocr INFO: fps:17.367364606899105

5.2 训练产出的模型文件

根据配置中的save_model_dir与save_epoch_step,训练会保存以下文件:

output/ser_vi_layoutxlm_xfund_zh/ ├── best_accuracy │ ├── metric.states │ ├── model_config.json │ ├── model_state.pdparams ├── best_accuracy.pdopt ├── config.yml ├── train.log ├── latest │ ├── metric.states │ ├── model_config.json │ ├── model_state.pdparams ├── latest.pdopt

其中best_accuracy.*是评估集上的最优模型,latest.*是最新保存的模型。

5.3 使用 OCR 引擎快速预测

默认预测会加载 PP-OCRv3 检测/识别模型对图片做 OCR,然后进行信息抽取:

python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./output/ser_vi_layoutxlm_xfund_zh/best_accuracy \ Global.infer_img=./ppstructure/docs/kie/input/zh_val_42.jpg

预测图片会保存在Global.save_res_path指定路径中。若希望使用预先获取的(或标注的)OCR 结果而非在线运行 OCR 引擎,可指定Global.infer_img为标注文件(内含图片路径与 OCR 信息),并设置Global.infer_mode=False:

python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./output/ser_vi_layoutxlm_xfund_zh/best_accuracy \ Global.infer_img=./train_data/XFUND/zh_val/val.json Global.infer_mode=False

使用标注 OCR 结果时部分检测框信息更准确,但整体信息抽取结果基本一致。

5.4 RE 任务的预测

RE 预测需要先得到 SER 结果,因此要同时加载 SER 与 RE 的配置和权重:

python3 ./tools/infer_kie_token_ser_re.py \ -c configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./pretrain_models/re_vi_layoutxlm_udml_xfund_zh/best_accuracy/ \ Global.infer_img=./train_data/XFUND/zh_val/image/ \ -c_ser configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o_ser Architecture.Backbone.checkpoints=pretrain_models/ser_vi_layoutxlm_udml_xfund_zh/best_accuracy/

其中-c_ser指定 SER 配置文件,-o_ser后接待修改的 SER 模型参数(如预训练权重)。同理,RE 也可通过Global.infer_mode=False+ 标注文件方式使用预先获取的 OCR 结果,直接使用标注 OCR 结果的 RE 预测通常更准确。

6. 配置文件深度解析

6.1 SER 配置 ser_vi_layoutxlm_xfund_zh.yml

配置段关键字段说明
Globalepoch_num: 200总训练轮数
Globaleval_batch_step: [0, 19]从第 0 个 iter 起,每 19 个 iter 评估一次
Globalsave_model_dir: ./output/ser_vi_layoutxlm_xfund_zh模型保存目录
Globalinfer_img: ppstructure/docs/kie/input/zh_val_42.jpg默认推理图片
Globald2s_train_image_shape: [3, 224, 224]训练图像输入尺寸
Globalamp_custom_white_list: ['scale', 'concat', 'elementwise_add']AMP 混合精度自定义白名单算子
Architecture.Backbonename: LayoutXLMForSerSER 骨干网络(PaddleNLP 实现)
Architecture.Backbonemode: vi使用 VI-LayoutXLM(visual-independent)预训练权重,可选base或vi
Architecture.Backbonenum_classes: 7BIO 标注下的类别数(4 类含 other 时为 2×4−1=7)
Lossname: VQASerTokenLayoutLMLossSER token 级分类损失
Optimizername: AdamW, lr: 0.00005, warmup_epoch: 2优化器与学习率策略
PostProcessname: VQASerTokenLayoutLMPostProcessSER 后处理
PostProcessclass_path: train_data/XFUND/class_list_xfun.txt类别字典路径
Metricname: VQASerTokenMetric, main_indicator: hmean评估指标
Train/Evalbatch_size_per_card: 8、num_workers: 4批大小与数据加载线程数

训练与评估的transforms流水线(SER)为:

transforms: - DecodeImage: # 读取图像,RGB、channel_first=False img_mode: RGB channel_first: False - VQATokenLabelEncode: # 将 OCR 文本/bbox/标签编码为 token 输入 contains_re: False # 非 RE 任务 algorithm: "LayoutXLM" class_path: train_data/XFUND/class_list_xfun.txt use_textline_bbox_info: True order_method: "tb-yx" # 文本行排序方式,可选 None 或 "tb-yx" - VQATokenPad: # token padding 到 max_seq_len max_seq_len: 512 return_attention_mask: True - VQASerTokenChunk: # 超长序列分块 max_seq_len: 512 - Resize: size: [224, 224] - NormalizeImage: # ImageNet 归一化参数 scale: 1 mean: [123.675, 116.28, 103.53] std: [58.395, 57.12, 57.375] order: 'hwc' - ToCHWImage: - KeepKeys: keep_keys: ['input_ids', 'bbox', 'attention_mask', 'token_type_ids', 'image', 'labels']

其中order_method: "tb-yx"表示按"从上到下、从右到左"(top-bottom, y-x)的规则对文本行排序,用于将 2D 版面文本序列化为 token 序列。

6.2 RE 配置 re_vi_layoutxlm_xfund_zh.yml

配置段关键字段说明
Globalepoch_num: 130总训练轮数
Globalsave_model_dir: ./output/re_vi_layoutxlm_xfund_zh模型保存目录
Architecture.Backbonename: LayoutXLMForReRE 骨干网络
Lossname: LossFromOutput, key: loss, reduction: mean直接取模型输出 loss
Optimizerclip_norm: 10、warmup_epoch: 10梯度裁剪范数与 warmup
PostProcessname: VQAReTokenLayoutLMPostProcessRE 后处理(解析实体关系对)
Metricname: VQAReTokenMetric, main_indicator: hmean评估指标
Train loaderbatch_size_per_card: 2RE 任务显存占用较大,批大小更小

RE 任务的 transforms 在 SER 基础上额外加入关系标注处理算子:

transforms: - VQATokenLabelEncode: contains_re: True # 开启 RE 标签编码 ... - VQAReTokenRelation: # 构建实体-关系张量 - VQAReTokenChunk: max_seq_len: 512 - TensorizeEntitiesRelations: # 实体/关系张量化 - KeepKeys: keep_keys: ['input_ids', 'bbox', 'attention_mask', 'token_type_ids', 'entities', 'relations']

6.3 蒸馏配置与基础配置的关系

*_udml.yml为知识蒸馏配置(Architecture.name: DistillationModel,含 Teacher/Student 双模型与多路损失),基础配置为单模型直接训练。两者共享相同的数据路径、transforms 与num_classes设置;蒸馏配置的训练批大小(batch_size_per_card: 4)因同时前向 Teacher 与 Student 而更小。SER 与 RE 的完整配置均位于 configs/kie/vi_layoutxlm/。

7. 模型导出与 Python 推理部署

7.1 inference 模型与 checkpoints 模型的区别

inference 模型(paddle.jit.save保存)是模型结构与参数一并固化的模型,多用于预测部署场景,推理性能优越、便于系统集成;checkpoints 模型只保存参数,多用于恢复训练。因此部署前需要将训练产出的 checkpoints 导出为 inference 模型。

7.2 SER 模型导出与推理

# -c 训练算法yml配置文件;-o 可选参数 # Architecture.Backbone.checkpoints 设置待转换的训练模型地址 # Global.save_inference_dir 设置转换后模型的保存地址 python3 tools/export_model.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./output/ser_vi_layoutxlm_xfund_zh/best_accuracy \ Global.save_inference_dir=./inference/ser_vi_layoutxlm

转换成功后生成三个文件:

inference/ser_vi_layoutxlm/ ├── inference.pdiparams # inference模型的参数文件 ├── inference.pdiparams.info # inference模型的参数信息,可忽略 └── inference.pdmodel # inference模型的模型结构文件

也可以直接下载官方已提供的推理模型(ser_vi_layoutxlm_xfund_infer.tar)。以在 XFUND_zh 上训练的模型为例,也可以这样转换:

wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_pretrained.tar tar -xf ser_vi_layoutxlm_xfund_pretrained.tar python3 tools/export_model.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./ser_vi_layoutxlm_xfund_pretrained/best_accuracy \ Global.save_inference_dir=./inference/ser_vi_layoutxlm_infer

VI-LayoutXLM 基于 SER 任务进行推理:

cd ppstructure python3 kie/predict_kie_token_ser.py \ --kie_algorithm=LayoutXLM \ --ser_model_dir=../inference/ser_vi_layoutxlm_infer \ --image_dir=./docs/kie/input/zh_val_42.jpg \ --ser_dict_path=../train_data/XFUND/class_list_xfun.txt \ --vis_font_path=../doc/fonts/simfang.ttf \ --ocr_order_method="tb-yx"

SER 可视化结果默认保存到./output文件夹中,效果示例如下:

从推理脚本 predict_kie_token_ser.py 的源码可以看到 SER 推理的完整流程:SerPredictor内部通过PaddleOCR(use_angle_cls=args.use_angle_cls, det_model_dir=args.det_model_dir, rec_model_dir=args.rec_model_dir, ...)实例化 OCR 引擎,对输入图片做文本检测与识别;随后执行与训练一致的预处理算子链(VQATokenLabelEncode→VQATokenPad→VQASerTokenChunk→Resize→NormalizeImage→ToCHWImage→KeepKeys),将 OCR 结果编码为input_ids、bbox、attention_mask、token_type_ids、image等输入;推理后经VQASerTokenLayoutLMPostProcess后处理得到每个 token 的类别,最终调用draw_ser_results绘制可视化结果,同时把结构化结果写入output/infer.txt。

7.3 RE 模型导出与推理

python3 tools/export_model.py -c configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./output/re_vi_layoutxlm_xfund_zh/best_accuracy \ Global.save_inference_dir=./inference/re_vi_layoutxlm

转换成功后同样生成inference.pdiparams、inference.pdiparams.info、inference.pdmodel三个文件。也可直接下载官方推理模型re_vi_layoutxlm_xfund_infer.tar并转换:

wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_pretrained.tar tar -xf re_vi_layoutxlm_xfund_pretrained.tar python3 tools/export_model.py -c configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh.yml \ -o Architecture.Backbone.checkpoints=./re_vi_layoutxlm_xfund_pretrained/best_accuracy \ Global.save_inference_dir=./inference/re_vi_layoutxlm_infer

RE 推理需要同时加载 SER 与 RE 两个模型,且需显式关闭视觉骨干(--use_visual_backbone=False,即 VI 特性):

cd ppstructure python3 kie/predict_kie_token_ser_re.py \ --kie_algorithm=LayoutXLM \ --re_model_dir=../inference/re_vi_layoutxlm_infer \ --ser_model_dir=../inference/ser_vi_layoutxlm_infer \ --use_visual_backbone=False \ --image_dir=./docs/kie/input/zh_val_42.jpg \ --ser_dict_path=../train_data/XFUND/class_list_xfun.txt \ --vis_font_path=../doc/fonts/simfang.ttf \ --ocr_order_method="tb-yx"

RE 可视化结果默认保存到./output文件夹中,效果示例如下:

从推理脚本 predict_kie_token_ser_re.py 源码可以看到 RE 的级联流程:SerRePredictor内部复用SerPredictor先得到 SER 结果与中间输入,通过make_input构造 RE 模型输入;当use_visual_backbone=False时移除图像输入项(re_input.pop(4)),随后执行 RE 推理并经VQAReTokenLayoutLMPostProcess后处理得到实体关系对,最后用draw_re_results绘制可视化并保存。该脚本同样支持仅加载 SER 模型(--re_model_dir为空时退化为 SER 预测)。

7.4 其他部署方式

  • C++ 推理部署:暂不支持;
  • Serving 服务化部署:暂不支持;
  • 更多推理部署:暂不支持。

8. FAQ

Q1:训练模型转 inference 模型之后预测效果不一致?

A:该问题多为 trained model 预测时的预处理、后处理参数与 inference model 预测时的预处理、后处理参数不一致所致。可以对比训练使用的配置文件中的预处理、后处理与预测时的设置是否存在差异,确保两者一致。

9. 引用

VI-LayoutXLM 及所在算法家族的相关论文引用如下:

@article{DBLP:journals/corr/abs-2104-08836, author = {Yiheng Xu and Tengchao Lv and Lei Cui and Guoxin Wang and Yijuan Lu and Dinei Flor{\^e}ncio and Cha Zhang and Furu Wei}, title = {LayoutXLM: Multimodal Pre-training for Multilingual Visually-rich Document Understanding}, journal = {CoRR}, volume = {abs/2104.08836}, year = {2021}, url = {https://arxiv.org/abs/2104.08836} } @article{DBLP:journals/corr/abs-1912-13318, author = {Yiheng Xu and Minghao Li and Lei Cui and Shaohan Huang and Furu Wei and Ming Zhou}, title = {LayoutLM: Pre-training of Text and Layout for Document Image Understanding}, journal = {CoRR}, volume = {abs/1912.13318}, year = {2019}, url = {http://arxiv.org/abs/1912.13318} } @article{DBLP:journals/corr/abs-2012-14740, author = {Yang Xu and Yiheng Xu and Tengchao Lv and Lei Cui and Furu Wei and Guoxin Wang and Yijuan Lu and Dinei A. F. Flor{\^e}ncio and Cha Zhang and Wanxiang Che and Min Zhang and Lidong Zhou}, title = {LayoutLMv2: Multi-modal Pre-training for Visually-Rich Document Understanding}, journal = {CoRR}, volume = {abs/2012.14740}, year = {2020}, url = {https://arxiv.org/abs/2012.14740} }

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询