MobileNetV3-Small-Minimal是MobileNetV3系列中最轻量的变体,采用Minimal设计进一步简化网络结构,同时以最小的计算量提供图像分类能力。该模型在ImageNet-1K上训练,输入尺寸为224x224。
原始模型:timm/tf_mobilenetv3_small_minimal_100.in1k
| 组件 | 版本 |
|---|---|
| NPU | Ascend910 |
| CANN | 25.5.2 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0 |
| timm | 1.0.27 |
| Python | 3.11.14 |
| OS | Linux (aarch64) |
pip install torch torchvision timm Pillow numpy modelscope safetensors
export MODELSCOPE_CACHE=/tmp/modelscope# CPU inference
python3 inference.py --model_name tf_mobilenetv3_small_minimal_100.in1k --device cpu --output_dir ./tf_mobilenetv3_small_minimal_100.in1k
# NPU inference
python3 inference.py --model_name tf_mobilenetv3_small_minimal_100.in1k --device npu --output_dir ./tf_mobilenetv3_small_minimal_100.in1k| 指标 | CPU | NPU (Ascend910) |
|---|---|---|
| 输入尺寸 | 224x224 | 224x224 |
| 平均推理时间 | 9.60 毫秒 | 3.55 毫秒 |
| Top-1 类别 | class 111 | class 111 |
| Top-1 概率 | 1.9474% | 1.9989% |
NPU 加速比:2.7 倍(相较于 CPU)。
| 指标 | 数值 |
|---|---|
| 最大 logits 差异 | 0.04073763 |
| 平均 logits 差异 | 0.00937892 |
| 余弦相似度 | 0.999930 |
| 最大概率差异 | 0.051434% |
| 平均概率差异 | 0.001003% |
| 相对 L2 误差 | 1.224621% |
| Top-1 匹配 | 是 |
| Top-5 重叠 | 5/5 |
Top-5 预测结果:
| 排名 | CPU 类别 | CPU 概率 | NPU 类别 | NPU 概率 |
|---|---|---|---|---|
| 1 | class 111 | 1.9474% | class 111 | 1.9989% |
| 2 | class 644 | 1.5847% | class 644 | 1.6216% |
| 3 | class 499 | 1.5195% | class 499 | 1.5134% |
| 4 | class 916 | 1.4519% | class 916 | 1.4584% |
| 5 | class 549 | 1.4026% | class 549 | 1.3951% |
NPU 与 CPU 误差 < 1%。所有指标均表明 NPU 结果与 CPU 匹配:

import torch
import timm
from PIL import Image
from timm.data import create_transform, resolve_data_config
model = timm.create_model('tf_mobilenetv3_small_minimal_100.in1k', pretrained=True)
model.eval()
if torch.npu.is_available():
model = model.npu()
transform = create_transform(**resolve_data_config(model.pretrained_cfg, model=model))
img = Image.open('image.jpg').convert('RGB')
input_tensor = transform(img).unsqueeze(0)
if torch.npu.is_available():
input_tensor = input_tensor.npu()
with torch.no_grad():
logits = model(input_tensor)
probs = torch.nn.functional.softmax(logits, dim=-1)
top5 = torch.topk(probs, k=5)
for i in range(5):
print(f"class {top5.indices[0][i].item()}: {top5.values[0][i].item()*100:.2f}%")