ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PaddleOCR 关键信息抽取算法 SDMGR 实战:图推理框架、WildReceipt 训练评估与推理部署指南

PaddleOCR 关键信息抽取算法 SDMGR 实战:图推理框架、WildReceipt 训练评估与推理部署指南 PaddleOCR 关键信息抽取算法 SDMGR 实战图推理框架、WildReceipt 训练评估与推理部署指南【免费下载链接】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 中基于空间双模态图推理的关键信息抽取KIE算法 SDMGRSpatial Dual-Modality Graph Reasoning for Key Information Extraction。SDMGR 将图像中检测到的每个文本区域textline分类为预定义业务类别如订单号、发票号码、金额等是构建发票、单据结构化解析能力的关键模块。读完本文你将掌握 SDMGR 在 PaddleOCR 中的完整落地链路从算法原理与图结构建模、环境与 WildReceipt 数据集准备到训练、评估、预测的完整命令与配置项逐字段解析以及仓库源码级的数据处理、损失函数与图神经网络实现细节。本文对应仓库文档docs/version2.x/algorithm/kie/algorithm_kie_sdmgr.md1. 算法简介SDMGRSpatial Dual-Modality Graph Reasoning for Key Information Extraction空间双模态图推理关键信息抽取由 Hongbin Sun、Zhanghui Kuang、Xiaoyu Yue、Chenhao Lin、Wayne Zhang 于 2021 年提出论文发表于 arXivSpatial Dual-Modality Graph Reasoning for Key Information Extraction。在 WildReceipt 公开发票数据集上PaddleOCR 复现效果如下模型骨干网络配置文件Hmean下载链接SDMGRVGG6configs/kie/sdmgr/kie_unet_sdmgr.yml86.70%训练模型kie_vgg16.tarPaddleOCR 官网模型库提供从仓库源码结构看SDMGR 在 PaddleOCR 中由以下模块组成均在ppocr目录下骨干网络ppocr/modeling/backbones/kie_unet_sdmgr.pyKie_backboneU-Net 风格视觉特征提取对应配置Backbone.name: Kie_backbone图推理头ppocr/modeling/heads/kie_sdmgr_head.pySDMGRHead包含文本编码、视觉融合与多层 GNN损失函数ppocr/losses/kie_sdmgr_loss.pySDMGRLoss节点分类损失 边关系损失数据处理ppocr/data/imaug/label_ops.py 中的KieLabelEncode、KieResize等算子评估指标ppocr/metrics/kie_metric.py中的KIEMetric以 Hmean 为主指标。2. 算法原理从文本检测框到语义图SDMGR 的核心思想是将关键信息抽取建模为图节点分类与图边关系推理问题一张单据图像上的每个文本检测框作为一个图节点任意两个节点之间构成一条边通过空间关系与文本语义的双模态信息在图神经网络GNN上进行推理最终为每个节点输出预定义类别标签。结合 SDMGRHead 的forward实现其推理链路可拆解为五个阶段节点初始化文本模态每个节点的文本序列先经字符索引映射为node_embednn.Embedding(num_chars, node_input)再送入单层 LSTM 编码取最后一个有效字符位置的特征作为该节点的文本嵌入视觉融合双模态若输入中存在视觉特征x则通过Block([visual_dim, node_embed], node_embed, fusion_dim)将文本嵌入与骨干网络提取的视觉特征融合形成文本 视觉的双模态节点表示边初始化空间模态任意两个节点的边界框通过edge_embed nn.Linear(edge_input, edge_embed)编码为边特征并进行 L2 归一化其中edge_input5对应 5 维空间关系见下文数据处理GNN 推理堆叠num_gnn2层GNNLayer每层将(节点特征, 邻居节点特征, 边特征)拼接后经in_fc、coef_fc计算注意力系数加权聚合实现跨节点信息传递双头输出node_cls nn.Linear(node_embed, num_classes)输出每个节点的类别分布edge_cls nn.Linear(edge_embed, 2)输出每条边是否属于同一实体的二分类结果。对应的SDMGRHead关键超参默认值见源码参数默认值含义num_chars92字符字典大小visual_dim16视觉特征维度fusion_dim1024双模态融合维度node_input32字符嵌入维度node_embed256节点嵌入维度edge_input5边空间关系维度edge_embed256边嵌入维度num_gnn2GNN 层数num_classes26类别数随数据集而定bidirectionalFalseLSTM 是否双向3. 环境配置SDMGR 的运行环境与 PaddleOCR 主流程一致请依次完成参考《运行环境准备》安装 PaddlePaddle 与 PaddleOCR 依赖配置 GPU/CPU 运行环境参考《项目克隆》克隆 PaddleOCR 仓库代码或使用 pip 安装的paddleocr包训练脚本位于仓库tools/目录。4. 数据集准备WildReceiptSDMGR 的训练与测试均采用WildReceipt公开数据集通过以下命令下载并解压wget https://paddleocr.bj.bcebos.com/ppstructure/dataset/wildreceipt.tar tar xf wildreceipt.tar将数据集软链到 PaddleOCR 的train_data目录下cd PaddleOCR/ mkdir train_data cd train_data ln -s ../../wildreceipt ./解压后的 WildReceipt 目录应包含以下关键文件由 kie_unet_sdmgr.yml 引用文件用途wildreceipt_train.txt训练集标注文件每行包含图像路径与 OCR 检测框、文本、类别、边关系等标注wildreceipt_test.txt测试集标注文件dict.txt字符字典对应配置KieLabelEncode.character_dict_pathclass_list.txt类别列表如订单号、发票号、金额等对应配置Global.class_path1.txt等文本文件预测阶段使用的图像路径 OCR 信息描述文件4.1 标注数据结构源码级说明KieLabelEncode见 label_ops.py在读取标注后会生成模型所需的结构化张量relationscompute_relation计算任意两个框之间的 5 维空间关系[dxs, dys, whs, xhhs, xwhs]其中dxs/dys为归一化中心偏移归一化系数norm10whs为宽高比xhhs/xwhs为相对高度/宽度比例构成边的空间模态输入textspad_text_indices将不定长文本索引补齐到固定长度最大 300供 LSTM 编码labels第一列为节点类别标签其余列为(edges[:, None] edges[None, :])计算的边标签矩阵对角置 -1 表示忽略其中edges表示文本是否属于同一实体tag[h, recoder_len]记录真实节点数与最长文本长度用于损失函数中的动态裁剪。5. 模型训练、评估与预测SDMGR 将每个检测到的文本区域分类为预定义类别如订单 ID、发票号码、金额等。以下操作均在仓库根目录执行。5.1 模型训练训练采用配置文件 configs/kie/sdmgr/kie_unet_sdmgr.yml默认训练数据路径为train_data/wildreceipt。准备数据后执行python3 tools/train.py -c configs/kie/sdmgr/kie_unet_sdmgr.yml -o Global.save_model_dir./output/kie/配置文件逐字段解析训练前建议通读一遍Global段字段默认值说明use_gpuTrue是否使用 GPU 训练epoch_num60训练轮数log_smooth_window20日志平滑窗口print_batch_step50每 N 个 batch 打印一次日志save_model_dir./output/kie_5/模型保存目录命令行-o可覆盖save_epoch_step50每 N 个 epoch 保存一次模型eval_batch_step[0, 80]第 0 个 iter 起每 80 个 iter 评估一次load_static_weightsFalse是否加载静态图权重官方提供预训练模型时建议 Falsecal_metric_during_trainFalse训练过程中是否计算指标pretrained_model/checkpoints空预训练模型 / 断点续训路径save_inference_dir空推理模型导出目录use_visualdlFalse是否使用 VisualDL 可视化class_path./train_data/wildreceipt/class_list.txt类别列表路径infer_img./train_data/wildreceipt/1.txt预测输入文件save_res_path./output/sdmgr_kie/predicts_kie.txt预测结果保存路径img_scale[1024, 512]图像缩放目标尺寸Architecture段model_type: kie、algorithm: SDMGR骨干为Kie_backbone头部为SDMGRHead。Loss段name: SDMGRLoss节点与边交叉熵的加权和。Optimizer段Adam初始学习率 0.001Piecewise分段衰减epoch 60/80/100 处分别衰减为 0.001/0.0001/0.00001warmup_epoch: 2L2 正则系数5e-5。Metric段KIEMetric主指标hmean。Train/Eval段均使用SimpleDataSet训练标签为wildreceipt_train.txt评估标签为wildreceipt_test.txt。训练 batch_size 为 4评估batch_size_per_card必须为 1。两者在数据增强链上的差异在于训练先NormalizeImage再KieLabelEncode/KieResize且KeepKeys不含原始图评估链先KieLabelEncode再KieResize、NormalizeImageKeepKeys额外保留ori_image、ori_boxes用于可视化与后处理。5.2 模型评估使用tools/eval.py加载训练产出的最优模型进行评估python3 tools/eval.py -c configs/kie/sdmgr/kie_unet_sdmgr.yml -o Global.checkpoints./output/kie/best_accuracy输出信息示例如下[2022/08/10 05:22:23] ppocr INFO: metric eval *************** [2022/08/10 05:22:23] ppocr INFO: hmean:0.8670120239257812 [2022/08/10 05:22:23] ppocr INFO: fps:10.18816520530961其中hmean约 0.867 与论文复现表86.70%一致fps为推理速度指标。评估逻辑由KIEMetricppocr/metrics/kie_metric.py实现对每张图的节点预测计算精确率、召回率与 F1 后汇总为 Hmean。5.3 模型预测预测前需预先准备存储图片路径以及 OCR 信息的文本文件并通过Global.infer_img指定python3 tools/infer_kie.py -c configs/kie/kie_unet_sdmgr.yml -o Global.checkpointskie_vgg16/best_accuracy Global.infer_img./train_data/wildreceipt/1.txttools/infer_kie.py见 tools/infer_kie.py的执行逻辑读取Global.class_path得到类别索引映射idx_to_clsread_class_list推理得到每个节点的类别 logits取 argmax 得到预测类别write_kie_result将 图像路径 节点类别 写入./output/sdmgr_kie/predicts_kie.txtdraw_kie_result将可视化结果保存至./output/sdmgr_kie/kie_results/目录。预测结果与可视化输出默认保存在./output/sdmgr_kie/目录下。可视化效果示意6. 损失函数与评估指标源码解析6.1 SDMGRLossSDMGRLoss 由两部分交叉熵构成loss_node节点类别分类损失ignore_index0忽略无效节点loss_edge边关系分类损失ignore_index-1忽略对角线等无效边总损失loss node_weight * loss_node edge_weight * loss_edge默认node_weight edge_weight 1.0。pre_process依据tag中的真实节点数num将标签矩阵裁剪为[num, num1]的有效区域再参与损失计算accuracy计算节点与边的 Top-1 准确率用于训练日志监控。6.2 从源码推断的训练要点评估 batch 必须为 1配置文件注释明确batch_size_per_card: 1 # must be 1因为 GNN 推理需要按样本独立处理变长节点数标签矩阵上三角语义temp_labels[:h, :h1]中labels[:, 0]为节点类别其余列为边类别对角线置 -1图结构的空间先验5 维边特征完全由检测框坐标计算compute_relation不依赖端到端训练体现了空间双模态中的空间模态设计。7. 推理部署原文档明确截至本文所述版本SDMGR 的以下部署方式暂不支持4.1 Python 推理暂不支持4.2 C 推理部署暂不支持4.3 Serving 服务化部署暂不支持4.4 更多推理部署如移动端/边缘设备等暂不支持。因此当前 SDMGR 的完整可用链路为训练 → 评估 → 预测tools/infer_kie.py如需在生产环境服务化调用可考虑以预测脚本为基础封装推理服务。8. FAQ 与注意事项问预测时报找不到class_path确认Global.class_path指向train_data/wildreceipt/class_list.txt且软链已正确建立问评估时显存不足评估batch_size_per_card必须保持为 1不要调大问load_static_weights何时开启仅当使用静态图分支导出的分类预训练模型时置 True微调 PaddleOCR 官方提供的动态图预训练模型时保持 False问如何续训设置Global.checkpoints为已有模型路径配合-o参数覆盖配置即可。引用misc{sun2021spatial, title{Spatial Dual-Modality Graph Reasoning for Key Information Extraction}, author{Hongbin Sun and Zhanghui Kuang and Xiaoyu Yue and Chenhao Lin and Wayne Zhang}, year{2021}, eprint{2103.14470}, archivePrefix{arXiv}, primaryClass{cs.CV} }延伸阅读同目录下的其他 KIE 算法文档algorithm_kie_layoutxlm.md、algorithm_kie_vi_layoutxlm.mdKIE 数据集与标注规范docs/datasets/kie_datasets.md端到端预测脚本入口tools/infer_kie.py、训练/评估通用入口tools/train.py、tools/eval.py。【免费下载链接】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),仅供参考
返回列表