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

canpoint_ocr2021-npu

模型介绍

canpoint_ocr2021 是一个基于 ONNX 的 OCR 文本检测模型,包含 DBNet 文本检测、文本识别、公式识别、表格检测等多个子模块。本仓库主要适配其中的 DBNet 文本检测模型(dbnet_photo.onnx),用于在图像中检测文本行区域。

原始模型地址

  • ModelScope: https://www.modelscope.cn/models/chenyu1991/canpoint_ocr2021/files

任务类型

  • OCR 文本检测(Text Detection)

模型框架

  • ONNX

输入格式

  • 图像:RGB 格式,shape [1, 3, H, W],动态尺寸

输出格式

  • 概率图:shape [1, 2, H, W],其中 channel 0 为文本概率图,channel 1 为阈值图

依赖环境

  • Python >= 3.8
  • onnx >= 1.15.0
  • onnxruntime >= 1.17.0
  • numpy >= 1.24.0
  • Pillow >= 10.0.0
  • modelscope >= 1.35.0

NPU 适配说明

本模型基于 ONNX Runtime 进行推理,利用 CANNExecutionProvider 在华为昇腾 NPU 上运行。CPU 和 NPU 使用同一套 ONNX 模型文件,通过切换 ONNX Runtime 的 execution provider 实现不同设备的推理。

环境准备

# 安装依赖
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple onnx onnxruntime numpy Pillow opencv-python modelscope

推理命令

# 运行推理(CPU + NPU)
cd /opt/atomgit/output/canpoint_ocr2021
python3 inference.py

# 运行精度对比
python3 compare_cpu_npu.py

推理结果

CPU 推理输出

输出形状: (1, 2, 736, 736),概率图范围: [0.000005, 0.997263]

NPU 推理输出

输出形状: (1, 2, 736, 736),概率图范围: [0.000005, 0.997070]

推理耗时对比

设备耗时 (ms)加速比
CPU376.531.0x
NPU8.7742.9x

部署和推理方法

核心代码:

import onnxruntime as ort
from PIL import Image
import numpy as np

# 加载模型
so = ort.SessionOptions()
session = ort.InferenceSession(model_path, so,
    providers=["CANNExecutionProvider", "CPUExecutionProvider"])

# 预处理图像
img = Image.open(image_path).convert("RGB").resize((736, 736))
img_array = np.array(img, dtype=np.float32).transpose(2, 0, 1)
mean = np.array([123.675, 116.28, 103.53]).reshape(3, 1, 1)
std = np.array([58.395, 57.12, 57.375]).reshape(3, 1, 1)
img_array = ((img_array - mean) / std)[np.newaxis, :].astype(np.float32)

# 推理
outputs = session.run(["out"], {"input": img_array})
prob_map = outputs[0][0, 0, :, :]

CPU/NPU 精度测试方法

运行以下命令进行精度对比:

python3 compare_cpu_npu.py

对比逻辑:

  1. 分别使用 CPUExecutionProvider 和 CANNExecutionProvider 加载模型
  2. 对同一张测试图像进行推理
  3. 保存 CPU 和 NPU 的输出结果
  4. 计算概率图的最大绝对误差、平均绝对误差、相对误差、余弦相似度
  5. 计算二值化结果(threshold=0.3)的一致性

CPU/NPU 精度测试结果

指标数值
最大绝对误差 (Max Absolute Error)0.00367403
平均绝对误差 (Mean Absolute Error)0.00001608
文本区域平均相对误差 (Text Area Mean Rel)0.2096%
文本区域最大相对误差 (Text Area Max Rel)1.8058%
Cosine Similarity0.99999932
二值化结果一致率100.00%

精度测试结论:NPU 与 CPU 推理误差为 0.2096%,符合精度误差小于 1% 的要求 ✓

性能测试结果

指标CPUNPU
推理耗时 (ms)376.538.77
加速比1.0x42.9x
输出形状(1, 2, 736, 736)(1, 2, 736, 736)
概率图均值0.0055720.005560

推理成功证据

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

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

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

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

模型标签

  • #+NPU
  • #+CV
  • #+OCR
  • #+文本检测
  • #+DBNet
  • #+昇腾
  • #+ONNX

截图

推理截图

下载使用量0