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

minst_hand_writing_nums_configuration_model - NPU

模型介绍

本模型是基于 MNIST 数据集的手写数字识别分类模型。模型采用卷积神经网络架构,能够识别 0-9 的手写数字。该模型从 ModelScope 平台获取,原始格式为 Keras 框架,已适配为 PyTorch 格式并在昇腾 NPU 上完成推理验证。

原始模型信息

  • 原始模型地址: ModelScope minst_hand_writing_nums_configuration_model
  • 任务类型: ocr-recognition(手写数字识别)
  • 模型框架: other(Keras → PyTorch)
  • 输入格式: 图像 (RGB, 224×224)
  • 输出格式: 10 类分类 logits(数字 0-9)
  • 模型参数量: 约 120 万个参数

依赖环境

  • Python >= 3.11
  • torch >= 2.0.0
  • torchvision >= 0.15.0
  • torch_npu >= 2.9.0
  • numpy >= 1.21.0
  • Pillow >= 9.0.0

NPU 适配说明

原始模型为 Keras 框架训练,通过以下步骤完成 NPU 适配:

  1. 使用 PyTorch 重构模型结构(ConvNet 架构)
  2. 从 Keras 权重文件 (weights.bin) 读取权重参数
  3. 实现 Keras 到 PyTorch 的权重映射和格式转换(包括 padding 策略转换、BatchNorm 参数映射等)
  4. 支持 --device cpu 和 --device npu 参数切换推理设备
  5. 利用 torch_npu 在昇腾 NPU 上完成推理

环境准备

# 安装依赖
pip install torch torchvision numpy Pillow
# 安装 torch_npu(昇腾 NPU 支持)
pip install torch_npu

推理命令

CPU 推理

python inference.py --device cpu

NPU 推理

python inference.py --device npu

CPU/NPU 精度对比

python compare_cpu_npu.py

推理结果

CPU 推理结果

设备: cpu,推理耗时: 24.72 秒(10000 样本)

准确率: 97.74%

NPU 推理结果

设备: Ascend910_9362,推理耗时: 0.99 秒(10000 样本)

准确率: 97.74%

性能提升约 25 倍。

模拟终端输出截图

CPU 推理截图

CPU 推理截图

CPU/NPU 精度测试

测试方法

  1. 使用 MNIST 测试集 10000 张图片作为输入
  2. 分别在 CPU 和 NPU 上运行模型推理
  3. 对比输出 logits 的差异,计算以下指标:
    • 平均绝对差异(Mean Absolute Diff)
    • 最大绝对差异(Max Absolute Diff)
    • 预测一致率(Prediction Consistency)
    • 相对误差(Relative Error)

精度测试结果

指标数值
CPU 准确率97.74%
NPU 准确率97.74%
输出 logits 平均绝对差异0.000476
输出 logits 最大绝对差异0.003566
预测一致率100.00%
相对误差0.0045%
不一致样本数0/10000

精度结论

NPU 与 CPU 推理结果相对误差为 0.0045%,小于 1%,符合精度要求。

性能对比

设备推理耗时(10000 样本)加速比
CPU24.72 秒1x
NPU (Ascend910)0.99 秒~25x

NPU 推理相比 CPU 获得约 25 倍加速,同时精度完全一致。

推理成功证据

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

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

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

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

模型标签

#+NPU #+CV #+昇腾 #+手写数字识别 #+分类模型

代码结构

├── inference.py              # 推理脚本(支持 cpu/npu)
├── compare_cpu_npu.py        # CPU/NPU 精度对比脚本
├── requirements.txt          # 依赖环境
├── README.md                 # 本文档
├── compare_result.json       # 精度测试结果(JSON)
├── cpu_inference_log.txt     # CPU 推理日志
├── npu_inference_log.txt     # NPU 推理日志
└── inference_screenshot.png  # 推理截图