g
gcw_AVRCax4T/simple_symbol_det
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

simple_symbol_det — 昇腾 NPU 适配版

基于 csg800/simple_symbol_det 的华为昇腾(Ascend)NPU 适配推理方案。原模型是一个基于 DBNet 架构的英文字母、数字、标点符号、数学符号、拼音、音标与 Emoji 检测模型,使用四千余种字体与随机背景合成数据集训练而成。本仓库提供其在 Ascend 910 NPU 上的完整推理脚本、精度验证与性能基准。

模型信息

项目说明
原始模型csg800/simple_symbol_det
架构DBNet (Differentiable Binarization Network)
输入单通道灰度图 (1, H, W),[0, 1] 归一化,固定 640×640
输出概率图 (H, W),Sigmoid 激活
原始框架PyTorch → ONNX (opset 16)
适配框架ONNX → onnx2torch → torch_npu
任务类型OCR 文字检测 / 符号检测
许可证Apache 2.0

环境要求

组件版本要求备注
NPU 硬件Ascend 910B / 910B2 / Atlas 800T A2 及以上本验证基于 Ascend 910 (Ascend910_9362)
CANN≥ 8.0.RC1本验证使用 CANN 8.5.1
Python≥ 3.10本验证使用 3.11
torch≥ 2.1需配合 torch_npu
torch_npu≥ 2.1Ascend NPU PyTorch 插件
onnx≥ 1.14ONNX 模型解析
onnx2torch≥ 1.5ONNX → PyTorch 模型转换
opencv-python≥ 4.5图像预处理与后处理
# 安装依赖
pip install torch torch_npu onnx onnx2torch opencv-python modelscope

快速开始

1. 下载模型

pip install modelscope
modelscope download --model csg800/simple_symbol_det

2. NPU 推理

# 单图推理(NPU)
python inference.py --image test_image.png --device npu --output result.png

# 单图推理(CPU,精度对照)
python inference.py --image test_image.png --device cpu --output result_cpu.png

# 性能基准测试
python inference.py --benchmark --device npu

# 详细输出模式
python inference.py --image test_image.png --device npu -v

3. Python API

import cv2
from inference import load_model, detect, draw_boxes, get_default_onnx_path

# 加载模型到 NPU
model = load_model(get_default_onnx_path(), device="npu:0")

# 读图并推理
image = cv2.imread("your_image.png")
boxes, prob_map = detect(image, model, device="npu:0", threshold=0.3)

# 可视化
vis = draw_boxes(image, boxes)
cv2.imwrite("output.png", vis)
print(f"检测到 {len(boxes)} 个文字区域")

精度验证

在 6 种不同输入尺寸和随机种子下,NPU 与 CPU 推理输出的精度对比:

测试配置平均相对误差最大绝对误差余弦相似度结论
(1,1,640,640) seed=420.1920%0.002971.00000016PASS
(1,1,640,640) seed=1230.2254%0.003870.99999942PASS
(2,1,640,640) seed=70.2097%0.003970.99999841PASS
(4,1,320,320) seed=990.1698%0.002560.99999948PASS
(1,1,1280,704) seed=550.1855%0.002960.99999945PASS
(1,1,1024,1024) seed=770.2013%0.002990.99999970PASS

平均相对误差: 0.1973%,所有测试用例均满足精度要求(误差 < 1%),99.9% 以上像素的相对误差 < 1%。

运行精度验证:

python eval_precision.py

性能基准

在 Ascend 910 (Ascend910_9362) 上,不同 Batch Size 下的推理性能:

配置CPU 延迟 (ms)NPU 延迟 (ms)加速比NPU 吞吐 (FPS)
batch1_640x640865.836.68129.70x149.80
batch2_640x6401918.058.36229.55x119.68
batch4_640x6405238.7827.68189.29x36.13
batch1_320x320308.0813.6422.59x73.32

平均加速比: 142.78x。单图推理(640×640)NPU 延迟仅 6.68ms,吞吐约 150 FPS。

运行性能基准:

python eval_performance.py

交付件清单

文件说明
inference.pyNPU 推理主脚本,支持单图推理与性能基准
eval_precision.pyNPU vs CPU 精度验证脚本
eval_performance.pyNPU vs CPU 性能基准脚本
precision_report.json精度验证报告(JSON)
performance_report.json性能基准报告(JSON)
README.md本部署文档

适配说明

本模型适配方案采用 ONNX → PyTorch 图转换 + torch_npu 后端 的技术路线:

  1. 模型格式转换:使用 onnx2torch 将原始 ONNX 模型转换为 PyTorch FX GraphModule
  2. NPU 后端适配:将转换后的 PyTorch 模型通过 .to("npu:0") 加载至 Ascend NPU
  3. 精度保证:NPU 原生支持模型中的所有算子(Conv、BatchNorm、HardSigmoid、HardSwish、Resize 等),无需自定义算子适配
  4. 自动图优化:CANN 编译器自动进行算子融合与内存优化

适配过程中无需修改原始模型结构或权重,转换后模型在 NPU 上的输出与 CPU 参考输出高度一致。

注意事项

  • 输入图像会被缩放至 640×640,建议输入尺寸为 32 的倍数以保证上下采样维度对齐
  • 概率图二值化阈值默认为 0.3,可根据实际场景在 0.1~0.5 之间调整
  • 最小检测框面积默认 32 像素,可过滤小噪声
  • 首次 NPU 推理时 CANN 会进行图编译,耗时较长(约 10~60 秒),后续推理正常

致谢

  • 原始模型作者:csg800
  • 昇腾 NPU 适配与评测:基于 Ascend 910 + CANN 8.5.1