g
gcw_C8PI9e90/resnet-50-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

ResNet-50 昇腾 NPU 推理模型

模型介绍

模型名称: microsoft/resnet-50
架构: ResNetForImageClassification
参数量: 25.6M
预训练数据集: ImageNet-1k
输入尺寸: 224 x 224
类别数: 1000

ResNet-50 是 ResNet 系列中最具代表性的模型之一,由 Microsoft Research 提出。该模型包含 50 个卷积层,采用 Bottleneck 残差块设计,通过 1x1 卷积对通道数进行降维和升维,在控制计算量的同时大幅提升了网络容量和表达能力。ResNet 提出的残差学习框架从根本上解决了极深网络的退化问题,是计算机视觉领域里程碑式的工作。该模型在 ImageNet-1k 数据集上预训练,适用于 1000 类图像分类任务。本仓库基于昇腾 Ascend 910B4 NPU 完成模型推理部署与精度验证。

环境配置

硬件环境

组件规格
NPU 加速卡Ascend 910B4
算力单元昇腾 AI 处理器

软件环境

软件版本
CANN8.5.1
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
transformers-
Pillow-
NumPy-

快速开始

1. 下载模型

# 从 HuggingFace 下载模型权重和配置
git lfs install
git clone https://huggingface.co/microsoft/resnet-50 ./model

2. 安装依赖

pip install torch torch_npu transformers pillow requests numpy

3. 运行推理

使用预置的推理脚本,支持从图片文件或 URL 进行推理:

# 使用本地图片
python inference.py --model_path ./model --image /path/to/image.jpg

# 使用网络图片 URL
python inference.py --model_path ./model --image https://example.com/image.jpg

# 显示 Top-10 预测结果
python inference.py --model_path ./model --image /path/to/image.jpg --top_k 10

4. 运行精度验证

python accuracy_eval.py ./model accuracy_report.json

5. 运行性能基准测试

python perf_benchmark.py ./model 100 perf_report.json

精度验证结果

使用 50 张合成测试图片(224x224,随机像素),对比 NPU(Ascend 910B4)与 CPU(x86)的输出差异。

精度汇总

指标结果
测试样本数50
Top-1 预测匹配率100% (50/50)
平均最大相对误差 (AvgMaxRelErr)0.107%
最大相对误差 (MaxRelErr)0.231%
平均概率余弦相似度 (AvgCosineSim)0.999999
总体状态PASS

逐样本精度详情

样本Top-1 匹配CPU Top-1NPU Top-1最大相对误差余弦相似度
0PASS21210.122%0.999997
1PASS21210.158%0.999999
2PASS1071070.153%0.999999
3PASS21210.104%0.999999
4PASS21210.139%0.999997
5PASS21210.092%0.999999
6PASS21210.082%0.999999
7PASS21210.131%0.999999
8PASS21210.091%0.999999
9PASS21210.231%0.999998
10PASS21210.101%0.999999
11PASS21210.102%0.999998
12PASS21210.118%0.999999
13PASS21210.140%0.999998
14PASS21210.114%0.999999
15PASS21210.099%0.999999
16PASS21210.133%0.999999
17PASS21210.108%0.999999
18PASS21210.084%0.999999
19PASS21210.100%0.999999
20PASS21210.089%0.999999
21PASS21210.108%1.000000
22PASS21210.071%0.999999
23PASS21210.078%0.999999
24PASS21210.079%1.000000
25PASS21210.110%0.999999
26PASS21210.082%0.999999
27PASS21210.095%0.999999
28PASS21210.076%0.999999
29PASS21210.115%0.999998
30PASS21210.130%0.999999
31PASS21210.093%0.999999
32PASS21210.091%1.000000
33PASS21210.088%0.999999
34PASS21210.088%1.000000
35PASS21210.073%1.000000
36PASS21210.112%0.999999
37PASS21210.076%0.999999
38PASS21210.080%1.000000
39PASS21210.063%1.000000
40PASS21210.068%1.000000
41PASS21210.099%0.999999
42PASS21210.117%0.999999
43PASS21210.116%0.999998
44PASS21210.181%0.999999
45PASS21210.073%0.999999
46PASS21210.140%0.999998
47PASS21210.094%0.999999
48PASS21210.118%0.999999
49PASS21210.144%0.999999

说明: Top-1 类别 ID 为 21(对应于 "kite" 风筝类)和 107(对应于 "jellyfish" 水母类),由随机输入的自然分布决定。所有样本的最大相对误差最大仅为 0.231%(显著低于 1% 阈值),余弦相似度均非常接近 1.0,证明 NPU 推理结果与 CPU 基准具有高度数值一致性,精度无损。

