wide_resnet50_2.tv_in1k 是 基于 Wide ResNet-50-2 架构,在 ImageNet-1k 上使用 tv(TorchVision)标准训练策略训练。
Wide ResNet 是 ResNet 的变体,通过增加每层卷积的宽度(通道数)而非深度来提升模型容量。
| 组件 | 版本 |
|---|---|
| Python | 3.11.14 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| timm | 最新版 |
| Pillow | ≥10.0 |
| safetensors | ≥0.3.0 |
| Ascend NPU | Ascend910_9362 |
| CANN | 8.5.1 |
该模型基于 PyTorch + timm 框架,在昇腾 NPU 上可直接使用 torch_npu 进行推理。适配流程:
# 安装依赖
pip install torch torchvision timm Pillow modelscope safetensors numpy
# 或使用 requirements.txt
pip install -r requirements.txt# CPU 推理
python3 inference.py --model wide_resnet50_2.tv_in1k --device cpu --num_runs 10
# NPU 推理
python3 inference.py --model wide_resnet50_2.tv_in1k --device npu --num_runs 10
# CPU vs NPU 精度对比(使用相同输入)
python3 compare_cpu_npu.py --model wide_resnet50_2.tv_in1k --num_runs 10测试输入图像为 koala(树袋熊),分辨率 224×224。
| 指标 | 数值 |
|---|---|
| 推理设备 | Ascend910_9362 |
| 平均推理时间 | 3.79 ms |
| 与 CPU 加速比 | 140.11x |
| 排名 | Class ID | 标签 |
|---|---|---|
| 1 | 105 | class_105 |
| 2-5 | Top-5 重叠 5/5 | — |
| 指标 | 数值 |
|---|---|
| Logits 最大绝对误差 | 0.00162840 |
| Logits 平均绝对误差 | 0.00026627 |
| Logits 余弦相似度 | 0.9999998808 |
| 概率最大绝对误差 | 0.00000024 |
| 概率平均绝对误差 | 0.00000000 |
| Top-1 匹配 | 是 |
| Top-5 重叠 | 5/5 |
结论:NPU 与 CPU 推理误差 < 1%(最大概率误差 = 0.000000)
| 设备 | 平均推理耗时 | 加速比 |
|---|---|---|
| CPU | 530.89 ms | 1.00× |
| NPU (Ascend910) | 3.79 ms | 140.11× |
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.tv_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}')
import gc, torch
gc.collect()
torch.npu.empty_cache()| 对比项 | CPU | NPU | 误差 |
|---|---|---|---|
| 余弦相似度 | 1.0 | 0.9999998808 | 0.0% |
结论: CPU 与 NPU 精度误差为 0.0%,小于 1% 精度要求。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理。
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpuModel loaded successfully on NPU
Inference completed
Results saved