e
gcw_GSiqzzLf/rapid_latex_ocr-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

rapid_latex_ocr-NPU

模型介绍

rapid_latex_ocr 是一个基于 ONNX 的轻量级 LaTeX 公式识别模型,能够将数学公式图片转换为 LaTeX 代码。该模型由 Memect 提供,基于 RapidAI/RapidLaTeXOCR 项目。

  • 原始模型地址: https://www.modelscope.cn/models/Memect/rapid_latex_ocr
  • 任务类型: OCR 公式识别(LaTeX 代码生成)
  • 模型框架: ONNX(3 个子模型)
  • 输入格式: 灰度图像(动态尺寸,最大 672×192,最小 32×32)
  • 输出格式: LaTeX 文本字符串

模型组成

rapid_latex_ocr 由 3 个 ONNX 子模型组成流水线:

子模型文件大小功能
Image Resizerimage_resizer.onnx39MB自适应图像尺寸调整(21 种宽度类别)
Encoderencoder.onnx89MB图像编码器(CNN),提取视觉特征
Decoderdecoder.onnx51MBTransformer 解码器(自回归),生成 LaTeX 序列

环境准备

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

# NPU 推理需要 CANNExecutionProvider(随 onnxruntime 预装)

NPU 适配说明

适配状态:✅ 成功

适配方式

使用 ONNX Runtime 的 CANNExecutionProvider 在昇腾 NPU 上直接运行 ONNX 模型,无需转换为其他格式。

所有 3 个子模型(image_resizer、encoder、decoder)均可在 NPU 上运行。模型包含 Einsum(多头注意力)、MatMul、Conv、BatchNormalization、LayerNormalization 等操作,CANN 均支持。

推理命令

# CPU 推理
python3 inference.py test_formula.png --device cpu

# NPU 推理
python3 inference.py test_formula.png --device npu

推理结果

测试图片 1: test_formula.png

项目结果
LaTeX 输出\mathbf{\hat{t}}:\mathbb{P}(t)
CPU 耗时0.67s
NPU 耗时0.35s

测试图片 2: test_formula2.png

项目结果
LaTeX 输出`\scriptstyle y;z;[;z;];y_{1}
CPU 耗时1.89s
NPU 耗时1.67s

精度测试

使用 compare_cpu_npu.py 进行 CPU 与 NPU 的逐层精度对比。

测试方法

  1. 使用相同预处理获取输入图像
  2. 分别在 CPU(CPUExecutionProvider)和 NPU(CANNExecutionProvider)上运行相同的 ONNX 模型
  3. 对比编码器(Encoder)输出的特征向量
  4. 对比解码器(Decoder)输出的 logits
  5. 对比最终生成的 LaTeX 文本

精度测试结果

测试项CPUNPU最大误差结论
Encoder 输出范围[-0.9258, 1.5790][-0.9258, 1.5790]0.0000000000bit-exact
Decoder 输出范围[-13.9156, 24.2553][-13.9156, 24.2553]0.0000000000bit-exact
测试图片 1 LaTeX\mathbf{\hat{t}}:\mathbb{P}(t)\mathbf{\hat{t}}:\mathbb{P}(t)完全一致✅
测试图片 2 LaTeX\scriptstyle y\;z\;...\scriptstyle y\;z\;...完全一致✅

精度测试结论

NPU 与 CPU 推理结果误差 < 1%。

编码器和解码器的输出在 CPU 和 NPU 上均为 bit-exact(完全一致),最终生成的 LaTeX 文本也完全相同。CANNExecutionProvider 在昇腾 NPU 上提供了与 CPU 完全一致的数值计算结果。

性能对比

测试图片CPU 耗时NPU 耗时加速比
test_formula.png0.67s0.35s1.91x
test_formula2.png1.89s1.67s1.13x

NPU 推理在简单公式上有明显加速(约 1.9x),在复杂公式上也有一定提升(约 1.1x)。

模型文件结构

rapid_latex_ocr/
├── inference.py              # CPU/NPU 推理脚本
├── compare_cpu_npu.py        # CPU/NPU 精度对比脚本
├── requirements.txt          # Python 依赖
├── README.md                 # 本文件
├── test_formula.png          # 测试图片 1
├── test_formula2.png         # 测试图片 2
└── screenshot.png            # 运行截图

技术细节

流水线流程

  1. 图像预处理: 加载图像 → alpha 通道处理 → 自适应填充(32 对齐)→ 缩放到 672×192 以内 → 灰度化 → 归一化(mean=0.7931, std=0.1738)→ 转置为 (1, 1, H, W)
  2. 自适应尺寸调整 (loop_image_resizer): 迭代调用 Resizer 模型(21 类分类器)寻找最佳宽度
  3. 编码 (Encoder): CNN 编码器提取图像特征 → (1, H', W', 256) 上下文向量
  4. 解码 (Decoder): Transformer 解码器自回归生成 token → Tokenizer 解码为 LaTeX 文本

CANN EP 说明

ONNX Runtime 的 CANNExecutionProvider 利用昇腾 Ascend910 NPU 进行硬件加速推理。它直接解析 ONNX 图并将算子映射到 CANN 算子。本模型中的所有算子(包括 Einsum 多头注意力)均被 CANN 支持。

资源需求

  • NPU: Ascend910(单卡即可)
  • CPU: 建议 4 核以上
  • 内存: 建议 4GB 以上
  • 磁盘: 模型文件约 180MB

资源释放

每个模型测试完成后释放 NPU 显存:

import torch
torch.npu.empty_cache()

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。

模型标签

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

许可证

Apache License 2.0