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

lambda_resnet26t.c1_in1k 昇腾 NPU 适配

模型介绍

lambda_resnet26t 是一个基于 timm (PyTorch Image Models) 的图像分类模型,在 ImageNet-1K 数据集上预训练。该模型结合了 Lambda层 与 ResNet 架构的轻量版本。

  • 模型名称: lambda_resnet26t.c1_in1k
  • 任务类型: 图像分类
  • 模型框架: PyTorch + timm
  • 输入格式: 图片 (RGB, 256x256)
  • 输出格式: 1000 类 ImageNet 分类概率
  • 原始模型地址: timm/lambda_resnet26t.c1_in1k

环境要求

  • 操作系统: Linux (aarch64)
  • NPU: Ascend910 (64GB HBM)
  • CANN: 8.5.1
  • Python: 3.11.14
  • PyTorch: 2.9.0
  • torch_npu: 2.9.0.post1
  • timm: 1.0.27

NPU 适配说明

该模型为标准的 PyTorch 图像分类模型,通过 timm 库加载预训练权重,可在昇腾 Ascend910 NPU 上直接运行。

快速开始

1. 安装依赖

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torch_npu timm Pillow numpy safetensors

2. 下载模型

from modelscope.hub.snapshot_download import snapshot_download
model_dir = snapshot_download('timm/lambda_resnet26t.c1_in1k')

3. 推理脚本

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

model = create_model('lambda_resnet26t.c1_in1k', pretrained=False)
model.eval()
state_dict = load_file('model.safetensors')
model.load_state_dict(state_dict, strict=False)
model = model.to('npu:0')

img = Image.open('test.jpg').convert('RGB')
cfg = resolve_data_config({}, model=create_model('lambda_resnet26t.c1_in1k', pretrained=False))
transform = create_transform(input_size=256, is_training=False,
    mean=cfg.get('mean'), std=cfg.get('std'),
    interpolation=cfg.get('interpolation', 'bicubic'))
input_tensor = transform(img).unsqueeze(0).to('npu:0')

with torch.no_grad():
    output = model(input_tensor)
probs = torch.nn.functional.softmax(output[0].cpu(), dim=0)
top5 = torch.topk(probs, k=5)
for i in range(5):
    print(f'Top {i+1}: class={top5.indices[i].item()}, prob={top5.values[i].item():.6f}')

4. 运行推理

CPU 推理:

python3 inference.py --device cpu

NPU 推理:

python3 inference.py --device npu

5. 精度对比

python3 compare_cpu_npu.py

NPU 推理结果

Loading lambda_resnet26t on npu:0...

=== lambda_resnet26t Inference on npu:0 ===
Inference time: 0.1904s
  Top 1: class=21, prob=0.106368
  Top 2: class=23, prob=0.037560
  Top 3: class=111, prob=0.037025
  Top 4: class=22, prob=0.032053
  Top 5: class=92, prob=0.030759

推理截图

CPU/NPU 精度测试结果

总体对比指标

指标数值
MAE (Mean Absolute Error)0.00081095
MaxAbsErr (最大绝对误差)0.00622916
Cosine Similarity (余弦相似度)0.99999957
Mean Relative Error (平均相对误差)0.495267%
Top-1 预测是否一致一致 (CPU=21, NPU=21)
Top-5 重叠数5/5
Max Probability Difference0.017713%
Top-1 Probability Relative Error0.125413%

Top-5 概率详细对比

ClassCPU ProbNPU Prob差值
210.1065010.1063680.00013357
220.0320960.0320530.00004204
230.0375780.0375600.00001757
920.0307910.0307590.00003210
1110.0368480.0370250.00017713

精度测试结论

NPU与CPU推理结果误差为0.0177%,符合精度误差小于1%的要求

性能测试结果

设备推理耗时加速比
CPU0.1760s1.00x (基线)
NPU (Ascend910)0.1826s0.96x

推理成功证据

以下日志展示了 NPU 推理成功的关键信息:

Input shape: torch.Size([1, 3, 256, 256])
Top-1 Match: True (CPU=21, NPU=21)
Top-5 Overlap: 5/5
--- Top-5 Probability Comparison ---
Top-1 Probability Relative Error: 0.125413%
Top-1 Prediction: MATCH (CPU=21, NPU=21)

模型标签

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

参考资料

  • timm 模型库
  • 昇腾社区
  • ModelScope