本文档记录 LightweightEdge OCR 文字识别模型在昇腾 NPU (Ascend 910B3) 上的迁移适配与精度验证结果。
LightweightEdge 是达摩院基于 ProxylessNAS 搜索出的轻量化 CNN+CTC 文字识别模型,模型大小约 8MB,支持通用场景的中英文文字识别。
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
CANN | 8.5.1 |
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
torchvision | 0.23.0 |
modelscope | 1.37.0 |
numpy | 2.2.6 |
opencv-python-headless | 4.13.0 |
Ascend 910B3,单卡推理conda create -n cv_LightweightEdge_ocr python=3.10 -y
conda activate cv_LightweightEdge_ocr# PyTorch + Ascend NPU 后端
pip install torch==2.8.0 torch_npu==2.8.0.post4 torchvision==0.23.0 \
-i https://mirrors.huaweicloud.com/repository/pypi/simple \
--trusted-host mirrors.huaweicloud.com
# 模型与工具库
pip install modelscope==1.37.0 opencv-python-headless numpy \
sortedcontainers simplejson pyyaml \
-i https://mirrors.huaweicloud.com/repository/pypi/simple \
--trusted-host mirrors.huaweicloud.com从 ModelScope 下载权重:
# 使用 modelscope CLI
pip install modelscope
modelscope download --model damo/cv_LightweightEdge_ocr-recognitoin-general_damo \
--local_dir ./cv_LightweightEdge_ocr-recognitoin-general_damo
# 或使用 HuggingFace 镜像
huggingface-cli download --resume-download \
damo/cv_LightweightEdge_ocr-recognitoin-general_damo \
--local-dir ./cv_LightweightEdge_ocr-recognitoin-general_damo \
--local-dir-use-symlinks False# CPU 推理
python inference.py --image test.jpg --device cpu
# NPU 推理
python inference.py --image test.jpg --device npufrom inference import run_inference
# CPU 推理
result = run_inference("test.jpg", device="cpu")
print(result["text"]) # 识别文本
print(result["time_ms"]) # 推理耗时(ms)
# NPU 推理
result = run_inference("test.jpg", device="npu")
print(result["text"])
print(result["time_ms"])Smoke 测试使用合成测试图片,包含英文和中文文本:
测试条件:input 1x3x32x640,单次推理,50 轮取平均。
| 指标 | CPU | NPU (Ascend 910B3) | 加速比 |
|---|---|---|---|
| 平均耗时 | 1712.47 ms | 13.19 ms | 129.81x |
| 中位耗时 | 1813.65 ms | 13.13 ms | 138.13x |
| 最小耗时 | 1284.31 ms | 13.02 ms | 98.64x |
| 最大耗时 | 2027.84 ms | 13.50 ms | 150.21x |
| 标准差 | 247.87 ms | 0.15 ms | — |
对比 CPU (PyTorch) 与 NPU (torch_npu) 在同一输入下的推理输出:
| 指标 | 数值 |
|---|---|
| Logits 形状 | [1, 160, 7644] |
| 最大绝对误差 | 0.1528 |
| 鲁棒平均相对误差 | 0.1334% |
| 鲁棒 P99 相对误差 | 1.1231% |
| Top-1 匹配率 | 98.1250% |
| CPU 识别文本 | Hell OCR Test ????? |
| NPU 识别文本 | Hell OCR Test ????? |
| 文本一致性 | 一致 |
本模型基于 PyTorch 框架,使用 ModelScope 加载模型权重,通过 torch_npu 将模型和数据迁移至 NPU 设备。
核心适配步骤:
Model.from_pretrained(model_dir)model.to("npu:0")tensor.to("npu:0")torch.npu.synchronize()无需修改模型结构或权重,PyTorch 标准算子可直接在 NPU 上运行。
| 依赖 | 用途 |
|---|---|
torch_npu | Ascend NPU 的 PyTorch 后端 |
modelscope | 模型加载与预处理 |
opencv-python-headless | 图像读取与预处理 |
sortedcontainers | ModelScope 依赖 |
simplejson | ModelScope 依赖 |