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

microsoft/resnet-50 昇腾 NPU 图片分类适配工程

#NPU #Ascend #image-classification

1. 模型介绍

microsoft/resnet-50 是基于 ResNet-50 架构的图像分类模型,由微软在 ImageNet-1k 数据集上训练得到。ResNet(Residual Network)通过引入残差连接(skip connections)有效缓解了深层网络的梯度消失问题,是计算机视觉领域的经典骨干网络之一。该模型输入为 224×224 的 RGB 图像,输出 1000 个 ImageNet 类别的分类概率。

  • 模型名称: microsoft/resnet-50
  • 任务类型: 图片识别 / image-classification
  • 模型链接: https://ai.gitcode.com/hf_mirrors/microsoft/resnet-50
  • 架构: ResNet-50
  • 输出类别数: 1000(ImageNet-1k)

2. 硬件环境

项目规格
NPU 型号Ascend 910B4
NPU 数量1 卡
HBM 容量32 GB
健康状态OK

运行前请执行 npu-smi info 确认 NPU 状态正常。

3. 软件环境

项目版本
Python3.11.14
torch2.9.0+cpu
torch_npu2.9.0.post1
transformers4.57.6
torchvision0.24.0
Pillow12.2.0
numpy1.26.4
requests2.33.1
CANN8.5.1

4. 依赖安装

pip install -r requirements.txt

requirements.txt 内容:

torch>=2.0.0
torchvision>=0.15.0
transformers>=4.30.0
pillow>=9.0.0
requests>=2.28.0
numpy>=1.24.0

如果环境已安装 torch/torch_npu,请勿强制覆盖,避免破坏现有驱动兼容性。

5. 模型权重来源

模型权重通过 transformers 的 from_pretrained 接口自动下载。默认使用镜像端点:

export HF_ENDPOINT=https://hf-mirror.com

脚本中已内置 os.environ.setdefault("HF_ENDPOINT", "https://hf-mirror.com"),无需手动设置即可从镜像站下载。

权重下载后默认缓存在 ~/.cache/huggingface/hub/。

6. NPU 推理运行命令

python inference.py

inference.py 使用说明

  • 读取 assets/test.jpg 作为输入图像
  • 使用 AutoImageProcessor + AutoModelForImageClassification 加载模型
  • 自动将模型移动到 npu:0
  • 执行一次真实 NPU 前向推理
  • 输出 Top-5 分类结果(标签名、类别索引、置信度)
  • 完整日志写入 logs/inference.log
  • 预测结果写入 logs/prediction.txt

注意: assets/test.jpg 为本地生成的占位图(640×480 RGB),非真实自然图像。Top-1 预测结果为 web site(置信度约 0.316),该结果仅用于验证推理 pipeline 通断,不代表模型真实精度。如需真实精度验证,请替换为 ImageNet 标准测试集或自然图像。

实际运行结果(已完成)

Top-1 Prediction: web site, website, internet site, site (index=916)  confidence=0.315902
Top-2 Prediction: envelope                       (index=549   )  confidence=0.301865
Top-3 Prediction: face powder                    (index=551   )  confidence=0.010566
Top-4 Prediction: analog clock                   (index=409   )  confidence=0.006302
Top-5 Prediction: rule, ruler                    (index=769   )  confidence=0.004435

7. 精度验证

python eval_accuracy.py

验证方法

  1. 固定输入:assets/test.jpg
  2. 固定预处理流程:通过 AutoImageProcessor 统一处理
  3. 分别在 CPU 和 NPU 上加载同一模型权重,执行推理
  4. 对比 CPU logits 与 NPU logits,计算以下指标:
    • max_abs_diff: logits 最大绝对差
    • mean_abs_diff: logits 平均绝对差
    • prob max_diff: 概率分布最大绝对差
    • Top-1 match: 两类设备 Top-1 预测是否一致
  5. 判定标准:概率最大差 < 1% 且 Top-1 一致即为通过

实际运行结果(已完成)

指标数值
Logits max_abs_diff7.938385e-03
Logits mean_abs_diff1.490364e-03
Prob max_diff1.080841e-03 (0.11%)
CPU Top-1 index916
NPU Top-1 index916
Top-1 matchTrue
判定结果PASS

结论: CPU 与 NPU 推理结果高度一致,概率最大差异仅 0.11%,远小于 1% 阈值。logits 层面的微小差异属于 CPU/NPU 浮点实现差异的正常范围。

8. 性能测试

python benchmark.py

测试方法

  1. 加载模型到 npu:0
  2. 预热 5 次(排除首次编译开销)
  3. 正式测试 20 次
  4. 统计平均延迟、最小延迟、最大延迟
  5. 计算吞吐量 images/s

实际运行结果(已完成)

指标数值
总测试轮次20
平均延迟12.274 ms
最小延迟11.815 ms
最大延迟12.719 ms
吞吐量81.47 images/s

测试环境:单卡 Ascend 910B4,batch_size=1,输入尺寸 224×224。

9. 日志文件说明

文件路径说明
logs/env_check.log环境检查日志(NPU 信息、Python/包版本)
logs/inference.log推理脚本完整输出日志
logs/prediction.txtTop-1 标签、置信度及 Top-5 列表
logs/accuracy.logCPU vs NPU 精度对比结果
logs/benchmark.log性能测试原始延迟与统计结果

10. 常见问题

Q1: 模型下载失败或超时?

脚本已内置 HF_ENDPOINT=https://hf-mirror.com。如果仍失败,可尝试:

export HF_ENDPOINT=https://hf-mirror.com
export HF_HUB_OFFLINE=0
python inference.py

或在网络连通的环境预先下载后拷贝缓存目录。

Q2: NPU 不可用?

执行 npu-smi info 检查硬件状态。如果 torch.npu.is_available() 返回 False,请确认:

  • CANN 驱动已正确安装
  • torch_npu 版本与 CANN 版本匹配
  • 当前用户具有访问 /dev/davinci* 的权限

Q3: 精度差异超过 1%?

请确认:

  • CPU 和 NPU 使用的是同一版本模型权重
  • 输入预处理参数完全一致(processor 配置相同)
  • 未启用混合精度或量化等额外优化

如果 logits 差异略高但概率差异 < 1% 且 Top-1 一致,通常属于 CPU/NPU 浮点实现差异,可记录为 ACCEPTABLE。

Q4: 测试图片是什么?

assets/test.jpg 是本工程在无法联网下载时自动生成的 占位图(640×480 RGB 几何图形),非 ImageNet 标准测试图像。推理结果仅用于验证 pipeline 正确性,不反映模型真实精度。请根据实际业务场景替换为真实图像。

11. 项目结构

microsoft-resnet-50-NPU/
├── README.md
├── requirements.txt
├── inference.py
├── eval_accuracy.py
├── benchmark.py
├── assets/
│   └── test.jpg              # 占位测试图
├── logs/
│   ├── env_check.log         # 环境检查
│   ├── inference.log         # 推理日志
│   ├── prediction.txt        # 预测结果
│   ├── accuracy.log          # 精度验证
│   └── benchmark.log         # 性能测试
├── scripts/                  # 预留脚本目录
└── screenshots/              # 预留截图目录

12. 免责声明

本工程为昇腾模型适配比赛提交项目,仅供技术验证使用。模型权重版权归原版权方(Microsoft)所有,使用请遵循其许可证条款。