e
gcw_GSiqzzLf/PP-FormulaNet_plus-M_infer-npu
模型介绍文件和版本Pull Requests讨论分析

PP-FormulaNet_plus-M_infer-NPU

模型介绍

PP-FormulaNet_plus-M 是一个基于 PaddlePaddle 的公式识别模型,能够将数学公式图片转换为 LaTeX 代码。该模型由 Memect 提供,支持印刷体和手写体公式的识别。

  • 原始模型地址: https://www.modelscope.cn/models/Memect/PP-FormulaNet_plus-M_infer
  • 任务类型: OCR 公式识别(ocr-recognition)
  • 模型框架: ONNX(从 PaddlePaddle 导出)
  • 输入格式: 图像 (N, 1, 384, 384),灰度图,float32
  • 输出格式: LaTeX 文本序列(token ID 序列,int64)

模型文件结构

PP-FormulaNet_plus-M_infer/
├── inference.onnx          # FP32 模型(592MB)
├── inference_int8.onnx     # INT8 量化模型(437MB)
├── inference.yml           # 推理配置文件(含 tokenizer)
├── configuration.json      # 框架和任务配置
└── README.md               # 模型卡片

环境准备

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple onnxruntime numpy Pillow pyyaml tokenizers

NPU 适配说明

适配状态:❌ 失败

失败原因

该 ONNX 模型包含 Loop 操作,这是 ONNX 中用于实现自回归解码的控制流操作。CANN 工具链暂不支持 Loop 操作类型的解析和转换。

具体来说,模型的 Loop 子图包含 1743 个节点,用于实现自回归解码器,其中包括:

  • 74 个 MatMul 操作
  • 20 个 LayerNormalization 操作
  • 12 个 Softmax 操作
  • 8 个 If 条件分支操作
  • 其他辅助操作(Reshape、Concat、Transpose、Gather 等)

尝试过的方案

方案结果
CANNExecutionProvider (ONNX Runtime)❌ ge::aclgrphParseONNXFromMem 解析失败
ATC(Ascend Tensor Compiler)❌ Loop op 无法识别
onnx2torch 转换❌ 不支持 Loop 操作
CANN EP + INT8 模型❌ 同样因 Loop 解析失败

技术细节

CANN 的 ONNX 解析器(aclgrphParseONNXFromMem)在加载模型时会解析整个计算图。当遇到 Loop 操作时,解析器无法识别该操作类型,导致整个模型加载失败。这是 CANN 工具链的已知限制,目前版本(CANN 8.5.1)不支持包含控制流操作(Loop、If)的 ONNX 模型。

CPU 推理

由于 NPU 适配失败,当前仅支持 CPU 推理。

推理命令

python3 inference.py test_formula.png

推理结果示例

测试图片 1: test_formula.png(简单公式)

Input shape: (1, 1, 384, 384)
Processing: test_formula.png
LaTeX result: \cdot
Inference time: 1.2440s

测试图片 2: test_formula2.png(复杂公式)

Processing: test_formula2.png
LaTeX result: \begin{aligned} &\left[ \begin{aligned}...
Inference time: 127.8141s

注:对于复杂公式,模型的自回归解码器可能会生成较长序列,导致推理时间较长。第二个测试图片产生了约 2561 个 token 的输出。

精度测试

由于 NPU 推理不可用,无法进行 CPU/NPU 精度对比。

CPU 推理结果

测试图片CPU 推理结果CPU 推理耗时NPU 推理
test_formula.png\cdot0.7843s❌ 不可用
test_formula2.png\begin{aligned}...127.8141s❌ 不可用

NPU 适配失败原因总结

PP-FormulaNet_plus-M_infer 模型是由 PaddlePaddle 导出的 ONNX 模型,其自回归解码器使用了 ONNX 的 Loop 操作来实现序列生成。CANN 工具链(包括 ONNX Runtime CANNExecutionProvider 和 ATC)均不支持 Loop 操作的解析和转换。将模型转换为 PyTorch(via onnx2torch)也因缺少 Loop 转换器而失败。

核心问题: CANN 8.5.1 不支持包含控制流操作(Loop、If)的 ONNX 模型。这是 CANN ONNX 解析器的已知限制。

资源需求

  • CPU: 建议 4 核以上
  • 内存: 建议 8GB 以上(模型加载需约 2GB)
  • 磁盘: 模型文件约 1GB(含 FP32 和 INT8 版本)

模型标签

#+NPU #+OCR #+公式识别 #+LaTeX #+CV #+昇腾

许可证

Apache License 2.0

下载使用量0