mobilenetv4_hybrid_medium.ix_e550_r256_in1k 是 MobileNetV4 系列的 Hybrid 变体,基于 timm (PyTorch Image Models) 框架的图像分类模型,在 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/mobilenetv4_hybrid_medium.ix_e550_r256_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('mobilenetv4_hybrid_medium', 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('mobilenetv4_hybrid_medium', 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, 92, 23, 128] |
| 推理耗时 | 0.094s |
| 指标 | 值 |
|---|---|
| Top-1 类别 | 21 |
| Top-5 类别 | [21, 22, 92, 23, 128] |
| 推理耗时 | 0.013s |

| 指标 | 值 |
|---|---|
| Logits 最大绝对误差 | 0.00615406 |
| Logits 平均绝对误差 | 0.00299734 |
| 概率最大绝对误差 | 0.00015651 |
| 概率平均绝对误差 | 9.5e-07 |
| 相对误差 | 0.0281% |
| Cosine 相似度 | 1.0 |
| 指标 | CPU | NPU | 匹配 |
|---|---|---|---|
| Top-1 | 21 | 21 | ✓ |
| Top-5 重叠 | 5/5 | 5/5 | ✓ |
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 推理耗时 | 0.094s | 0.013s | 7.26x |
NPU 与 CPU 推理结果误差为 0.0281%,符合精度误差小于 1% 的要求。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。
#+NPU #+CV #+图像分类 #+昇腾 #+PyTorch #+timm #+Ascend910