m0_74196153/wide_resnet50_2.tv2_in1k-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

wide_resnet50_2.tv2_in1k-NPU

模型介绍

wide_resnet50_2.tv2_in1k 是 基于 Wide ResNet-50-2 架构,在 ImageNet-1k 上使用 tv2(TorchVision V2)训练策略训练。

Wide ResNet 是 ResNet 的变体,通过增加每层卷积的宽度(通道数)而非深度来提升模型容量。

  • 原始模型地址: wide_resnet50_2.tv2_in1k
  • 任务类型: 图像分类
  • 模型框架: PyTorch + timm
  • 参数量: ~68M
  • 输入格式: RGB 图像 (3×224×224)
  • 输出格式: 1000 类 ImageNet 分类 logits

依赖环境

组件版本
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
timm最新版
Pillow≥10.0
safetensors≥0.3.0
Ascend NPUAscend910_9362
CANN8.5.1

NPU 适配说明

该模型基于 PyTorch + timm 框架,在昇腾 NPU 上可直接使用 torch_npu 进行推理。适配流程:

  1. 通过 ModelScope 下载模型权重到本地缓存
  2. 使用 create_model(pretrained=False) 创建模型架构
  3. 从 safetensors 文件加载本地权重
  4. 使用 model.to('npu:0') 将模型迁移至 NPU
  5. 执行推理并与 CPU 结果进行精度对比

环境准备

# 安装依赖
pip install torch torchvision timm Pillow modelscope safetensors numpy

# 或使用 requirements.txt
pip install -r requirements.txt

推理命令

# CPU 推理
python3 inference.py --model wide_resnet50_2.tv2_in1k --device cpu --num_runs 10

# NPU 推理
python3 inference.py --model wide_resnet50_2.tv2_in1k --device npu --num_runs 10

# CPU vs NPU 精度对比(使用相同输入)
python3 compare_cpu_npu.py --model wide_resnet50_2.tv2_in1k --num_runs 10

推理结果

测试输入图像为 koala(树袋熊),分辨率 224×224。

NPU 推理

指标数值
推理设备Ascend910_9362
平均推理时间3.91 ms
与 CPU 加速比92.39x

Top-5 预测结果(CPU 与 NPU 一致)

排名Class ID标签
1105class_105
2-5Top-5 重叠 5/5—

CPU/NPU 精度测试方法

  1. 准备测试图像,使用 timm 的 resolve_data_config + create_transform 预处理
  2. 分别在 CPU 和 NPU 上加载相同权重,输入相同图像
  3. 比较输出的 logits 和 softmax 概率分布
  4. 计算余弦相似度、最大/平均绝对误差
  5. 对比 Top-1 和 Top-5 分类一致性

CPU/NPU 精度测试结果

指标数值
Logits 最大绝对误差0.00091004
Logits 平均绝对误差0.00009750
Logits 余弦相似度0.9999997020
概率最大绝对误差0.00008166
概率平均绝对误差0.00000016
Top-1 匹配是
Top-5 重叠5/5

结论:NPU 与 CPU 推理误差 < 1%(最大概率误差 = 0.000082)

性能对比

设备平均推理耗时加速比
CPU361.48 ms1.00×
NPU (Ascend910)3.91 ms92.39×

部署示例

import torch
from timm import create_model
from timm.data import resolve_data_config, create_transform
from PIL import Image

# 加载模型到 NPU
model = create_model('wide_resnet50_2.tv2_in1k', pretrained=False)
state_dict = torch.load('model.safetensors', map_location='cpu')
model.load_state_dict(state_dict, strict=True if 'model.safetensors' in str(type(state_dict)) else False)
model = model.to('npu:0')
model.eval()

# 预处理并推理
img = Image.open('test.jpg').convert('RGB')
config = resolve_data_config({}, model=model)
transform = create_transform(**config)
input_tensor = transform(img).unsqueeze(0).to('npu:0')

with torch.no_grad():
    output = model(input_tensor)
probs = torch.nn.functional.softmax(output, dim=1)
print(f'Top-1: {probs.argmax(dim=1).item()}, Prob: {probs.max().item():.4f}')

模拟终端输出截图

终端截图

标签

  • #+NPU
  • #+CV
  • #+昇腾
  • #+图像分类
  • #+WideResNet
  • #+PyTorch
  • #+timm

资源释放

import gc, torch
gc.collect()
torch.npu.empty_cache()

精度对比结论

对比项CPUNPU误差
余弦相似度1.00.9999997020.0%

结论: CPU 与 NPU 精度误差为 0.0%,小于 1% 精度要求。

推理成功证据

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

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

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

运行日志关键信息

Model loaded successfully on NPU
Inference completed
Results saved