性能基准测试结果

使用 batch size = 1、输入尺寸 224x224 的随机图片,在 Ascend 910B4 NPU 上进行 100 次推理迭代(含 10 轮 warmup)的性能测试。

性能汇总

指标结果
测试设备Ascend 910B4 NPU
Batch Size1
推理次数100
平均延迟12.88 ms
最小延迟11.66 ms
最大延迟20.73 ms
P50 延迟12.38 ms
P90 延迟13.95 ms
吞吐量77.62 img/s

延迟分布

延迟分布(单位:ms):
  11.66 ██                                     (最小)
  11.68 █
  11.71 █
  11.74 █
  11.75 █
  11.76 █
  11.79 ██
  11.81 ████
  11.85 ███
  11.86 ██
  11.89 █
  11.90 ██
  11.91 █
  11.92 █
  11.93 █
  11.94 █
  11.96 ███
  11.99 ██
  12.00 █
  12.01 █
  12.03 ██
  12.05 █
  12.06 █
  12.08 █
  12.12 █
  12.18 █
  12.20 ██
  12.28 █
  12.30 █
  12.31 █
  12.32 █
  12.37 █
  12.38 █                                     (P50)
  12.39 █
  12.42 █
  12.49 █
  12.55 █
  12.60 █
  13.34 █
  13.35 █
  13.38 █
  13.40 █
  13.42 █
  13.43 █
  13.45 █
  13.46 █
  13.50 █
  13.52 █
  13.53 █
  13.55 ██
  13.56 ██
  13.59 █
  13.60 █
  13.64 ███
  13.68 █
  13.70 █
  13.71 ██
  13.73 █
  13.75 █
  13.79 █
  13.80 █
  13.84 █
  13.88 █
  13.90 █
  13.93 █
  13.95 █                                     (P90)
  13.96 ██
  13.98 █
  14.06 █
  14.22 █
  14.35 █
  14.41 █
  17.98 █
  20.73 █                                     (最大)

延迟统计摘要

统计量数值 (ms)
平均值12.88
标准差~1.24
最小值11.66
P2511.86
P50 (中位数)12.38
P7513.64
P9013.95
P9514.22
P9917.98
最大值20.73

注: ResNet-50 由于模型参数量较大(25.6M),NPU 推理延迟略高于 ResNet-18 和 ResNet-34,但整体保持稳定。P50 延迟 12.38ms 表明大部分推理可在约 12ms 内完成。最大值 20.73ms 出现在少数波动场景,在实际部署中可通过多轮预热和负载均衡缓解。

项目结构

├── readme.md            # 本文件 - 模型说明文档
├── model/               # 模型权重目录(从 HuggingFace 下载)
├── inference.py         # 推理脚本 - 支持单张图片推理
├── accuracy_eval.py     # 精度验证脚本 - NPU vs CPU 对比
├── accuracy_report.json # 精度验证结果报告
├── perf_benchmark.py    # 性能基准测试脚本
├── perf_report.json     # 性能测试结果报告
└── fusion_result.json   # 算子融合结果报告

注意事项

  1. 模型加载: 推理前需确保网络连通以下载 HuggingFace 预训练权重,或预先下载至本地 ./model 目录。
  2. NPU 环境: 确保已正确安装 CANN 工具包及 torch_npu,通过 torch.npu.is_available() 验证 NPU 可用性。
  3. 精度验证: 测试使用合成图片(随机像素),主要验证 NPU 与 CPU 推理结果的数值一致性。实际部署时建议使用真实 ImageNet 验证集评估模型准确率。
  4. 性能数据: 延迟数据包含模型前向推理时间,不含数据预处理和后处理时间。实际端到端部署延迟会略高于此数值。
  5. 批处理: 当前测试使用 batch size = 1。如需提升吞吐量,可尝试增大 batch size。
  6. 稳定性: ResNet-50 参数量较大,个别推理迭代可能出现延迟波动(最高 20.73ms)。建议生产环境中增加预热轮次并采用适当的超时机制。

标签

#NPU #Ascend #ResNet #ImageClassification #ResNet50 #昇腾 #华为 #模型推理 #边缘计算

精度结论

基于现有评测数据,CPU 与 NPU 的 余弦相似度 精度误差为 0.0001%,小于 1% 的精度要求。

推理成功证据

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

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

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

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