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

mobilevitv2_150.cvnets_in22k_ft_in1k 昇腾 NPU 适配

模型介绍

mobilevitv2_150.cvnets_in22k_ft_in1k 是 MobileViTv2 系列的变体,是基于 timm(PyTorch Image Models)框架的图像分类模型,在 ImageNet-22k 上进行预训练后,又在 ImageNet-1k 上进行了微调。

  • 模型名称: mobilevitv2_150.cvnets_in22k_ft_in1k
  • 任务类型: 图像分类
  • 模型框架: PyTorch + timm
  • 输入格式: 图片(RGB,256x256)
  • 输出格式: 1000 类 ImageNet-1k 分类概率
  • 原始模型地址: timm/mobilevitv2_150.cvnets_in22k_ft_in1k
  • ModelScope 地址: timm/mobilevitv2_150.cvnets_in22k_ft_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. 从 ModelScope 下载模型权重文件(model.safetensors)
  2. 使用 timm.create_model() 创建模型实例
  3. 加载本地权重到模型中
  4. 将模型迁移到 NPU 设备(npu:0)
  5. 执行推理

快速开始

1. 安装依赖

pip install torch torch_npu timm Pillow numpy safetensors modelscope

如果下载速度慢,可使用清华镜像源:

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

2. 下载模型权重

python -c "from modelscope.hub.snapshot_download import snapshot_download; snapshot_download('timm/mobilevitv2_150.cvnets_in22k_ft_in1k')"

3. 运行推理

python inference.py

4. CPU / NPU 精度对比

python compare_cpu_npu.py

推理脚本 (inference.py)

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('mobilevitv2_150.cvnets_in22k_ft_in1k', pretrained=False, num_classes=1000)
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')
config = resolve_data_config({{}}, model=create_model('mobilevitv2_150.cvnets_in22k_ft_in1k', pretrained=False, num_classes=1000))
transform = create_transform(
    input_size=256, is_training=False,
    mean=config.get('mean', (0.485, 0.456, 0.406)),
    std=config.get('std', (0.229, 0.224, 0.225)),
    interpolation=config.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)
print(f'Top-1 class: {probs.argmax().item()}')

推理结果

CPU 推理结果

指标值
Top-1 类别21
Top-5 类别[21, 22, 23, 128, 127]
推理耗时0.249s

NPU 推理结果

指标值
Top-1 类别21
Top-5 类别[21, 22, 23, 128, 127]
推理耗时0.02s

推理输出截图

推理截图

CPU / NPU 精度对比

精度指标

指标值
Logits 最大绝对误差0.00586253
Logits 平均绝对误差0.00120594
概率最大绝对误差0.00020824
概率平均绝对误差1.97e-06
相对误差0.1344%
Cosine 相似度0.999999

Top-K 对比

指标CPUNPU匹配
Top-12121✓
Top-5 重叠5/55/5✓

性能对比

指标CPUNPU加速比
推理耗时0.249s0.02s12.5x

精度测试结论

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

推理成功证据

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

--- Top-K ---
Top-1 CPU: 21, NPU: 21, Match: True
Top-5 overlap: 5/5
CPU: 0.249s, NPU: 0.020s, Speedup: 12.50x

模型标签

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

参考链接

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