十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PaddleOCR 关键信息抽取(KIE)全流程实战:基于 VI-LayoutXLM 的 SER 与 RE 模型训练、评估与推理指南

PaddleOCR 关键信息抽取(KIE)全流程实战:基于 VI-LayoutXLM 的 SER 与 RE 模型训练、评估与推理指南 PaddleOCR 关键信息抽取KIE全流程实战基于 VI-LayoutXLM 的 SER 与 RE 模型训练、评估与推理指南【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR关键信息抽取Key Information ExtractionKIE是文档智能化的核心技术之一旨在从票据、证件、合同等富文本图像中自动抽取「问题-答案」语义实体及其关联关系。本文以 PaddleOCR 仓库中 docs/version2.x/ppocr/model_train/kie.en.md 为主线系统讲解基于 VI-LayoutXLM 多模态预训练模型完成语义实体识别SER与关系抽取RE任务的完整链路从数据准备、配置文件解读、单卡/多卡训练、知识蒸馏到评估、预测、推理模型导出与部署推理。读完本文你将掌握一套可直接落地的 KIE 建模与上线方案并理解 PaddleOCR 中 KIE 数据流与模型结构的源码级实现。1. KIE 任务概述与 VI-LayoutXLM 模型在 PaddleOCR 中KIE 被拆解为两个相互衔接的经典任务SERSemantic Entity Recognition语义实体识别为文档图像中的每个文本行token预测语义类别如QUESTION问题、ANSWER答案、HEADER页眉等。它类似于序列标注问题。RERelation Extraction关系抽取在 SER 标注结果的基础上进一步判断「问题-答案」文本行之间是否存在关联关系linking从而把散落的实体组织成结构化键值对。本文以VI-LayoutXLM多模态预训练模型为例展开。VI-LayoutXLM 是 LayoutXLM 的轻量化多语言变体同时融合了文本语义、版面坐标bbox与视觉特征三类信息非常适合票据、证照等版式复杂场景。从源码结构看PaddleOCR 在 ppocr/modeling/backbones/vqa_layoutlm.py 中定义了LayoutXLMForSer第 149 行与LayoutXLMForRe第 223 行两个网络入口分别对应 SER 与 RE 任务的LayoutXLMForTokenClassification与LayoutXLMForRelationExtraction头。SER 模型前向输入为input_ids / bbox / attention_mask / token_type_ids / image五元组RE 模型在此基础上额外接收entities与relations张量其中entities由 SER 预测结果过滤掉Oother类别后构建relations则穷举所有「QUESTION→ANSWER」实体对详见 tools/infer_kie_token_ser_re.py 中的make_input函数。如果你希望使用基于图神经网络的 SDMGR 算法而非 LayoutXLM 系列可参考 SDMGR 算法文档其配置入口位于 configs/kie/sdmgr/kie_unet_sdmgr.yml。2. 数据准备从原始标注到 PaddleOCR 训练集2.1 数据集存储约定PaddleOCR 训练 KIE 模型时默认数据路径为PaddleOCR/train_data。若数据已存在于磁盘其他位置只需创建软链接soft link指向数据集目录# 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训练过程通常包含训练集与评估集两部分二者的数据格式完全一致均通过SimpleDataset读取。2.2 自定义数据集标注格式通用数据格式PaddleOCR 采用「图像 文本标注文件」的通用数据格式。训练图像建议放入同一文件夹并在一个文本文件中逐行记录图像路径与标注信息图像路径与标注之间必须用\tTab分隔否则训练时会报错。标注文件内容示例如下 image path annotation information 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]]}] zh_train_1.jpg [{transcription: 中国人体器官捐献, label: other, points: [[544, 459], [954, 459], [954, 517], [544, 517]], id: 1, linking: []}, {transcription: 编号:MC545715483585, label: other, points: [[1462, 470], [2054, 470], [2054, 543], [1462, 543]], id: 10, linking: []}, {transcription: CHINAORGANDONATION, label: other, points: [[543, 516], [958, 516], [958, 551], [543, 551]], id: 14, linking: []}, {transcription: 中国人体器官捐献志愿登记表, label: header, points: [[635, 793], [1892, 793], [1892, 904], [635, 904]], id: 18, linking: []}] ...标注由json解析为一个子标注列表列表中每个元素是一个 dict包含该文本行的全部信息字段含义如下字段含义说明transcription文本行内容该行 OCR 识别出的文字label文本行类别语义类别如question/answer/header/otherpoints文本行四点坐标形如[[x1,y1],[x2,y1],[x2,y2],[x1,y2]]的四边形顶点id文本行 ID用于 RE 模型训练时的实体索引linking文本行间关联信息如[[7, 13]]表示 id7 与 id13 之间存在问答关系供 RE 训练使用评估集的构建方式与训练集完全相同。2.3 字典文件类别列表训练集与评估集中每个文本行的label字段对应的全部类别需汇总写入字典文件如class_list.txt每行一个类别名。以 FUND_zh 数据为例包含四个类别字典内容为OTHER QUESTION ANSWER HEADER标注文件中每条标注的label字段取值必须属于该字典。两条重要约定标注文件中的类别信息不区分大小写例如HEADER与header会被解析为同一个类别 ID。建议将other类别无需关注的文本行统一标注为other放在字典第一行解析时other的类别 ID 为 0预测为other的文本行后续不会参与可视化从而保证可视化结果干净聚焦。最终数据集应具有如下目录结构|-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 | ...2.4 下载公共数据集与格式转换如果本地没有数据可直接下载公共 KIE 数据集源文件再借助 PaddleOCR 提供的转换脚本将其转为上述格式XFUND多语言表单理解数据集使用 ppstructure/kie/tools/trans_xfun_data.py 转换。该脚本读取 XFUND 原始 JSON 中的documents字段将每个文档的box转换为四点points并保留text / label / id / linking信息最终逐行输出image_path \t json格式的标注文件对应源码中transfer_xfun_data函数。FUNSD英文表单理解数据集使用 ppstructure/kie/tools/trans_funsd_label.py 转换。更多公共 KIE 数据集的说明与下载方式可参考 KIE 数据集教程。此外PaddleOCR 支持使用 PPOCRLabel 工具进行 KIE 数据标注包括为文本行打语义类别标签、勾画文本行间的链接关系可直接用于生成上述格式的标注文件。3. 模型训练3.1 快速体验使用 XFUND 数据集与预训练模型PaddleOCR 提供了训练、评估与预测三套脚本。本节以 VI-LayoutXLM 模型为例展开讲解。如果不想从零标注数据可直接使用 PaddleOCR 已处理好的 XFUND_zh 数据集快速体验mkdir train_data cd train_data wget https://paddleocr.bj.bcebos.com/ppstructure/dataset/XFUND.tar tar -xf XFUND.tar cd ..如果暂时不打算训练只想直接体验评估、预测与推理流程可以下载 PaddleOCR 提供的训练模型并跳过本节训练步骤mkdir pretrained_model cd pretrained_model # download and uncompress SER model wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_pretrained.tar tar -xf ser_vi_layoutxlm_xfund_pretrained.tar # download and uncompress RE model wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_pretrained.tar tar -xf re_vi_layoutxlm_xfund_pretrained.tar启动训练前注意两点若你的 PaddlePaddle 为CPU 版本需要在配置文件中设置Global.use_gpuFalse训练时 PaddleOCR 会自动下载VI-LayoutXLM 预训练模型无需提前手动下载。3.2 启动训练单卡 / 多卡# GPU training, support single card and multi-cards # The training log will be save in {Global.save_model_dir}/train.log # train SER model using single card python3 tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml # train SER model using multi-cards, you can use --gpus to assign the GPU ids. python3 -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml # train RE model using single card 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 [2022/08/08 16:28:45] ppocr INFO: best metric, hmean: 0.14564265817747712, precision: 0.11526348939743859, recall: 0.19776657060518732, fps: 34.008392345050055, best_epoch: 1 [2022/08/08 16:28:51] ppocr INFO: save model in ./output/ser_vi_layoutxlm_xfund_zh/latest日志中各字段含义如下字段含义epoch当前迭代轮数global_step/iter当前全局迭代次数lr当前学习率loss当前损失函数值avg_reader_cost当前 batch 数据读取耗时avg_batch_cost当前 batch 总耗时avg_samples当前 batch 样本数ips每秒处理的样本数PaddleOCR 支持训练中评估修改配置文件 configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml 中的eval_batch_step默认[0, 19]即第 0 次迭代后每 19 次迭代评估一次hmean 最优的模型会保存为output/ser_vi_layoutxlm_xfund_zh/best_accuracy/。如果评估集很大建议适当拉大评估间隔或训练结束后再单独评估。更多 KIE 模型训练方式与配置文件可进入configs/kie/目录查看vi_layoutxlm/下含 SER/RE 及其蒸馏配置layoutlm_series/下含 LayoutLM / LayoutLMv2 / LayoutXLM 系列配置也可参考前沿 KIE 算法概览。3.3 配置文件深度解读与自定义数据集适配训练自定义数据集时需要修改配置中的数据路径、字典文件与类别数。以 configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml 为例需要修改的关键部分如下Architecture: # ... Backbone: name: LayoutXLMForSer pretrained: True mode: vi # 假设字典文件中包含 n 个类别含 other则 num_classes 设置为 2n-1 num_classes: num_classes 7 PostProcess: name: kieSerTokenLayoutLMPostProcess # 修改为自定义数据集的字典文件路径 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 batch_size_per_card: 8 ... 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 batch_size_per_card: 8注意预测 / 评估使用的配置文件必须与训练文件保持一致。结合仓库中的实际配置文件可进一步理解如下实现细节均以 ser_vi_layoutxlm_xfund_zh.yml 为准num_classes 2n - 1VI-LayoutXLM 的 SER 头采用 BIO 标注方案n为字典中的类别数含other每个非 other 类别对应B-与I-两个标签再加上Oother因此类别总数为2n - 1。例如 XFUND 的class_list_xfun.txt含 4 类故num_classes为 7。若使用mode: base则会加载基础版 LayoutXLM 权重mode: vi则加载 VI-LayoutXLM 多语言权重。数据增强管线transforms训练与评估共用同一套算子依次为DecodeImageRGB 解码→VQATokenLabelEncode将文本行与标签编码为 token 序列contains_re: False表示不包含关系标注order_method: tb-yx表示按「自上而下、自左而右」的版面顺序对 token 排序→VQATokenPadpadding 至max_seq_len: 512同时返回 attention mask→VQASerTokenChunk按最大序列长度切块→Resize图像缩放到 224×224→NormalizeImage/ToCHWImage/KeepKeys。KeepKeys决定了数据加载器按input_ids / bbox / attention_mask / token_type_ids / image / labels的顺序返回张量这与 vqa_layoutlm.py 中LayoutXLMForSer.forward的输入顺序严格对应。损失与优化器SER 使用VQASerTokenLayoutLMLoss交叉熵RE 使用LossFromOutput两者优化器均为AdamW学习率0.00005、warmup 若干 epoch、L2 正则因子为0.00000。RE 配置 re_vi_layoutxlm_xfund_zh.yml 额外增加clip_norm: 10梯度裁剪并在 transforms 中加入VQAReTokenRelation基于标注中的linking构建实体关系矩阵与TensorizeEntitiesRelationskeep_keys相应变为entities / relations。推理时接入 OCR预测阶段Global.infer_img指定输入图像tools/infer_kie_token_ser.py 中的SerPredictor会内部实例化PaddleOCR引擎默认加载 PP-OCRv3 检测与识别模型也可通过Global.kie_det_model_dir/Global.kie_rec_model_dir指定完成 OCR 后送入 KIE 模型。3.4 断点续训Resume Training若训练中断可通过指定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。微调finetune、断点续训与评估都需要设置checkpoints若希望使用 NLP 预训练模型从头训练则应设置Architecture.Backbone.pretrainedTrue且Architecture.Backbone.checkpointsnull。LayoutXLM 系列模型复用 PaddleNLP 的加载/保存逻辑因此无需设置Global.pretrained_model或Global.checkpoints。若使用知识蒸馏训练 LayoutXLM 系列模型当前不支持断点续训。3.5 混合精度训练混合精度AMP训练正在持续完善中原文档标注 coming soon!仓库中 ser_vi_layoutxlm_xfund_zh.yml 已在Global中预留amp_custom_white_list: [scale, concat, elementwise_add]白名单配置用于混合精度策略的算子白名单控制具体以仓库后续版本为准。3.6 分布式训练多机多卡多机多卡训练时使用--ips指定参与训练的机器 IP--gpus指定使用的 GPU IDpython3 -m paddle.distributed.launch --ipsxx.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 通(2) 需要在每台机器上分别启动训练(3) 查看本机 IP 可使用ifconfig命令(4) 关于分布式训练加速比的更多细节可参考 分布式训练教程。3.7 知识蒸馏训练UDMLPaddleOCR 支持在 KIE 训练中使用知识蒸馏配置入口为 configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh_udml.yml原理详见知识蒸馏文档。从蒸馏配置可以看出其训练范式Architecture.name设为DistillationModel同时定义Teacher与Student两个分支均为LayoutXLMForSermode: vi损失使用CombinedLoss组合多项包括DistillationVQASerTokenLayoutLMLoss权重 1.0教师与学生分支的 SER 标注损失DistillationSERDMLLoss权重 1.0教师与学生输出分布之间的 DML 蒸馏损失act: softmax、use_log: true两个DistillationVQADistanceLoss权重 0.5对第 5 层与第 8 层hidden_states施加 L2 距离约束实现特征级对齐。后处理与评估分别使用DistillationSerPostProcess与DistillationMetric基于VQASerTokenMetricmain_indicator: hmean以 Student 分支为准。注意LayoutXLM 系列 KIE 模型的保存与加载逻辑与 PaddleNLP 一致蒸馏过程中只保存学生模型的参数。若要用保存的模型进行评估需要使用学生模型对应的配置即 configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml。3.8 其他平台训练Windows / macOS / Linux DCUWindows GPU/CPUWindows 平台与 Linux 略有不同仅支持单 GPU训练与推理需通过set CUDA_VISIBLE_DEVICES0指定 GPU同时 Windows 上 DataLoader 仅支持单进程模式需要将num_workers设为 0。macOS不支持 GPU 模式需在配置文件中将use_gpu设为 False其余训练/评估/预测命令与 Linux GPU 完全相同。Linux DCU在 DCU 设备上运行需设置环境变量export HIP_VISIBLE_DEVICES0,1,2,3其余训练与评估预测命令与 Linux GPU 完全相同。4. 评估与测试4.1 模型评估Evaluation训练好的模型保存在Global.save_model_dir目录。评估时需要将Architecture.Backbone.checkpoints指向模型目录评估数据集可通过修改 configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml 中的Eval.dataset.label_file_list字段来指定# GPU evaluation, Global.checkpoints is the weight to be tested 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其中hmean为 precision 与 recall 的调和平均值是 KIE 模型的主指标对应配置中Metric.main_indicator: hmean。4.2 模型测试 / 预测SER 任务使用 PaddleOCR 训练出的模型可通过以下脚本快速获得预测结果。默认预测图像由Global.infer_img指定训练模型权重通过-o Global.checkpoints指定注意此处为Global.checkpoints实际运行命令中为Architecture.Backbone.checkpoints。根据配置文件中的Global.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.*是最后一个 epoch 的模型。预测所用配置文件必须与训练文件一致。若使用python3 tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml完成训练可用如下命令预测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指定的目录默认./output/ser/xfund_zh/res。使用预标注 OCR 结果预测关闭内置 OCR 引擎预测过程中默认会加载 PP-OCRv3 检测与识别模型来执行 OCR 信息抽取。如果希望直接使用预先得到的 OCR 结果可将Global.infer_img指定为标注文件其中包含图像路径与 OCR 信息并设置Global.infer_modeFalse表示此时不使用 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./train_data/XFUND/zh_val/val.json Global.infer_modeFalse从 tools/infer_kie_token_ser.py 的实现可以看到该机制SerPredictor.__init__中判断Global.infer_mode为False时读取标注文件逐行解析以\t切分得到图像路径与标注否则走get_image_file_list遍历图像目录可视化通过draw_ser_results完成并写出*_ser.jpg结果图。对比两种预测方式可以发现使用标注 OCR 结果时部分检测信息更准确但整体信息抽取结果基本一致。4.3 模型测试 / 预测RE 任务SER RE 串联RE 模型预测需要先给出 SER 模型结果因此需要同时加载 SER 的配置文件与模型权重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.checkpointspretrain_models/ \ ser_vi_layoutxlm_udml_xfund_zh/best_accuracy/其中-c_ser表示 SER 配置文件-o_ser表示覆盖 SER 配置中相应内容的参数。同样支持使用预标注 OCR 结果预测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/val.json \ Global.infer_modeFalse \ -c_ser configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o_ser Architecture.Backbone.checkpointspretrain_models/ser_vi_layoutxlm_udml_xfund_zh/best_accuracy/从源码 tools/infer_kie_token_ser_re.py 可以看清 SER→RE 的串联机制ReArgsParser在标准参数基础上扩展了-c_ser与-o_ser两个参数SerRePredictor.__call__先调用self.ser_engine(data)得到 SER 预测结果再经make_input将 SER 结果中的实体过滤掉O标签与其穷举的「QUESTION→ANSWER」关系对构造成entities / relations张量作为 RE 模型的附加输入RE 的后处理VQAReTokenLayoutLMPostProcess会结合ser_results与实体索引字典输出最终的键值关系。实验表明直接使用标注 OCR 结果进行 RE 预测结果通常更准确。5. 模型推理部署级 Inference5.1 导出推理模型推理模型paddle.jit.save保存的模型是训练完成后固化的模型主要用于部署环境中的预测而训练过程中保存的是 checkpoints 模型仅保存模型参数主要用于断点续训。相比 checkpoints 模型推理模型额外保存了模型的结构信息模型结构与参数已固化在推理文件中因此更易于部署适合与实际系统集成。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_layoutxlmRE 模型导出命令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/ser_vi_layoutxlm/ ├── inference.pdiparams # The parameter file of recognition inference model ├── inference.pdiparams.info # The parameter information of recognition inference model, which can be ignored └── inference.pdmodel # The program file of recognition5.2 推理模型预测VI-LayoutXLM 模型基于 SER 任务进行推理可执行以下命令。SER 推理模型预测cd ppstructure python3 kie/predict_kie_token_ser.py \ --kie_algorithmLayoutXLM \ --ser_model_dir../inference/ser_vi_layoutxlm \ --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_methodtb-yxRE 推理模型预测SER 与 RE 推理模型串联cd ppstructure python3 kie/predict_kie_token_ser_re.py \ --kie_algorithmLayoutXLM \ --re_model_dir../inference/re_vi_layoutxlm \ --ser_model_dir../inference/ser_vi_layoutxlm \ --use_visual_backboneFalse \ --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_methodtb-yx可视化结果默认保存在./output目录。上述参数要点--kie_algorithmLayoutXLM指定 KIE 算法类型--ser_model_dir/--re_model_dirSER / RE 推理模型目录--ser_dict_pathSER 任务的类别字典文件--vis_font_path可视化所用的中文字体仓库内置字体位于 doc/fonts/simfang.ttf--ocr_order_methodtb-yxOCR 文本行排序方式top-bottom、left-right需与训练配置保持一致--use_visual_backboneFalse关闭 RE 模型的视觉骨干分支。结合 ppstructure/kie/predict_kie_token_ser_re.py 源码可见该开关会决定re_input是否弹出第 4 个张量图像特征从而跳过视觉分支以提升推理速度对应地vqa_layoutlm.py 中LayoutXLMForRe.forward也会根据use_visual_backbone调整entities / relations的索引位置。6. FAQ 与常见问题排查Q1训练模型转换为推理模型后预测效果不一致A此类问题绝大多数是由训练模型预测与推理模型预测时的预处理、后处理参数不一致引起的。建议逐一对比训练所用配置文件与推理阶段的预处理、后处理及预测参数是否存在差异重点检查transforms中的图像尺寸Resize、归一化均值/方差、order_method排序方式、class_path字典文件与max_seq_len等是否与训练保持一致。7. 结语本文围绕 PaddleOCR 的 KIE 全流程完整覆盖了数据准备通用标注格式、字典文件、XFUND/FUNSD 转换、VI-LayoutXLM 的 SER/RE 训练单卡、多卡、断点续训、知识蒸馏、多平台、评估、预测含内置 OCR 与预标注 OCR 两种模式以及推理模型导出与部署推理。结合仓库源码你可以进一步沿着 configs/kie/配置入口、ppocr/modeling/backbones/vqa_layoutlm.py模型结构、tools/infer_kie_token_ser.py 与 tools/infer_kie_token_ser_re.pySER/RE 串联预测、ppstructure/kie/推理脚本与数据转换工具四条主线将这套流程迁移到票据、证照、合同等自定义文档场景中。【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表