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

123213 OCR 文本检测模型 - 昇腾 NPU 适配

模型介绍

本模型为基于 CRAFT (Character Region Awareness for Text Detection) 的 OCR 文本检测模型,使用 VGG16BN 作为骨干网络,能够检测图像中的文本区域并输出文本边界框坐标。

  • 任务类型: OCR 文本检测 (OCR Detection)
  • 模型框架: PyTorch
  • 原始模型地址: https://www.modelscope.cn/models/Tonywei/123213

输入输出格式

项目说明
输入格式图像文件(支持 JPG、PNG 等常见格式)
输入尺寸自动缩放至最长边 1280 像素,保持宽高比
输出格式JSON 文件,包含检测到的文本区域边界框坐标
输出内容每个文本区域以 4 个顶点坐标表示的多边形边界框

依赖环境

  • Python 3.8+
  • PyTorch 2.0+
  • torchvision
  • OpenCV
  • NumPy
  • torch_npu(昇腾 NPU 支持)

NPU 适配说明

本模型已适配华为昇腾 Ascend NPU,支持在 CPU 和 NPU 两种设备上运行推理。NPU 适配要点:

  1. 使用 torch_npu 将模型权重加载到昇腾 NPU 设备
  2. 模型结构使用 CRAFT 网络(VGG16BN + U-Net 风格解码器)
  3. 支持动态输入尺寸
  4. 使用 torch.npu.synchronize() 确保正确的性能测量
  5. 权重加载兼容 EasyOCR 的 CRAFT 预训练模型

环境准备

# 安装基础依赖
pip install torch torchvision opencv-python-headless numpy

# 安装昇腾 NPU 支持(根据 CANN 版本选择)
# pip install torch_npu

# 安装 CRAFT 权重下载依赖
pip install Pillow

推理命令

CPU 推理

python inference.py --image test_image.jpg --device cpu

NPU 推理

python inference.py --image test_image.jpg --device npu

CPU/NPU 精度对比

python compare_cpu_npu.py --cpu-results detection_results_cpu.json --npu-results detection_results_npu.json

推理结果

下图为运行截图:

终端运行截图

CPU 推理结果

指标值
检测到的文本区域数1
平均推理时间(5 次)11099.17 ms
运行设备CPU

NPU 推理结果

指标值
检测到的文本区域数1
平均推理时间(5 次)15.84 ms
运行设备Ascend 910B

性能对比

指标CPUNPU加速比
平均推理时间11099.17 ms15.84 ms700.71x
检测框数量111:1

CPU/NPU 精度测试方法

  1. 使用同一张测试图像分别在 CPU 和 NPU 上运行推理
  2. 提取模型输出的原始特征图(score map)
  3. 对 score map 应用 Sigmoid 激活函数后进行比较
  4. 使用相同的阈值提取文本检测框
  5. 对比检测框坐标的一致性
  6. 对比原始输出的数值差异

精度指标定义

  • 最大绝对差异(Max Abs Diff): CPU 与 NPU 输出张量逐元素绝对差的最大值
  • 平均绝对差异(Mean Abs Diff): CPU 与 NPU 输出张量逐元素绝对差的平均值
  • 相对误差: 差异值与 CPU 输出值的比例

CPU/NPU 精度测试结果

原始输出对比

指标数值
输出张量形状[1, 300, 600, 2]
最大绝对差异(原始输出)0.00058
平均绝对差异(原始输出)0.0000084
最大绝对差异(Sigmoid 后)0.00012
平均绝对差异(Sigmoid 后)0.000002
平均相对误差0.28%

检测框对比

指标数值
CPU 检测框数1
NPU 检测框数1
检测框坐标一致性完全一致
坐标最大差异0.0

精度测试结论

NPU 与 CPU 推理结果误差为 0.28%,远低于 1% 的要求,符合精度标准。

NPU 与 CPU 推理结果误差 < 1%。

部署和推理方法

核心代码

import torch
import torch_npu
from easyocr.craft import CRAFT

# 加载模型
device = torch.device('npu:0')
model = CRAFT()
state = torch.load('craft_mlt_25k.pth', map_location='cpu')
model.load_state_dict(state, strict=False)
model = model.to(device)
model.eval()

# 预处理图像
# ...(图像读取、归一化、调整大小)

# 推理
with torch.no_grad():
    output, features = model(input_tensor)

# 后处理
# ...(Sigmoid、阈值、边界框提取)

完整推理流程

  1. 加载预训练的 CRAFT 模型权重
  2. 读取输入图像并进行预处理(归一化、缩放)
  3. 将输入张量移动到指定设备(CPU 或 NPU)
  4. 执行模型推理
  5. 对输出进行 Sigmoid 激活
  6. 通过阈值提取文本区域
  7. 计算边界框坐标并保存结果

推理成功证据

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

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

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

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

模型标签

#+NPU #+OCR #+文本检测 #+CRAFT #+昇腾 #+CV #+PyTorch

文件说明

文件说明
inference.py推理脚本,支持 CPU 和 NPU
compare_cpu_npu.pyCPU/NPU 精度对比脚本
requirements.txt依赖清单
README.md本文档
craft_mlt_25k.pthCRAFT 预训练权重
test_image.jpg测试图像
detection_results_cpu.jsonCPU 推理结果
detection_results_npu.jsonNPU 推理结果
compare_results.json精度对比结果
result_cpu.jpgCPU 推理可视化
result_npu.jpgNPU 推理可视化
terminal_screenshot.png终端运行截图