ARTICLE DETAIL

资讯详情

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

PaddleOCR 表格识别算法 TableMASTER:从论文原理到训练与推理部署实战

PaddleOCR 表格识别算法 TableMASTER:从论文原理到训练与推理部署实战 PaddleOCR 表格识别算法 TableMASTER从论文原理到训练与推理部署实战【免费下载链接】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导读TableMASTERTable Masked Auto-Encoder and Splitter for Table Recognition是 PaddleOCR 在 PP-Structure 表格结构化方向落地的重要算法之一其核心目标是把表格图片直接解析为带有单元格坐标的 HTML 结构。本文以 算法文档 为骨架结合仓库中的配置文件、模型源码与推理脚本系统讲解 TableMASTER 的网络结构原理、PubTabNet 数据集上的复现指标、模型训练/评估/预测全流程以及 Python 推理部署的完整命令与输出解析。读完本文你将能够独立完成 TableMASTER 从模型导出、推理到可视化结果解读的端到端实操。1. 算法简介从 ICDAR 2021 竞赛方案到开源复现TableMASTER 最初是平安科技PingAn-VCGroup提交给ICDAR 2021 科学文献解析竞赛 Task B表格识别转 HTML的解决方案相关论文为Ye, Jiaquan and Qi, Xianbiao and He, Yelin and Chen, Yihao and Gu, Dengyi and Gao, Peng and Xiao, Rong.TableMaster: PingAn-VCGroups Solution for ICDAR 2021 Competition on Scientific Literature Parsing Task B: Table Recognition to HTML. 2021.该方案的核心思想是将表格识别建模为一个序列到序列Seq2Seq的结构生成任务——模型输出一串 HTML 结构 tokentable、tr、td、colspan、rowspan等同时为每个td单元格回归出其在图像中的坐标框bbox。这样一次前向即可同时拿到“表格结构”和“每个单元格的位置”为后续与 OCR 文本识别结果做单元格内容匹配提供了基础。1.1 论文原文的 MASTER 结构TableMASTER 基于 MASTERMulti-Aspect non-local network for Scenario Text Recognition框架整体包含四大部分Transformer 编码器、行/列位置编码Row/Column Positional Encoding、MASTER 解码器和序列后处理模块。其中Transformer 编码器采用多层多头自注意力结构MASTER 解码器负责将编码后的视觉特征逐步解码为结构 token 序列行/列位置编码帮助模型区分表格的行列语义序列后处理则把概率输出转成最终的 HTML 结构。1.2 PaddleOCR 中的复现与公开指标PaddleOCR 对 TableMASTER 进行了完整复现在PubTabNet 表格识别公开数据集上的效果如下模型骨干网络配置文件acc下载链接TableMasterTableResNetExtraconfigs/table/table_master.yml77.47%训练模型 / 推理模型表中所列 acc 指标为仓库文档给出的 PubTabNet 复现结果实际使用中请以当前仓库版本与数据划分为准表格识别精度会随训练数据、图像预处理与后处理参数的差异而波动。2. 网络结构拆解TableResNetExtra 骨干与双头 Transformer 解码器文档中给出了模型配置与指标但未展开网络细节。结合仓库源码可以清晰还原 TableMASTER 在 PaddleOCR 中的实现结构整体流水线为输入图像(480×480) → TableResNetExtra骨干 → 特征图展平位置编码 → TableMasterHead(Transformer解码器) → structure_probs(结构token概率) loc_preds(单元格坐标)2.1 骨干网络 TableResNetExtra骨干网络实现在 ppocr/modeling/backbones/table_master_resnet.py入口为TableResNetExtra类。它在标准 ResNet 的基础上做了针对表格任务的改造输出多尺度特征列表前向过程中依次收集三组特征f通道数分别为 256、256、512输出out_channels [256, 256, 512]供解码器使用融合 GCNet 上下文建模每个BasicBlock可通过gcb_config插入MultiAspectGCAttention多视角 GC 注意力模块在通道维度上聚合全局上下文帮助模型感知表格中跨行跨列的结构关系无下采样降维卷积层均保持stride1仅通过三次 MaxPool 逐步缩小特征图尺寸从而保留更精细的空间位置信息——这对单元格坐标回归至关重要。配置文件 configs/table/table_master.yml 中对应参数为Architecture: model_type: table algorithm: TableMaster Backbone: name: TableResNetExtra gcb_config: ratio: 0.0625 # GC注意力压缩比例中间层通道数 int(inplanes * ratio) headers: 1 # 多头注意力的头数 att_scale: False # 是否对注意力分数做尺度缩放 fusion_type: channel_add # 上下文融合方式channel_add / channel_mul / channel_concat layers: [False, True, True, True] # 各 stage 是否启用 GC 注意力 layers: [1, 2, 5, 3] # 四个 stage 的 BasicBlock 数量2.2 双头 Transformer 解码器 TableMasterHead解码器实现在 ppocr/modeling/heads/table_master_head.py类注释明确指出其设计意图Split to two transformer header at the last layer. Cls_layer is used to structure token classification. Bbox_layer is used to regress bbox coord.即在解码器最后一层拆分为两个 Transformer 分支头cls_layer分类头预测每个位置的结构 token 类别输出structure_probsbbox_layer回归头对每个td单元格回归 4 维归一化坐标x、y、w、h经Sigmoid后输出loc_preds。关键实现细节包括解码器由 2 层DecoderLayer堆叠分类头与回归头各再接 1 层DecoderLayer训练阶段使用 Teacher Forcingforward_train输入真实 token 序列并构造下三角掩码make_mask防止未来信息泄漏推理阶段使用贪心解码greedy_forward以SOS起始符索引为out_channels - 3为起点逐 token 生成直到达到max_text_length输出序列尾部补EOS/PAD特征图展平为序列后叠加正弦位置编码PositionalEncoding编码方式与 Transformer 原文一致。配置文件中 Head 参数如下Head: name: TableMasterHead hidden_size: 512 # d_model特征与嵌入维度 headers: 8 # 多头注意力头数需满足 d_model % headers 0 dropout: 0 d_ff: 2024 # Feed-Forward 中间层维度 max_text_length: 500 # 最大结构 token 序列长度 loc_reg_num: 4 # 每个单元格回归的坐标数 (x, y, w, h)2.3 联合损失结构交叉熵 水平/垂直坐标回归损失函数实现在 ppocr/losses/table_master_loss.pyTableMasterLoss将三类损失加权求和structure_loss CrossEntropyLoss(ignore_indexignore_index) # 结构 token 分类损失 horizon_loss L1Loss(奇数通道: x, w) / bbox_masks.sum() # 水平方向坐标损失 vertical_loss L1Loss(偶数通道: y, h) / bbox_masks.sum() # 垂直方向坐标损失 loss structure_loss horizon_loss vertical_loss其中bbox_masks用于掩码掉空单元格或非td结构 token 对应的坐标避免无意义的回归坐标预测经过Sigmoid归一化到[0,1]再在解码阶段乘回图像尺寸还原为真实像素坐标。配置文件中Loss.ignore_index: 42即“字典长度 3”UKN/SOS/EOS/PAD四个特殊符中的忽略项用于训练时跳过填充位置。3. 环境配置与数据准备3.1 运行环境TableMASTER 的完整训练、评估与推理依赖 PaddleOCR 的 Python 环境。请先参考 《运行环境准备》 配置 PaddleOCR 运行环境再参考 《项目克隆》 克隆项目代码。3.2 数据集PubTabNet上述 TableMaster 模型使用PubTabNet 表格识别公开数据集训练得到数据集下载可参考 table_datasets。PubTabNet 的标注为 JSONL 格式每行包含图像路径、HTML 结构标签与单元格 bbox这正是 TableMaster 训练所需的“结构 坐标”联合监督信号。在配置文件 configs/table/table_master.yml 中数据入口通过Train/Eval段声明Train: dataset: name: PubTabDataSet data_dir: train_data/table/pubtabnet/train/ label_file_list: [train_data/table/pubtabnet/PubTabNet_2.0.0_train.jsonl] Eval: dataset: name: PubTabDataSet data_dir: train_data/table/pubtabnet/val/ label_file_list: [train_data/table/pubtabnet/PubTabNet_2.0.0_val.jsonl]3.3 训练数据预处理链路TableMaster 有区别于通用表格模型的专属预处理流水线transforms列表顺序如下DecodeImageBGR 模式解码图像TableMasterLabelEncode将 HTML 结构标签编码为 token 索引序列并生成对应的 bbox 目标与掩码。源码实现在 ppocr/data/imaug/label_ops.py关键开关包括replace_empty_cell_token: True用td/td等合并表示空单元格减少 token 长度merge_no_span_structure: True合并不带colspan/rowspan属性的td结构learn_empty_box: False是否学习空单元格的坐标默认不学空单元格掩码置零loc_reg_num: 4坐标回归维度ResizeTableImage等比缩放图像至max_len480PaddingTableImagepadding 到固定尺寸[480, 480]保证 batch 内形状一致TableBoxEncode将 bbox 从xywh格式归一化到[0,1]除以图像宽高NormalizeImage均值/方差均为[0.5, 0.5, 0.5]、scale 为1/255注意TableMaster 的归一化参数与 SLANet 等其他表格模型不同后者使用 ImageNet 统计量[0.485, 0.456, 0.406]/[0.229, 0.224, 0.225]ToCHWImageKeepKeys转换通道顺序并保留image, structure, bboxes, bbox_masks, shape。3.4 字典与特殊 tokenTableMaster 使用专用结构字典 ppocr/utils/dict/table_master_structure_dict.txt内容为 HTML 表格结构片段如thead、tr、td/td、colspan2、rowspan3、eb/eb等。在标签编码与解码时会在字典末尾追加四个特殊符UKN # 未知符 SOS # 序列起始符解码起点 EOS # 序列结束符解码终止 PAD # 填充符因此字典实际大小为 3935 个结构 token 4 个特殊符配置中ignore_index: 42与max_text_length: 500均与此设定对应。4. 模型训练、评估与预测数据下载完成后请参考 文本识别教程 进行训练。PaddleOCR 对代码进行了模块化训练不同的模型只需要更换配置文件即可——TableMASTER 对应的配置文件为 configs/table/table_master.yml。关键训练超参数一览均可在配置文件中按需调整配置项默认值说明Global.epoch_num17总训练轮数Global.eval_batch_step[0, 6259]每 6259 步评估一次Global.d2s_train_image_shape[3, 480, 480]训练输入尺寸Optimizer.nameAdam优化器beta10.9, beta20.999Optimizer.lrMultiStepDecay, 0.001学习率 0.001milestones[12,15]gamma0.1warmup0.02 轮Train.loader.batch_size_per_card10单卡 batch sizeMetric.main_indicatoracc主评估指标为结构准确率训练入口为tools/train.py评估入口为tools/eval.py典型命令# 训练 python3 tools/train.py -c configs/table/table_master.yml # 评估 python3 tools/eval.py -c configs/table/table_master.yml -o Global.checkpointsoutput/table_master/best_accuracy # 预测单图 python3 tools/infer_table.py -c configs/table/table_master.yml -o Global.infer_imgppstructure/docs/table/table.jpg训练过程中的结构损失、水平/垂直坐标损失与 acc 指标会通过Global.cal_metric_during_train: true在训练阶段同步输出便于实时观察模型收敛情况。5. 推理部署5.1 模型导出训练模型 → inference model首先将训练得到的 best 模型转换为推理模型inference model。以基于 TableResNetExtra 骨干网络、在 PubTabNet 数据集训练的模型为例模型下载地址见本文第 1 节可使用如下命令# 注意将 pretrained_model 的路径设置为本地路径。 python3 tools/export_model.py -c configs/table/table_master.yml -o Global.pretrained_modeloutput/table_master/best_accuracy Global.save_inference_dir./inference/table_master注意如果您是在自己的数据集上训练的模型并且调整了字典文件请注意修改配置文件中的character_dict_path是否为正确的字典文件应指向 ppocr/utils/dict/table_master_structure_dict.txt 或您自定义的字典。转换成功后./inference/table_master/目录下有三个文件./inference/table_master/ ├── inference.pdiparams # inference 模型的参数文件 ├── inference.pdiparams.info # inference 模型的参数信息可忽略 └── inference.pdmodel # inference 模型的 program 文件5.2 Python 推理结构识别 单元格坐标在ppstructure/目录下执行如下命令进行表格结构推理cd ppstructure/ python3 table/predict_structure.py --table_model_dir../output/table_master/table_structure_tablemaster_infer/ --table_algorithmTableMaster --table_char_dict_path../ppocr/utils/dict/table_master_structure_dict.txt --table_max_len480 --image_dirdocs/table/table.jpg # 预测文件夹下所有图像时可修改 image_dir 为文件夹如 --image_dirdocs/table。各命令行参数说明参数说明--table_model_dirTableMaster 推理模型目录含 pdmodel/pdiparams--table_algorithm表格算法名TableMaster 推理必须显式指定为TableMaster--table_char_dict_path结构字典路径指向table_master_structure_dict.txt--table_max_len输入图像缩放/填充的最大边长默认 480--image_dir输入图像路径或目录执行命令后图像的预测结果HTML 结构 token 序列和每个单元格的坐标会打印到屏幕上同时会保存单元格坐标的可视化结果。示例如下[2022/06/16 13:06:54] ppocr INFO: result: [html, body, table, thead, tr, td/td, td/td, td/td, td/td, td/td, /tr, /thead, tbody, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, tr, td/td, td/td, td/td, td/td, td/td, /tr, /tbody, /table, /body, /html], [[72.17591094970703, 10.759100914001465, 60.29658508300781, 16.6805362701416], [161.85562133789062, 10.884308815002441, 14.9495210647583, 16.727018356323242], [277.79876708984375, 29.54340362548828, 31.490320205688477, 18.143272399902344], ... [336.11724853515625, 280.3601989746094, 39.456939697265625, 18.121286392211914]] [2022/06/16 13:06:54] ppocr INFO: save vis result to ./output/table.jpg [2022/06/16 13:06:54] ppocr INFO: Predict time of docs/table/table.jpg: 17.36806297302246对输出结果解读如下结构部分一串 HTML token 序列外层由predict_structure.py统一包裹html/body/table与闭合标签见 ppstructure/table/predict_structure.py 中structure_str_list的组装逻辑内部则是模型逐 token 生成的thead/tbody/tr/td结构坐标部分每个td单元格对应一个四元组为[x1, y1, x2, y2]格式的像素坐标从xywh归一化坐标经_bbox_decode还原得到见 ppocr/postprocess/table_postprocess.py 中TableMasterLabelDecode._bbox_decode可视化结果会保存到./output/table.jpg同时打印单张图像的预测耗时。5.3 推理链路源码解读TableMaster 的 Python 推理入口是 ppstructure/table/predict_structure.py 中的TableStructurer类其工作流程与源码中的关键事实预处理build_pre_process_list针对TableMaster算法走专属分支——先ResizeTableImage、再PaddingTableImage、最后NormalizeImage均值为[0.5, 0.5, 0.5]与训练配置保持完全一致后处理为 TableMaster 显式指定TableMasterLabelDecode并设置box_shape: padbbox 在 padding 后的坐标系下解码再还原避免 padding 区域造成坐标偏移同时透传merge_no_span_structure输出组装模型原始输出outputs[1]structure_probs与outputs[0]loc_preds被组装为preds字典后处理后拼上html/body/table外壳输出结果落盘结构 坐标结果写入./output/infer.txt单元格框可视化图像保存到--output指定目录。注意TableMaster 在推理时比较慢解码器为逐 token 自回归生成max_text_length最大可达 500建议使用 GPU 进行推理。5.4 与 SLANet 等其他表格模型的差异在 PaddleOCR 的表格结构识别家族中TableMaster 与 SLANet、SLANeXt 等在推理入口上共用predict_structure.py但存在若干关键差异均可从 ppstructure/table/predict_structure.py 源码确认维度TableMasterSLANet 等默认分支归一化参数mean/std [0.5, 0.5, 0.5]mean/std [0.485, 0.456, 0.406] / [0.229, 0.224, 0.225]预处理顺序resize → pad → normalizeresize → normalize → pad后处理类TableMasterLabelDecodebox_shapepadTableLabelDecode推理方式Transformer 自回归解码较慢前向网络直接输出较快因此切换表格模型时必须同时更换--table_algorithm与对应的--table_char_dict_path否则预处理、后处理与字典不匹配会导致结果错误。5.5 表格内容恢复结构 坐标 OCR 文本匹配TableMASTER 输出的“结构 token 单元格坐标”本身即可作为结构化结果使用。若需将单元格内容一并填充生成带文本的完整表格可将结构结果与文本识别OCR结果做坐标匹配仓库提供了 ppstructure/table/table_master_match.py源于 TableMASTER 官方 matching 逻辑通过shapely多边形相交计算将每个识别文本框分配到最匹配的td单元格框内。该文件还包含xywh2xyxy、xyxy2xywh等坐标格式转换工具配合 ppstructure/table/predict_table.py 即可端到端产出“结构 内容”都完整的表格 HTML。6. 其他部署方式与 FAQ6.1 部署支持现状C 推理部署由于 C 端的预处理与后处理尚未支持 TableMaster当前暂未支持 C 部署Serving 服务化部署暂不支持更多推理部署暂不支持。因此在生产环境中使用 TableMaster目前以 Python 推理链路predict_structure.py为主。6.2 FAQ 常见问题推理结果坐标异常怎么办检查是否使用了--table_algorithmTableMaster且--table_char_dict_path指向table_master_structure_dict.txtTableMaster 的归一化与预处理顺序与其他表格模型不同混用会直接导致坐标与结构错乱。模型导出报错/结果为空确认Global.pretrained_model路径正确、character_dict_path与训练时一致若自定义了字典需同步更新配置与推理参数。推理速度慢TableMaster 使用自回归逐 token 解码建议 GPU 推理并可适当调小max_text_length或输入尺寸--table_max_len。引用article{ye2021pingan, title{PingAn-VCGroups Solution for ICDAR 2021 Competition on Scientific Literature Parsing Task B: Table Recognition to HTML}, author{Ye, Jiaquan and Qi, Xianbiao and He, Yelin and Chen, Yihao and Gu, Dengyi and Gao, Peng and Xiao, Rong}, journal{arXiv preprint arXiv:2105.01848}, year{2021} }延伸阅读表格识别算法系列文档入口docs/version2.x/algorithm/table_recognition/表格数据集获取与标注格式docs/datasets/table_datasets.mdPP-Structure 表格预测入口ppstructure/table/predict_table.py表格结构评估指标实现ppocr/metrics/table_metric.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),仅供参考
返回列表