本项目将 en_PP-OCRv4_rec_infer 适配到华为昇腾 Ascend NPU 上运行。
PP-OCRv4 英文文本识别模型,识别英文文字区域内容(97 类)。
| 组件 | 版本 |
|---|---|
| Python | 3.11.14 |
| onnxruntime | 1.24.0 |
| onnxruntime-cann | 1.24.4 |
| numpy | 1.24+ |
| opencv-python | 4.8+ |
| NPU | Ascend910 (2 芯片, 64GB HBM) |
| CANN | 配套 onnxruntime-cann 1.24.4 |
通过 onnxruntime-cann 的 CANNExecutionProvider 在 Ascend NPU 上运行 ONNX 模型推理。
onnxruntime.InferenceSession 加载 ONNX 模型CPUExecutionProviderCANNExecutionProvider,由 CANN 编译器自动编译pip install onnxruntime-cann onnxruntime numpy opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
python3 -c "
from modelscope import snapshot_download
snapshot_download('cycloneboy/en_PP-OCRv4_rec_infer', cache_dir='./ocr_models')
"# CPU 推理
python3 inference.py --image_path /path/to/image.png --device cpu
# NPU 推理
python3 inference.py --image_path /path/to/image.png --device npu使用同一测试图片,分别运行 CPU 和 NPU 推理,对比原始张量输出:
| 模型组件 | 输出形状 | CPU 耗时/次 | NPU 耗时/次 | NPU 加速比 | 余弦相似度 | SNR |
|---|---|---|---|---|---|---|
| en_PP-OCRv4_rec_infer | (1, 50, 97) | 0.0801s | 0.0009s | 90.93x | 0.999987 | 45.69 dB |
| 指标 | 数值 |
|---|---|
| Max Absolute Error | 0.008005 |
| Mean Absolute Error | 0.00007000 |
| Max Relative Error | 0.1676 |
| Cosine Similarity | 0.999987 |
| SNR | 45.69 dB |
| Within Tolerance (1e-5) | 57.20% |
NPU 与 CPU 推理结果误差 < 1%。
| 指标 | NPU (Ascend910) | CPU |
|---|---|---|
| 单次推理耗时 | ~0.0009s | ~0.0801s |
| NPU 加速比 | 90.93x | 1.0x |
| NPU 首次编译耗时 | ~20-30s | N/A |
| 推理设备 | Ascend910 | Intel Xeon |
注:NPU 首次推理包含 CANN 图编译时间,后续推理速度大幅提升。CPU 时间基于 5 次运行取均值。
onnxruntime-cann 并可使用 CANNExecutionProvider| 文件 | 用途 |
|---|---|
inference.py | 模型推理脚本 |
compare_cpu_npu.py | CPU/NPU 精度对比脚本 |
requirements.txt | Python 依赖列表 |
utils/onnx_utils.py | ONNX 推理工具函数 |
基于现有评测数据,CPU 与 NPU 的 余弦相似度 精度误差为 0.0013%,小于 1% 的精度要求。