formula_recognition.md 44 KB


comments: true

公式识别产线使用教程

1. 公式识别产线介绍

公式识别是一种自动从文档或图像中识别和提取LaTeX公式内容及其结构的技术,广泛应用于数学、物理、计算机科学等领域的文档编辑和数据分析。通过使用计算机视觉和机器学习算法,公式识别能够将复杂的数学公式信息转换为可编辑的LaTeX格式,方便用户进一步处理和分析数据。

公式识别产线用于解决公式识别任务,提取图片中的公式信息以LaTeX源码形式输出,本产线是一个集成了百度飞桨视觉团队自研的先进公式识别模型PP-FormulaNet 和业界知名公式识别模型 UniMERNet的端到端公式识别系统,支持简单印刷公式、复杂印刷公式、手写公式的识别,并在此基础上,增加了对图像的方向矫正和扭曲矫正功能。基于本产线,可实现公式内容精准预测,使用场景覆盖教育、科研、金融、制造等各个领域。本产线同时提供了灵活的服务化部署方式,支持在多种硬件上使用多种编程语言调用。不仅如此,本产线也提供了二次开发的能力,您可以基于本产线在您自己的数据集上训练调优,训练后的模型也可以无缝集成。

公式识别产线中包含必选的公式识别模块,以及可选的版面区域检测模块、文档图像方向分类模块和文本图像矫正模块。其中,文档图像方向分类模块和文本图像矫正模块作为文档预处理子产线被集成到公式识别产线中。每个模块都包含多个模型,您可以根据下方的基准测试数据选择使用的模型。

如果您更注重模型的精度,请选择精度较高的模型;如果您更在意模型的推理速度,请选择推理速度较快的模型;如果您关注模型的存储大小,请选择存储体积较小的模型。

文档图像方向分类模块(可选):

模型模型下载链接 Top-1 Acc(%) GPU推理耗时(ms) CPU推理耗时 (ms) 模型存储大小(M) 介绍
PP-LCNet_x1_0_doc_ori推理模型/训练模型 99.06 3.84845 9.23735 7 基于PP-LCNet_x1_0的文档图像分类模型,含有四个类别,即0度,90度,180度,270度
注:以上精度指标的评估集是自建的数据集,覆盖证件和文档等多个场景,包含 1000 张图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。

文本图像矫正模块(可选):

模型模型下载链接 CER 模型存储大小(M) 介绍
UVDoc推理模型/训练模型 0.179 30.3 M 高精度文本图像矫正模型
注:模型的精度指标测量自 DocUNet benchmark

版面区域检测模块(可选):

模型模型下载链接 mAP(0.5)(%) GPU推理耗时(ms) CPU推理耗时 (ms) 模型存储大小(M) 介绍
PP-DocLayout-L推理模型/训练模型 90.4 34.5252 1454.27 123.76 M 基于RT-DETR-L在包含中英文论文、杂志、合同、书本、试卷和研报等场景的自建数据集训练的高精度版面区域定位模型
PP-DocLayout-M推理模型/训练模型 75.2 15.9 160.1 22.578 基于PicoDet-L在包含中英文论文、杂志、合同、书本、试卷和研报等场景的自建数据集训练的精度效率平衡的版面区域定位模型
PP-DocLayout-S推理模型/训练模型 70.9 13.8 46.7 4.834 基于PicoDet-S在中英文论文、杂志、合同、书本、试卷和研报等场景上自建数据集训练的高效率版面区域定位模型

注:以上精度指标的评估集是 PaddleOCR 自建的版面区域检测数据集,包含中英文论文、杂志、合同、书本、试卷和研报等常见的 500 张文档类型图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。

❗ 以上列出的是文本识别模块重点支持的3个核心模型,该模块总共支持11个全量模型,包含多个预定义了不同类别的模型,完整的模型列表如下:

👉模型列表详情 * 表格版面检测模型 注:以上精度指标的评估集是 PaddleOCR 自建的版面表格区域检测数据集,包含中英文 7835 张带有表格的论文文档类型图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。 * 3类版面检测模型,包含表格、图像、印章
模型模型下载链接 mAP(0.5)(%) GPU推理耗时(ms) CPU推理耗时 (ms) 模型存储大小(M) 介绍
PicoDet_layout_1x_table推理模型/训练模型 97.5 12.623 90.8934 7.4 M 基于PicoDet-1x在自建数据集训练的高效率版面区域定位模型,可定位表格这1类区域
注:以上精度指标的评估集是 PaddleOCR 自建的版面区域检测数据集,包含中英文论文、杂志和研报等常见的 1154 张文档类型图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。 * 5类英文文档区域检测模型,包含文字、标题、表格、图片以及列表
模型模型下载链接 mAP(0.5)(%) GPU推理耗时(ms) CPU推理耗时 (ms) 模型存储大小(M) 介绍
PicoDet-S_layout_3cls推理模型/训练模型 88.2 13.5 45.8 4.8 基于PicoDet-S轻量模型在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型
PicoDet-L_layout_3cls推理模型/训练模型 89.0 15.7 159.8 22.6 基于PicoDet-L在中英文论文、杂志和研报等场景上自建数据集训练的效率精度均衡版面区域定位模型
RT-DETR-H_layout_3cls推理模型/训练模型 95.8 114.6 3832.6 470.1 基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型
注:以上精度指标的评估集是 [PubLayNet](https://developer.ibm.com/exchanges/data/all/publaynet/) 的评估数据集,包含英文文档的 11245 张文图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。 * 17类区域检测模型,包含17个版面常见类别,分别是:段落标题、图片、文本、数字、摘要、内容、图表标题、公式、表格、表格标题、参考文献、文档标题、脚注、页眉、算法、页脚、印章
模型模型下载链接 mAP(0.5)(%) GPU推理耗时(ms) CPU推理耗时 (ms) 模型存储大小(M) 介绍
PicoDet_layout_1x推理模型/训练模型 97.8 13.0 91.3 7.4 基于PicoDet-1x在PubLayNet数据集训练的高效率英文文档版面区域定位模型
模型模型下载链接 mAP(0.5)(%) GPU推理耗时(ms) CPU推理耗时 (ms) 模型存储大小(M) 介绍
PicoDet-S_layout_17cls推理模型/训练模型 87.4 13.6 46.2 4.8 基于PicoDet-S轻量模型在中英文论文、杂志和研报等场景上自建数据集训练的高效率版面区域定位模型
PicoDet-L_layout_17cls推理模型/训练模型 89.0 17.2 160.2 22.6 基于PicoDet-L在中英文论文、杂志和研报等场景上自建数据集训练的效率精度均衡版面区域定位模型
RT-DETR-H_layout_17cls推理模型/训练模型 98.3 115.1 3827.2 470.2 基于RT-DETR-H在中英文论文、杂志和研报等场景上自建数据集训练的高精度版面区域定位模型
注:以上精度指标的评估集是 PaddleOCR 自建的版面区域检测数据集,包含中英文论文、杂志和研报等常见的 892 张文档类型图片。GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为 8,精度类型为 FP32。

公式识别模块:

模型模型下载链接 Avg-BLEU GPU推理耗时 (ms) 模型存储大小 (M) 介绍
UniMERNet推理模型/训练模型 0.8613 2266.96 1.4 G UniMERNet是由上海AI Lab研发的一款公式识别模型。该模型采用Donut Swin作为编码器,MBartDecoder作为解码器,并通过在包含简单公式、复杂公式、扫描捕捉公式和手写公式在内的一百万数据集上进行训练,大幅提升了模型对真实场景公式的识别准确率
PP-FormulaNet-S推理模型/训练模型 0.8712 202.25 167.9 M PP-FormulaNet 是由百度飞桨视觉团队开发的一款先进的公式识别模型,支持5万个常见LateX源码词汇的识别。PP-FormulaNet-S 版本采用了 PP-HGNetV2-B4 作为其骨干网络,通过并行掩码和模型蒸馏等技术,大幅提升了模型的推理速度,同时保持了较高的识别精度,适用于简单印刷公式、跨行简单印刷公式等场景。而 PP-FormulaNet-L 版本则基于 Vary_VIT_B 作为骨干网络,并在大规模公式数据集上进行了深入训练,在复杂公式的识别方面,相较于PP-FormulaNet-S表现出显著的提升,适用于简单印刷公式、复杂印刷公式、手写公式等场景。
PP-FormulaNet-L推理模型/训练模型 0.9213 1976.52 535.2 M
LaTeX_OCR_rec推理模型/训练模型 0.7163 - 89.7 M LaTeX-OCR是一种基于自回归大模型的公式识别算法,通过采用 Hybrid ViT 作为骨干网络,transformer作为解码器,显著提升了公式识别的准确性。
注:以上精度指标测量自 PaddleX 内部自建公式识别测试集。LaTeX_OCR_rec在LaTeX-OCR公式识别测试集的BLEU score为 0.8821。所有模型 GPU 推理耗时基于 Tesla V100 GPUs 机器,精度类型为 FP32。 ## 2. 快速开始 PaddleX 支持在本地使用命令行或 Python 体验公式识别产线的效果。 在本地使用公式识别产线前,请确保您已经按照[PaddleX本地安装教程](../../../installation/installation.md)完成了PaddleX的wheel包安装。 ### 2.1 命令行方式体验 一行命令即可快速体验公式识别产线效果,使用 [测试文件](https://paddle-model-ecology.bj.bcebos.com/paddlex/demo_image/pipelines/general_formula_recognition_001.png),并将 `--input` 替换为本地路径,进行预测 ```bash paddlex --pipeline formula_recognition \ --input general_formula_recognition_001.png \ --use_layout_detection True \ --use_doc_orientation_classify False \ --use_doc_unwarping False \ --layout_threshold 0.5 \ --layout_nms True \ --layout_unclip_ratio 1.0 \ --layout_merge_bboxes_mode large \ --save_path ./output \ --device gpu:0 ``` 相关的参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的参数说明。 运行后,会将结果打印到终端上,结果如下: ```bash {'res': {'input_path': 'general_formula_recognition.png', 'model_settings': {'use_doc_preprocessor': False,'use_layout_detection': True}, 'layout_det_res': {'input_path': None, 'boxes': [{'cls_id': 2, 'label': 'text', 'score': 0.9778407216072083, 'coordinate': [271.257, 648.50824, 1040.2291, 774.8482]}, ...]}, 'formula_res_list': [{'rec_formula': '\\small\\begin{aligned}{p(\\mathbf{x})=c(\\mathbf{u})\\prod_{i}p(x_{i}).}\\\\ \\end{aligned}', 'formula_region_id': 1, 'dt_polys': ([553.0718, 802.0996, 758.75635, 853.093],)}, ...]}} ``` 运行结果参数说明可以参考[2.2.2 Python脚本方式集成](#222-python脚本方式集成)中的结果解释。 可视化结果保存在`save_path`下,其中公式识别的可视化结果如下: 如果您需要对公式识别产线进行可视化,需要运行如下命令来对LaTeX渲染环境进行安装。目前公式识别产线可视化只支持Ubuntu环境,其他环境暂不支持。对于复杂公式,LaTeX 结果可能包含部分高级的表示,Markdown等环境中未必可以成功显示: ```bash sudo apt-get update sudo apt-get install texlive texlive-latex-base texlive-latex-extra -y ``` 备注: 由于公式识别可视化过程中需要对每张公式图片进行渲染,因此耗时较长,请您耐心等待。 ### 2.2 Python脚本方式集成 几行代码即可完成产线的快速推理,以公式识别产线为例: ```python from paddlex import create_pipeline pipeline = create_pipeline(pipeline="formula_recognition") output = pipeline.predict( input="./general_formula_recognition_001.png", use_layout_detection=True , use_doc_orientation_classify=False, use_doc_unwarping=False, layout_threshold=0.5, layout_nms=True, layout_unclip_ratio=1.0, layout_merge_bboxes_mode="large" ) for res in output: res.print() res.save_to_img(save_path="./output/") res.save_to_json(save_path="./output/") ``` 在上述 Python 脚本中,执行了如下几个步骤: (1)通过 `create_pipeline()` 实例化 公式识别 产线对象,具体参数说明如下:
参数 参数说明 参数类型 默认值
pipeline 产线名称或是产线配置文件路径。如为产线名称,则必须为 PaddleX 所支持的产线。 str None
config 产线具体的配置信息(如果和pipeline同时设置,优先级高于pipeline,且要求产线名和pipeline一致)。 dict[str, Any] None
device 产线推理设备。支持指定GPU具体卡号,如“gpu:0”,其他硬件具体卡号,如“npu:0”,CPU如“cpu”。 str None
use_hpip 是否启用高性能推理,仅当该产线支持高性能推理时可用。 bool False
(2)调用 公式识别产线对象的 `predict()` 方法进行推理预测。该方法将返回一个 `generator`。以下是 `predict()` 方法的参数及其说明: (3)对预测结果进行处理,每个样本的预测结果均为对应的Result对象,且支持打印、保存为图片、保存为`json`文件的操作:
参数 参数说明 参数类型 可选项 默认值
input 待预测数据,支持多种输入类型,必填 Python Var|str|list
  • Python Var:如 numpy.ndarray 表示的图像数据
  • str:如图像文件或者PDF文件的本地路径:/root/data/img.jpg如URL链接,如图像文件或PDF文件的网络URL:示例如本地目录,该目录下需包含待预测图像,如本地路径:/root/data/(当前不支持目录中包含PDF文件的预测,PDF文件需要指定到具体文件路径)
  • List:列表元素需为上述类型数据,如[numpy.ndarray, numpy.ndarray][\"/root/data/img1.jpg\", \"/root/data/img2.jpg\"][\"/root/data1\", \"/root/data2\"]
None
device 产线推理设备 str|None
  • CPU:如 cpu 表示使用 CPU 进行推理;
  • GPU:如 gpu:0 表示使用第 1 块 GPU 进行推理;
  • NPU:如 npu:0 表示使用第 1 块 NPU 进行推理;
  • XPU:如 xpu:0 表示使用第 1 块 XPU 进行推理;
  • MLU:如 mlu:0 表示使用第 1 块 MLU 进行推理;
  • DCU:如 dcu:0 表示使用第 1 块 DCU 进行推理;
  • None:如果设置为 None, 将默认使用产线初始化的该参数值,初始化时,会优先使用本地的 GPU 0号设备,如果没有,则使用 CPU 设备;
None
use_layout_detection 是否使用文档区域检测模块 bool|None
  • boolTrue 或者 False
  • None:如果设置为None, 将默认使用产线初始化的该参数值,初始化为True
None
use_doc_orientation_classify 是否使用文档方向分类模块 bool|None
  • boolTrue 或者 False
  • None:如果设置为None, 将默认使用产线初始化的该参数值,初始化为True
None
use_doc_unwarping 是否使用文档扭曲矫正模块 bool|None
  • boolTrue 或者 False
  • None:如果设置为None, 将默认使用产线初始化的该参数值,初始化为True
None
layout_threshold 用于过滤掉低置信度预测结果的阈值;如果不指定,将默认使用PaddleX官方模型配置 float/dict/None
  • float,如 0.2, 表示过滤掉所有阈值小于0.2的目标框
  • 字典,字典的key为int类型,代表cls_id,val为float类型阈值。如 {0: 0.45, 2: 0.48, 7: 0.4},表示对cls_id为0的类别应用阈值0.45、cls_id为1的类别应用阈值0.48、cls_id为7的类别应用阈值0.4
  • None, 不指定,将默认使用PaddleX官方模型配置
None
layout_nms 是否使用NMS后处理,过滤重叠框;如果不指定,将默认使用PaddleX官方模型配置 bool/None
  • bool, True 或者 False; 表示使用/不使用NMS进行检测框的后处理过滤重叠框
  • None, 不指定,将默认使用PaddleX官方模型配置
None
layout_unclip_ratio 检测框的边长缩放倍数;如果不指定,将默认使用PaddleX官方模型配置 float/list/None
  • float, 大于0的浮点数,如 1.1 , 表示将模型输出的检测框中心不变,宽和高都扩张1.1倍
  • 列表, 如 [1.2, 1.5] , 表示将模型输出的检测框中心不变,宽度扩张1.2倍,高度扩张1.5倍
  • None, 不指定,将默认使用PaddleX官方模型配置
None
layout_merge_bboxes_mode 模型输出的检测框的合并处理模式;如果不指定,将默认使用PaddleX官方模型配置 string/None
  • large, 设置为large时,表示在模型输出的检测框中,对于互相重叠包含的检测框,只保留外部最大的框,删除重叠的内部框。
  • small, 设置为small,表示在模型输出的检测框中,对于互相重叠包含的检测框,只保留内部被包含的小框,删除重叠的外部框。
  • union, 不进行框的过滤处理,内外框都保留
  • None, 不指定,将默认使用PaddleX官方模型配置
None
方法 方法说明 参数 参数类型 参数说明 默认值
print() 打印结果到终端 format_json bool 是否对输出内容进行使用 JSON 缩进格式化 True
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_json() 将结果保存为json格式的文件 save_path str 保存的文件路径,当为目录时,保存文件命名与输入文件类型命名一致
indent int 指定缩进级别,以美化输出的 JSON 数据,使其更具可读性,仅当 format_jsonTrue 时有效 4
ensure_ascii bool 控制是否将非 ASCII 字符转义为 Unicode。设置为 True 时,所有非 ASCII 字符将被转义;False 则保留原始字符,仅当format_jsonTrue时有效 False
save_to_img() 将结果保存为图像格式的文件 save_path str 保存的文件路径,支持目录或文件路径
- 调用`print()` 方法会将结果打印到终端,打印到终端的内容解释如下: - `input_path`: `(str)` 待预测图像的输入路径 - `page_index`: `(Union[int, None])` 如果输入是PDF文件,则表示当前是PDF的第几页,否则为 `None` - `model_settings`: `(Dict[str, bool])` 配置产线所需的模型参数 - `use_doc_preprocessor`: `(bool)` 控制是否启用文档预处理子产线 - `use_layout_detection`: `(bool)` 控制是否启用版面区域检测模块 - `doc_preprocessor_res`: `(Dict[str, Union[str, Dict[str, bool], int]])` 文档预处理子产线的输出结果。仅当`use_doc_preprocessor=True`时存在 - `input_path`: `(Union[str, None])` 图像预处理子产线接受的图像路径,当输入为`numpy.ndarray`时,保存为`None` - `model_settings`: `(Dict)` 预处理子产线的模型配置参数 - `use_doc_orientation_classify`: `(bool)` 控制是否启用文档方向分类 - `use_doc_unwarping`: `(bool)` 控制是否启用文档扭曲矫正 - `angle`: `(int)` 文档方向分类的预测结果。启用时取值为[0,1,2,3],分别对应[0°,90°,180°,270°];未启用时为-1 - `layout_det_res`: `(Dict[str, List[Dict]])` 版面区域检测模块的输出结果。仅当`use_layout_detection=True`时存在 - `input_path`: `(Union[str, None])` 版面区域检测模块接收的图像路径,当输入为`numpy.ndarray`时,保存为`None` - `boxes`: `(List[Dict[int, str, float, List[float]]])` 版面区域检测预测结果列表 - `cls_id`: `(int)` 版面区域检测预测的类别id - `label`: `(str)` 版面区域检测预测的类别 - `score`: `(float)` 版面区域检测预测的类别置信度分数 - `coordinate`: `(List[float])` 版面区域检测预测的边界框坐标,格式为[x_min, y_min, x_max, y_max],其中(x_min, y_min)为左上角坐标,(x_max, y_max) 为右上角坐标 - `formula_res_list`: `(List[Dict[str, int, List[float]]])` 公式识别的预测结果列表 - `rec_formula`: `(str)` 公式识别预测的LaTeX源码 - `formula_region_id`: `(int)` 公式识别预测的id编号 - `dt_polys`: `(List[float])` 公式识别预测的边界框坐标,格式为[x_min, y_min, x_max, y_max],其中(x_min, y_min)为左上角坐标,(x_max, y_max) 为右上角坐标 - 调用`save_to_json()` 方法会将上述内容保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}.json`,如果指定为文件,则直接保存到该文件中。由于json文件不支持保存numpy数组,因此会将其中的`numpy.array`类型转换为列表形式。 - 调用`save_to_img()` 方法会将可视化结果保存到指定的`save_path`中,如果指定为目录,则保存的路径为`save_path/{your_img_basename}_formula_res_img.{your_img_extension}`,如果指定为文件,则直接保存到该文件中。(产线通常包含较多结果图片,不建议直接指定为具体的文件路径,否则多张图会被覆盖,仅保留最后一张图) * 此外,也支持通过属性获取带结果的可视化图像和预测结果,具体如下:
属性 属性说明
json 获取预测的 json 格式的结果
img 获取格式为 dict 的可视化图像
- `json` 属性获取的预测结果为dict类型的数据,相关内容与调用 `save_to_json()` 方法保存的内容一致。 - `img` 属性返回的预测结果是一个字典类型的数据。其中,键分别为 `preprocessed_img`、 `layout_det_res`和 `formula_res_img`,对应的值是三个 `Image.Image` 对象:第一个用于展示图像预处理的可视化图像,第二个用于展示版面区域检测的可视化图像,第三个用于展示公式识别的可视化图像。如果没有使用图像预处理子模块,则字典中不包含 `preprocessed_img`;如果没有使用版面区域检测子模块,则字典中不包含`layout_det_res`。 此外,您可以获取公式识别产线配置文件,并加载配置文件进行预测。可执行如下命令将结果保存在 `my_path` 中: ``` paddlex --get_pipeline_config formula_recognition --save_path ./my_path ``` 若您获取了配置文件,即可对公式识别产线各项配置进行自定义,只需要修改 `create_pipeline` 方法中的 `pipeline` 参数值为产线配置文件路径即可。示例如下: ```python from paddlex import create_pipeline pipeline = create_pipeline(pipeline="./my_path/formula_recognition.yaml") output = pipeline.predict( input="./general_formula_recognition_001.png", use_layout_detection=True , use_doc_orientation_classify=False, use_doc_unwarping=False, layout_threshold=0.5, layout_nms=True, layout_unclip_ratio=1.0, layout_merge_bboxes_mode="large" ) for res in output: res.print() res.save_to_img(save_path="./output/") res.save_to_json(save_path="./output/") ``` 注: 配置文件中的参数为产线初始化参数,如果希望更改公式识别产线初始化参数,可以直接修改配置文件中的参数,并加载配置文件进行预测。同时,CLI 预测也支持传入配置文件,`--pipeline` 指定配置文件的路径即可。 ## 3. 开发集成/部署 如果公式识别产线可以达到您对产线推理速度和精度的要求,您可以直接进行开发集成/部署。 若您需要将公式识别产线直接应用在您的Python项目中,可以参考 [2.2 Python脚本方式](#22-python脚本方式集成)中的示例代码。 此外,PaddleX 也提供了其他三种部署方式,详细说明如下: 🚀 高性能推理:在实际生产环境中,许多应用对部署策略的性能指标(尤其是响应速度)有着较严苛的标准,以确保系统的高效运行与用户体验的流畅性。为此,PaddleX 提供高性能推理插件,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速,详细的高性能推理流程请参考[PaddleX高性能推理指南](../../../pipeline_deploy/high_performance_inference.md)。 ☁️ 服务化部署:服务化部署是实际生产环境中常见的一种部署形式。通过将推理功能封装为服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。PaddleX 支持多种产线服务化部署方案,详细的产线服务化部署流程请参考[PaddleX服务化部署指南](../../../pipeline_deploy/serving.md)。 以下是基础服务化部署的API参考与多语言服务调用示例:
API参考

对于服务提供的主要操作:

  • HTTP请求方法为POST。
  • 请求体和响应体均为JSON数据(JSON对象)。
  • 当请求处理成功时,响应状态码为200,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。固定为0
errorMsg string 错误说明。固定为"Success"
result object 操作结果。
  • 当请求处理未成功时,响应体的属性如下:
名称 类型 含义
logId string 请求的UUID。
errorCode integer 错误码。与响应状态码相同。
errorMsg string 错误说明。

服务提供的主要操作如下:

  • infer

获取图像公式识别结果。

POST /formula-recognition

  • 请求体的属性如下:
名称 类型 含义 是否必填
file string 服务器可访问的图像文件或PDF文件的URL,或上述类型文件内容的Base64编码结果。对于超过10页的PDF文件,只有前10页的内容会被使用。
fileType integer 文件类型。0表示PDF文件,1表示图像文件。若请求体无此属性,则将根据URL推断文件类型。
  • 请求处理成功时,响应体的result具有如下属性:
名称 类型 含义
formulaRecResults object 公式识别结果。数组长度为1(对于图像输入)或文档页数与10中的较小者(对于PDF输入)。对于PDF输入,数组中的每个元素依次表示PDF文件中每一页的处理结果。
dataInfo object 输入数据信息。

formulaRecResults中的每个元素为一个object,具有如下属性:

名称 类型 含义
formulas array 公式位置和内容。
inputImage string 输入图像。图像为JPEG格式,使用Base64编码。
layoutImage string 版面区域检测结果图。图像为JPEG格式,使用Base64编码。

formulas中的每个元素为一个object,具有如下属性:

名称 类型 含义
poly array 公式位置。数组中元素依次为包围文本的多边形的顶点坐标。
latex string 公式内容。

多语言调用服务示例

Python

import base64
import requests

API_URL = "http://localhost:8080/formula-recognition" file_path = "./demo.jpg"

with open(file_path, "rb") as file:

file_bytes = file.read()
file_data = base64.b64encode(file_bytes).decode("ascii")

payload = {"file": file_data, "fileType": 1}

response = requests.post(API_URL, json=payload)

assert response.status_code == 200 result = response.json()["result"] for i, res in enumerate(result["formulaRecResults"]):

print("Detected formulas:")
print(res["formulas"])
layout_img_path = f"layout_{i}.jpg"
with open(layout_img_path, "wb") as f:
    f.write(base64.b64decode(res["layoutImage"]))
print(f"Output image saved at {layout_img_path}")


📱 端侧部署:端侧部署是一种将计算和数据处理功能放在用户设备本身上的方式,设备可以直接处理数据,而不需要依赖远程的服务器。PaddleX 支持将模型部署在 Android 等端侧设备上,详细的端侧部署流程请参考PaddleX端侧部署指南。 您可以根据需要选择合适的方式部署模型产线,进而进行后续的 AI 应用集成。

4. 二次开发

如果公式识别产线提供的默认模型权重在您的场景中,精度或速度不满意,您可以尝试利用您自己拥有的特定领域或应用场景的数据对现有模型进行进一步的微调,以提升公式识别产线的在您的场景中的识别效果。

4.1 模型微调

由于公式识别产线包含若干模块,模型产线的效果如果不及预期,可能来自于其中任何一个模块。您可以对识别效果差的图片进行分析,进而确定是哪个模块存在问题,并参考以下表格中对应的微调教程链接进行模型微调。

情形 微调模块 微调参考链接
公式存在漏检 版面区域检测模块 链接
公式内容不准 公式识别模块 链接
整图旋转矫正不准 文档图像方向分类模块 链接
图像扭曲矫正不准 文本图像矫正模块 暂不支持微调

4.2 模型应用

当您使用私有数据集完成微调训练后,可获得本地模型权重文件。

若您需要使用微调后的模型权重,只需对产线配置文件做修改,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可:

...
SubModules:
  LayoutDetection:
    module_name: layout_detection
    model_name: PP-DocLayout-L
    model_dir: null # 替换为微调后的版面区域检测模型权重路径
...

  FormulaRecognition:
    module_name: formula_recognition
    model_name: PP-FormulaNet-L
    model_dir: null # 替换为微调后的公式识别模型权重路径
    batch_size: 5

SubPipelines:
  DocPreprocessor:
    pipeline_name: doc_preprocessor
    use_doc_orientation_classify: True
    use_doc_unwarping: True
    SubModules:
      DocOrientationClassify:
        module_name: doc_text_orientation
        model_name: PP-LCNet_x1_0_doc_ori
        model_dir: null # 替换为微调后的文档图像方向分类模型权重路径
        batch_size: 1
...

随后, 参考2. 快速开始中的命令行方式或Python脚本方式,加载修改后的产线配置文件即可。

5. 多硬件支持

PaddleX 支持英伟达 GPU、昆仑芯 XPU、昇腾 NPU和寒武纪 MLU 等多种主流硬件设备,仅需修改 --device参数即可完成不同硬件之间的无缝切换。

例如,您使用昇腾 NPU 进行 公式识别产线的推理,使用的 CLI 命令为:

paddlex --pipeline formula_recognition \
        --input general_formula_recognition_001.png \
        --use_layout_detection True \
        --use_doc_orientation_classify False \
        --use_doc_unwarping False \
        --layout_threshold 0.5 \
        --layout_nms True \
        --layout_unclip_ratio  1.0 \
        --layout_merge_bboxes_mode large \
        --save_path ./output \
        --device npu:0

当然,您也可以在 Python 脚本中 create_pipeline() 时或者 predict() 时指定硬件设备。

若您想在更多种类的硬件上使用公式识别产线,请参考PaddleX多硬件使用指南