z
zkx_/cv_convnextTiny_ocr-recognition-general_damo-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

cv_convnextTiny_ocr-recognition-general_damo on Ascend NPU

1. 简介

本文档记录 ConvNextViT OCR 通用场景文字识别模型在昇腾 NPU (Ascend 910B3) 上的迁移适配与精度验证结果。

ConvNextViT 是达摩院提出的基于 ConvNeXt + ViTSTR (Vision Transformer for Scene Text Recognition) 架构的文字识别模型。ConvNeXt 作为 CNN 特征提取前端,ViTSTR 作为 Transformer 序列建模主干,配合 CTC 解码头实现端到端文字识别。模型支持 chunking 机制,可将宽图像切分为多个 300px 宽的块并行处理。

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-general_damo
  • 权重下载地址(HuggingFace Mirror):https://hf-mirror.com/damo/cv_convnextTiny_ocr-recognition-general_damo

参考文档:

  • https://modelscope.cn/models/damo/cv_convnextTiny_ocr-recognition-general_damo
  • https://www.hiascend.com/document/detail/zh/canncommercial/80RC3/overview/index.html

2. 验证环境

组件版本
CANN8.5.1
torch2.8.0
torch_npu2.8.0.post4
modelscope1.37.0
numpy1.24.4
opencv-python-headless4.13.0
  • NPU:Ascend 910B3,单卡推理
  • 模型大小:约 19.2M 参数,~77MB
  • 输入格式:[B, 3, H, W] RGB 图像(模型内部转灰度),B 须为 3 的倍数(chunking)

3. 推理启动

3.1 环境准备

# 安装 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

3.2 下载模型权重

# 使用 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

3.3 命令行推理

# CPU 推理
python inference.py --image test.jpg --device cpu

# NPU 推理
python inference.py --image test.jpg --device npu

3.4 Python API 调用

from inference import run_inference

result = run_inference("test.jpg", device="npu")
print(f"识别文本: {result['text']}")
print(f"推理耗时: {result['time_ms']:.2f} ms")

4. Smoke 验证

基础功能检查:

python evaluate.py

验证结果:

  • CPU 推理正常返回 probs shape [1, 201, 7644],输出 CTC logits
  • NPU 推理正常返回同 shape 输出
  • top1_argmax_match 达到 100%,即 CPU 与 NPU 在每个时间步的预测类别完全一致
  • 首轮 NPU 推理含算子编译预热(约 10-20s),后续推理稳定

5. 性能参考

测试条件:input [3, 3, 32, 300](3 个 chunk),30 轮取平均。

指标CPUNPU (Ascend 910B3)
平均耗时3413.1 ms29.1 ms
中位耗时3402.0 ms27.4 ms
加速比—117.4x

说明:CPU 侧推理耗时波动较大(模型较大的 ConvNeXt 主干在 CPU 上计算密集),NPU 侧耗时稳定在 27-29ms 区间。

6. 精度评测

6.1 评测方法

对比 CPU (PyTorch) 与 NPU (torch_npu) 在同一随机输入 [3, 3, 32, 300] 下的 CTC logits 输出:

  • 鲁棒平均相对误差(仅统计 |logit| > 0.01 的有效信号值)
  • Top-1 argmax 匹配率(逐时间步预测类别一致性)

6.2 评测结果

指标数值
Logits 形状[1, 201, 7644]
鲁棒平均相对误差0.1125%
Top-1 argmax 匹配率100.00%
精度要求平均相对误差 < 1%
精度评测通过

7. 注意事项

  1. 输入格式:模型期望 RGB 3 通道输入([B, 3, H, W]),内部通过加权系数 0.2989R + 0.5870G + 0.1140B 转为灰度。OpenCV 读取的 BGR 图像需先转为 RGB
  2. Chunking 机制:图像宽度超过 300px 时,自动切分为多个 300px 宽的 chunk 并行处理,batch 维度须为 3 的倍数。不足时自动补零 chunk
  3. 首次推理:首次 NPU 推理会有算子编译开销(约 10-20 秒),后续推理稳定在 ~29ms
  4. 与 LightweightEdge 的区别:本模型使用 ConvNeXt+ViT 架构(19M 参数),比 LightweightEdge(2M 参数)更大但识别精度更高。两款模型均通过 ModelScope OCRRecognition 统一接口加载,适配方式完全一致
  5. 文档版本:同系列还有文档印刷场景模型 cv_convnextTiny_ocr-recognition-document_damo,架构相同,仅训练数据和权重不同,适配方式完全复用