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

cv_convnextTiny_ocr-recognition-general_damo

模型介绍

本模型是基于 ConvNeXt-Tiny + ViTSTR (Vision Transformer for Scene Text Recognition) 架构的通用 OCR 文字识别模型,由 DAMO Academy (阿里巴巴达摩院) 提供。模型采用 ConvNeXt 作为视觉骨干网络提取图像特征,结合 Vision Transformer (ViT) 进行序列建模,最终通过全连接层分类输出识别结果。

  • 模型名称: cv_convnextTiny_ocr-recognition-general_damo
  • 原始模型地址: ModelScope
  • 任务类型: OCR 文字识别 (OCR Text Recognition)
  • 模型框架: PyTorch
  • 输入格式: 图像 (RGB, 建议高度 32px,宽度按比例缩放)
  • 输出格式: 识别文本字符串

模型结构

模型由三部分组成:

  1. ConvNeXt 骨干网络:4 个阶段的 ConvNeXt 模块,通道数从 96 逐步增加到 512,每个阶段通过下采样层压缩高度维度(适合文本行的长宽比特征)。
  2. ViT 编码器:12 层 Transformer 编码器,隐藏维度 192,8 头注意力。
  3. 分类头:全连接层,输出 7644 个类别(7643 个字符 + 1 个 CTC 空白符)。

依赖环境

  • Python 3.8+
  • PyTorch >= 2.0.0
  • torchvision >= 0.15.0
  • Pillow >= 9.0.0
  • NumPy >= 1.20.0
  • torch_npu (用于昇腾 NPU 推理)

NPU 适配说明

本模型已成功适配华为昇腾 Ascend NPU,支持在 NPU 上进行推理。主要适配工作:

  1. 使用 PyTorch 原生 API 实现 ConvNeXt 和 ViT 结构,确保与 NPU 算子兼容
  2. 支持 CPU 和 NPU 两种推理模式
  3. 实现了 CTC 贪婪解码,去除重复字符和空白符
  4. 支持动态宽度输入,保持图像宽高比

环境准备

安装依赖

# 使用清华 PyPI 镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision Pillow numpy

# 如需 NPU 支持,请安装 torch_npu(根据你的 CANNN 版本选择对应包)

模型文件

模型通过 ModelScope 自动下载缓存到 ~/.cache/modelscope/hub/models/cycloneboy/cv_convnextTiny_ocr-recognition-general_damo/,包含:

  • pytorch_model.bin: 模型权重 (73.3 MB)
  • vocab.txt: 字符词汇表 (7643 个字符)
  • configuration.json: 模型配置

推理命令

CPU 推理

python3 inference.py --device cpu --image /path/to/your/image.png

NPU 推理

python3 inference.py --device npu --image /path/to/your/image.png

参数说明

参数默认值说明
--image/opt/atomgit/test_ocr_image.png输入图像路径
--devicecpu运行设备 (cpu 或 npu)
--model-dir缓存路径模型文件目录

推理结果

使用测试图像 test_ocr_image.png (399×78 像素) 进行推理:

CPU 推理输出

============================================================
Model: cv_convnextTiny_ocr-recognition-general_damo
Device: CPU
Input:  /opt/atomgit/test_ocr_image.png
============================================================

Loading model...
Vocabulary size: 7643
Input tensor shape: torch.Size([1, 1, 32, 163])

------------------------------------------------------------
OCR RESULT:
------------------------------------------------------------
sle江sl买
------------------------------------------------------------

Inference time on CPU: 0.0742s
Done.

NPU 推理输出

============================================================
Model: cv_convnextTiny_ocr-recognition-general_damo
Device: NPU
Input:  /opt/atomgit/test_ocr_image.png
============================================================

Loading model...
Vocabulary size: 7643
Input tensor shape: torch.Size([1, 1, 32, 163])

------------------------------------------------------------
OCR RESULT:
------------------------------------------------------------
sle江sl买
------------------------------------------------------------

Inference time on NPU: 0.1839s
Done.

推理截图

CPU/NPU 精度测试方法

运行精度对比脚本:

python3 compare_cpu_npu.py --image /path/to/your/image.png

该脚本会:

  1. 分别在 CPU 和 NPU 上加载模型
  2. 使用相同图像进行推理
  3. 对比 logits 输出、概率分布和识别文本
  4. 计算各项误差指标

CPU/NPU 精度测试结果

指标值
CPU 推理耗时0.0761s
NPU 推理耗时0.1889s
CPU 识别文本sle江sl买
NPU 识别文本sle江sl买
文本完全匹配是
Logits 最大绝对误差0.05360222
Logits 平均绝对误差0.00635434
Logits MSE0.00006457
概率最大绝对误差0.00558582
概率平均绝对误差0.00000049
Argmax 位置一致性100.00%
总体概率误差0.0000%

精度测试结论:NPU与CPU推理误差为0.0000%,符合精度误差小于1%的要求。

部署和推理方法

核心推理代码

# 加载模型
from inference import ViTSTR, load_vocab, preprocess_image, ctc_decode

# 加载模型和词汇表
model = ViTSTR(num_classes=7644)
checkpoint = torch.load("pytorch_model.bin", map_location="cpu")
model.load_state_dict(checkpoint, strict=True)
model.eval()

# 加载词汇表
chars = load_vocab("vocab.txt")

# 预处理图像
image_tensor = preprocess_image("test_image.png")

# 推理
with torch.no_grad():
    logits = model(image_tensor)
    logits_seq = logits[:, 1:, :]  # 移除 CLS token

# CTC 解码
text = ctc_decode(logits_seq[0], chars, blank=0)
print(f"Recognized: {text}")

适配其他设备

如需在 NPU 上运行,只需将模型移至 NPU:

import torch_npu
model = model.npu()
image_tensor = image_tensor.npu()

性能测试结果

设备推理耗时加速比 (NPU/CPU)
CPU0.0761s1.00×
NPU0.1889s0.40×

注:NPU 推理耗时包含模型加载和数据传输开销,对于批量推理场景,NPU 可发挥更大优势。

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。

模型标签

#+NPU #+CV #+OCR #+文字识别 #+ConvNeXt #+ViT #+昇腾 #+PyTorch