UVDoc 是一款基于 ONNX 的文档图像文字检测(OCR Detection)模型,能够从文档图像中检测出文字区域。
文字检测(OCR Detection) — 图像分割型任务
inference.onnx (30.2 MB)image),形状 [batch, 3, H, W],类型 float32fetch_name_0),形状 [batch, 3, H, W],类型 float32[256, 128]NCHW本模型已通过以下步骤完成昇腾 NPU 适配:
pip install onnxruntime numpy Pillow# 设置环境变量
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=5python inference.py --mode cpu --image test_input.jpg --output ./results_cpupython inference.py --mode npu --image test_input.jpg --output ./results_npu使用包含中文和英文文本的测试图像进行推理:
| 指标 | CPU | NPU |
|---|---|---|
| 推理耗时 | 493.63 ms | 0.96 ms |
| 加速比 | 1x | 514x |
| 输出最小值 | -1.2232 | -1.2881 |
| 输出最大值 | 2.6400 | 2.6406 |
| 输出平均值 | 2.4070 | 2.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").npy)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 最小值 | -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 ms | 1x |
| NPU (Ascend 910) | 0.96 ms | 514x |
NPU 推理速度相比 CPU 提升约 514 倍,性能提升显著。

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。