PP-FormulaNet_plus-M 是一个基于 PaddlePaddle 的公式识别模型,能够将数学公式图片转换为 LaTeX 代码。该模型由 Memect 提供,支持印刷体和手写体公式的识别。
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该 ONNX 模型包含 Loop 操作,这是 ONNX 中用于实现自回归解码的控制流操作。CANN 工具链暂不支持 Loop 操作类型的解析和转换。
具体来说,模型的 Loop 子图包含 1743 个节点,用于实现自回归解码器,其中包括:
| 方案 | 结果 |
|---|---|
| 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 模型。
由于 NPU 适配失败,当前仅支持 CPU 推理。
python3 inference.py test_formula.pngInput shape: (1, 1, 384, 384)
Processing: test_formula.png
LaTeX result: \cdot
Inference time: 1.2440sProcessing: test_formula2.png
LaTeX result: \begin{aligned} &\left[ \begin{aligned}...
Inference time: 127.8141s注:对于复杂公式,模型的自回归解码器可能会生成较长序列,导致推理时间较长。第二个测试图片产生了约 2561 个 token 的输出。
由于 NPU 推理不可用,无法进行 CPU/NPU 精度对比。
| 测试图片 | CPU 推理结果 | CPU 推理耗时 | NPU 推理 |
|---|---|---|---|
| test_formula.png | \cdot | 0.7843s | ❌ 不可用 |
| test_formula2.png | \begin{aligned}... | 127.8141s | ❌ 不可用 |
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 解析器的已知限制。
#+NPU #+OCR #+公式识别 #+LaTeX #+CV #+昇腾
Apache License 2.0