mobilevitv2_200.cvnets_in22k_ft_in1k 是 MobileViTv2 系列的变体,是基于 timm(PyTorch Image Models)框架的图像分类模型,在 ImageNet-22k 上进行预训练后,又在 ImageNet-1k 上进行了微调。
该模型为标准的 PyTorch 图像分类模型,可通过 timm 库加载预训练权重,并在昇腾 Ascend910 NPU 上直接运行。 适配过程的关键步骤:
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 modelscopepython -c "from modelscope.hub.snapshot_download import snapshot_download; snapshot_download('timm/mobilevitv2_200.cvnets_in22k_ft_in1k')"python inference.pypython compare_cpu_npu.pyimport 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_200.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_200.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()}')| 指标 | 值 |
|---|---|
| Top-1 类别 | 21 |
| Top-5 类别 | [21, 22, 146, 812, 23] |
| 推理耗时 | 0.421s |
| 指标 | 值 |
|---|---|
| Top-1 类别 | 21 |
| Top-5 类别 | [21, 22, 146, 812, 23] |
| 推理耗时 | 0.008s |

| 指标 | 值 |
|---|---|
| Logits 最大绝对误差 | 0.00442839 |
| Logits 平均绝对误差 | 0.00078956 |
| 概率最大绝对误差 | 0.00017022 |
| 概率平均绝对误差 | 1.1e-06 |
| 相对误差 | 0.0908% |
| Cosine 相似度 | 1.0 |
| 指标 | CPU | NPU | 匹配 |
|---|---|---|---|
| Top-1 | 21 | 21 | ✓ |
| Top-5 重叠 | 5/5 | 5/5 | ✓ |
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 推理耗时 | 0.421s | 0.008s | 55.15x |
NPU 与 CPU 推理结果误差为 0.0908%,符合精度误差小于 1% 的要求。
以下日志展示了 NPU 推理成功的关键信息:
--- Top-K ---
Top-1 CPU: 21, NPU: 21, Match: True
Top-5 overlap: 5/5
CPU: 0.421s, NPU: 0.008s, Speedup: 55.15x#+NPU #+CV #+图像分类 #+昇腾 #+PyTorch #+timm #+Ascend910