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

paddleocr_classifier_onnx-npu

模型介绍

paddleocr_classifier_onnx 是一个基于 ONNX 的 PaddleOCR 图像二分类模型,用于在 OCR 流水线中对文本图像进行分类(如方向分类、文本质量分类等)。模型输入为 RGB 图像,输出为 2 个类别的概率分布。

原始模型地址

  • ModelScope: https://www.modelscope.cn/models/chunquansang/paddleocr_classifier_onnx/files

任务类型

  • OCR 图像分类(Image Classification)

模型框架

  • ONNX(PaddlePaddle 导出)

输入格式

  • 图像:RGB 格式,shape [batch, 3, height, width],动态尺寸

输出格式

  • Logits:shape [batch, 2],对应 2 个类别的未归一化分数

依赖环境

  • 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/paddleocr_classifier_onnx
python3 inference.py

# 运行精度对比
python3 compare_cpu_npu.py

推理结果

CPU 推理输出

预测类别: 0,Logits: [0.942065, 0.057935]

NPU 推理输出

预测类别: 0,Logits: [0.936035, 0.064209]

推理耗时对比

设备耗时 (ms)加速比
CPU1.711.0x
NPU0.553.1x

部署和推理方法

核心代码:

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

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

# 预处理图像
img = Image.open(image_path).convert("RGB").resize((192, 48))
img_array = np.array(img, dtype=np.float32).transpose(2, 0, 1)
img_array = (img_array / 255.0 - 0.5) / 0.5
img_array = img_array[np.newaxis, :].astype(np.float32)

# 推理
outputs = session.run(["softmax_0.tmp_0"], {"x": img_array})
probs = outputs[0]
pred_class = int(np.argmax(probs, axis=1)[0])

CPU/NPU 精度测试方法

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

python3 compare_cpu_npu.py

对比逻辑:

  1. 分别使用 CPUExecutionProvider 和 CANNExecutionProvider 加载模型
  2. 对同一张测试图像进行推理
  3. 比较 CPU 和 NPU 的 logits 输出、softmax 概率和分类结果
  4. 计算 logits 的绝对误差、相对误差、余弦相似度

CPU/NPU 精度测试结果

指标数值
Logits 最大绝对误差0.00627352
Logits 平均绝对误差0.00615144
概率最大绝对误差0.00255159
概率平均绝对误差0.00255157
Cosine Similarity0.99997502
CPU 预测类别0
NPU 预测类别0
分类结果一致✓

精度测试结论:NPU 与 CPU 推理误差为 0.26%(基于概率平均绝对误差),符合精度误差小于 1% 的要求 ✓

性能测试结果

指标CPUNPU
推理耗时 (ms)1.710.55
加速比1.0x3.1x
预测类别00
输出形状(1, 2)(1, 2)

推理成功证据

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

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

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

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

模型标签

  • #+NPU
  • #+CV
  • #+OCR
  • #+图像分类
  • #+PaddleOCR
  • #+昇腾
  • #+ONNX

截图

推理截图

下载使用量0