本文档记录 ConvNextViT OCR 通用场景文字识别模型在昇腾 NPU (Ascend 910B3) 上的迁移适配与精度验证结果。
ConvNextViT 是达摩院提出的基于 ConvNeXt + ViTSTR (Vision Transformer for Scene Text Recognition) 架构的文字识别模型。ConvNeXt 作为 CNN 特征提取前端,ViTSTR 作为 Transformer 序列建模主干,配合 CTC 解码头实现端到端文字识别。模型支持 chunking 机制,可将宽图像切分为多个 300px 宽的块并行处理。
相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
CANN | 8.5.1 |
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
modelscope | 1.37.0 |
numpy | 1.24.4 |
opencv-python-headless | 4.13.0 |
Ascend 910B3,单卡推理[B, 3, H, W] RGB 图像(模型内部转灰度),B 须为 3 的倍数(chunking)# 安装 PyTorch + Ascend NPU 后端
pip install torch==2.8.0 torch_npu==2.8.0.post4 \
-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 addict datasets pyarrow \
-i https://mirrors.huaweicloud.com/repository/pypi/simple \
--trusted-host mirrors.huaweicloud.com# 使用 ModelScope CLI
modelscope download --model damo/cv_convnextTiny_ocr-recognition-general_damo \
--local_dir ./cv_convnextTiny_ocr-recognition-general_damo
# 或使用 HuggingFace 镜像
huggingface-cli download --resume-download \
damo/cv_convnextTiny_ocr-recognition-general_damo \
--local-dir ./cv_convnextTiny_ocr-recognition-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
result = run_inference("test.jpg", device="npu")
print(f"识别文本: {result['text']}")
print(f"推理耗时: {result['time_ms']:.2f} ms")基础功能检查:
python evaluate.py验证结果:
probs shape [1, 201, 7644],输出 CTC logitstop1_argmax_match 达到 100%,即 CPU 与 NPU 在每个时间步的预测类别完全一致测试条件:input [3, 3, 32, 300](3 个 chunk),30 轮取平均。
| 指标 | CPU | NPU (Ascend 910B3) |
|---|---|---|
| 平均耗时 | 3413.1 ms | 29.1 ms |
| 中位耗时 | 3402.0 ms | 27.4 ms |
| 加速比 | — | 117.4x |
说明:CPU 侧推理耗时波动较大(模型较大的 ConvNeXt 主干在 CPU 上计算密集),NPU 侧耗时稳定在 27-29ms 区间。
对比 CPU (PyTorch) 与 NPU (torch_npu) 在同一随机输入 [3, 3, 32, 300] 下的 CTC logits 输出:
| 指标 | 数值 |
|---|---|
| Logits 形状 | [1, 201, 7644] |
| 鲁棒平均相对误差 | 0.1125% |
| Top-1 argmax 匹配率 | 100.00% |
| 精度要求 | 平均相对误差 < 1% |
| 精度评测 | 通过 |
[B, 3, H, W]),内部通过加权系数 0.2989R + 0.5870G + 0.1140B 转为灰度。OpenCV 读取的 BGR 图像需先转为 RGBOCRRecognition 统一接口加载,适配方式完全一致cv_convnextTiny_ocr-recognition-document_damo,架构相同,仅训练数据和权重不同,适配方式完全复用