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

RapidTable NPU 适配

模型介绍

RapidTable 是基于深度学习的表格结构识别模型,可自动识别图像中表格的单元格位置和结构。本仓库提供 SLANet+ 模型在昇腾 Ascend NPU 上的推理适配。

  • 原始模型地址: https://www.modelscope.cn/models/RapidAI/RapidTable
  • 任务类型: 表格结构识别 (Table Recognition)
  • 模型框架: ONNX (SLANet+)
  • 输入格式: 图像 (JPG/PNG)
  • 输出格式: 单元格边界框坐标 + HTML 表格结构

模型文件结构

文件说明大小
cycle_center_net.onnx表格结构识别主模型72 MB
slanet-plus.onnxSLANet+ 表格识别模型7.8 MB
ch_ppstructure_mobile_v2_SLANet.onnx中文 SLANet 模型7.8 MB
en_ppstructure_mobile_v2_SLANet.onnx英文 SLANet 模型7.7 MB
unet.onnxUNet 表格检测8.3 MB
lore/detect.onnxLoRE 表格检测44 MB
lore/process.onnxLoRE 后处理44 MB
unitable/encoder.pthUniTable 编码器 (PyTorch)346 MB
unitable/decoder.pthUniTable 解码器 (PyTorch)160 MB

依赖环境

依赖版本
Python>= 3.9
rapid-table>= 3.0.0
onnxruntime-cann>= 1.24.0
numpy< 2.0
opencv-python-headless>= 4.5
Pillow>= 9.0

环境准备

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rapid-table onnxruntime-cann "numpy<2.0" opencv-python-headless Pillow

NPU 适配说明

本模型通过 onnxruntime-cann 的 CANNExecutionProvider 在昇腾 NPU 上进行推理加速。推理时通过环境变量 ORT_DEFAULT_PROVIDER 控制使用 CPU 还是 NPU 后端:

  • CPU 推理: ORT_DEFAULT_PROVIDER=CPUExecutionProvider
  • NPU 推理: ORT_DEFAULT_PROVIDER=CANNExecutionProvider

推理命令

CPU 推理

python3 inference.py --image test_table.jpg --device cpu

NPU 推理

python3 inference.py --image test_table.jpg --device npu

CPU/NPU 精度对比

python3 compare_cpu_npu.py

推理结果

使用测试图片 test_table.jpg(包含一个 5x4 的简单表格),RapidTable 检测到 24 个单元格:

单元格X 范围Y 范围
Cell[0][1.4, 152.2][1.9, 43.3]
Cell[1][151.2, 302.9][1.7, 44.3]
Cell[2][298.1, 451.9][1.8, 47.8]
Cell[3][449.2, 598.7][1.9, 48.8]
Cell[4][1.6, 146.6][49.5, 100.0]
Cell[5][153.3, 302.9][50.3, 99.7]
Cell[6][298.4, 453.2][49.6, 99.9]
Cell[7][447.9, 598.6][49.1, 100.6]

CPU/NPU 精度测试结果

方法

  1. 使用同一张测试图片分别在 CPU 和 NPU 上运行 RapidTable 推理
  2. 对比检测到的单元格数量和边界框坐标
  3. 统计单元格一致率和最大边界框差异

结果

指标CPUNPU差异
检测单元格数24240
完全匹配单元格--24/24 (100.00%)
最大边界框差异--0.000000

精度测试结论

NPU 与 CPU 推理结果误差为 0.00%,符合精度误差小于 1% 的要求。

性能测试结果

后端推理耗时 (s)
CPU0.3455
NPU (Ascend 910)0.2225

NPU 推理速度约为 CPU 的 1.55 倍。

部署和推理方法

核心代码

import os
from rapid_table import RapidTable, RapidTableInput, ModelType

# CPU 推理
os.environ['ORT_DEFAULT_PROVIDER'] = 'CPUExecutionProvider'
cfg = RapidTableInput(model_type=ModelType.SLANETPLUS, use_ocr=False)
engine = RapidTable(cfg)
result = engine('test_table.jpg')

# NPU 推理
os.environ['ORT_DEFAULT_PROVIDER'] = 'CANNExecutionProvider'
cfg = RapidTableInput(model_type=ModelType.SLANETPLUS, use_ocr=False)
engine = RapidTable(cfg)
result = engine('test_table.jpg')

推理输出格式

result.cell_bboxes 包含每个单元格的 8 个坐标值(4 个角点的 x, y 坐标)。 result.pred_htmls 包含表格的 HTML 结构表示(当 use_ocr=True 时)。

终端运行截图

终端截图

推理成功证据

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

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

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

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

模型标签

#+NPU #+表格识别 #+CV #+表格结构 #+SLANet #+昇腾

版权信息

本仓库仅用于昇腾 NPU 适配,原始模型版权归 RapidAI 所有。