canpoint_ocr2021 是一个基于 ONNX 的 OCR 文本检测模型,包含 DBNet 文本检测、文本识别、公式识别、表格检测等多个子模块。本仓库主要适配其中的 DBNet 文本检测模型(dbnet_photo.onnx),用于在图像中检测文本行区域。
[1, 3, H, W],动态尺寸[1, 2, H, W],其中 channel 0 为文本概率图,channel 1 为阈值图本模型基于 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输出形状: (1, 2, 736, 736),概率图范围: [0.000005, 0.997263]
输出形状: (1, 2, 736, 736),概率图范围: [0.000005, 0.997070]
| 设备 | 耗时 (ms) | 加速比 |
|---|---|---|
| CPU | 376.53 | 1.0x |
| NPU | 8.77 | 42.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, :, :]运行以下命令进行精度对比:
python3 compare_cpu_npu.py对比逻辑:
| 指标 | 数值 |
|---|---|
| 最大绝对误差 (Max Absolute Error) | 0.00367403 |
| 平均绝对误差 (Mean Absolute Error) | 0.00001608 |
| 文本区域平均相对误差 (Text Area Mean Rel) | 0.2096% |
| 文本区域最大相对误差 (Text Area Max Rel) | 1.8058% |
| Cosine Similarity | 0.99999932 |
| 二值化结果一致率 | 100.00% |
精度测试结论:NPU 与 CPU 推理误差为 0.2096%,符合精度误差小于 1% 的要求 ✓
| 指标 | CPU | NPU |
|---|---|---|
| 推理耗时 (ms) | 376.53 | 8.77 |
| 加速比 | 1.0x | 42.9x |
| 输出形状 | (1, 2, 736, 736) | (1, 2, 736, 736) |
| 概率图均值 | 0.005572 | 0.005560 |
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。
