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

UVDoc-ONNX 昇腾 NPU 适配

模型介绍

UVDoc 是一款基于 ONNX 的文档图像文字检测(OCR Detection)模型,能够从文档图像中检测出文字区域。

原始模型地址

  • ModelScope: Liyulingyue/UVDoc-ONNX

任务类型

文字检测(OCR Detection) — 图像分割型任务

模型框架

  • 框架: ONNX
  • 模型文件: inference.onnx (30.2 MB)
  • 输入: 图像 (image),形状 [batch, 3, H, W],类型 float32
  • 输出: 分割特征图 (fetch_name_0),形状 [batch, 3, H, W],类型 float32

输入格式

  • 图像: 3通道 RGB 图像, 需 Resize 到 [256, 128]
  • 归一化: 除以 255, ImageNet 均值标准差归一化 (mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225])
  • 数据排布: NCHW

输出格式

  • 3通道分割特征图,通道数对应不同类别的置信度
  • 通过 argmax 取类别索引生成二值化文字区域掩码

依赖环境

  • Python 3.8+
  • onnxruntime (CPU 推理)
  • numpy
  • Pillow
  • Ascend CANN 8.5.1 (NPU 推理)
  • 昇腾 910 NPU

NPU 适配说明

本模型已通过以下步骤完成昇腾 NPU 适配:

  1. 使用 ATC (Ascend Tensor Compiler) 将 ONNX 模型转换为 OM 格式
  2. 使用 AscendCL (C++ API via ctypes) 在 NPU 上加载并执行模型
  3. CPU 与 NPU 推理结果对比验证精度

环境准备

安装依赖

pip install onnxruntime numpy Pillow

模型转换 (ONNX → OM)

# 设置环境变量
export ASCEND_LOG_PATH=/tmp/ascend_log
mkdir -p $ASCEND_LOG_PATH

# 转换模型
atc --model=inference.onnx \
    --output=uvdoc \
    --input_shape="image:1,3,256,128" \
    --soc_version=Ascend910_9362 \
    --framework=5

推理命令

CPU 推理

python inference.py --mode cpu --image test_input.jpg --output ./results_cpu

NPU 推理

python inference.py --mode npu --image test_input.jpg --output ./results_npu

推理结果

使用包含中文和英文文本的测试图像进行推理:

指标CPUNPU
推理耗时493.63 ms0.96 ms
加速比1x514x
输出最小值-1.2232-1.2881
输出最大值2.64002.6406
输出平均值2.40702.4066

部署和推理方法

详见 inference.py,支持 CPU 和 NPU 两种运行模式:

# CPU 推理
from inference import run_cpu
output, elapsed = run_cpu("input.jpg", "model.onnx", "./results")

# NPU 推理
from inference import run_npu
output, elapsed = run_npu("input.jpg", "model.om", "./results")

CPU/NPU 精度测试方法

  1. 分别使用 CPU (ONNX Runtime) 和 NPU (AscendCL) 对同一张测试图像进行推理
  2. 保存两个平台的原始输出张量 (.npy)
  3. 使用 compare_cpu_npu.py 计算各项精度指标
python compare_cpu_npu.py \
    --cpu_output ./results_cpu/cpu_output_raw.npy \
    --npu_output ./results_npu/npu_output_raw.npy

CPU/NPU 精度测试结果

指标数值
CPU 最小值-1.223240
CPU 最大值2.640000
CPU 平均值2.407012
NPU 最小值-1.288086
NPU 最大值2.640625
NPU 平均值2.406597
MAE (平均绝对误差)0.001822
Max AE (最大绝对误差)0.391097
RMSE (均方根误差)0.010197
平均相对误差0.15%
余弦相似度0.999991
相对误差 < 1% 比例98.37%
相对误差 < 5% 比例99.43%
分割掩码一致率100.00%

精度测试结论:NPU 与 CPU 推理平均相对误差为 0.15%,符合精度误差小于 1% 的要求。

性能测试结果

硬件耗时 (ms)加速比
CPU (ONNX Runtime)493.63 ms1x
NPU (Ascend 910)0.96 ms514x

NPU 推理速度相比 CPU 提升约 514 倍,性能提升显著。

运行截图

推理截图

推理成功证据

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

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

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

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

模型标签

  • #+NPU
  • #+OCR
  • #+文字检测
  • #+CV
  • #+昇腾
  • #+ONNX
  • #+文档分析