MobileNetV3-Small 是 MobileNetV3 系列的小型变体,采用 1.0 倍宽度乘数以平衡轻量化和准确性。适用于移动设备和边缘计算。在 ImageNet-1K 上训练,输入尺寸为 224x224。
原始模型:timm/tf_mobilenetv3_small_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_100.in1k --device cpu --output_dir ./tf_mobilenetv3_small_100.in1k
# NPU inference
python3 inference.py --model_name tf_mobilenetv3_small_100.in1k --device npu --output_dir ./tf_mobilenetv3_small_100.in1k| 指标 | CPU | NPU (Ascend910) |
|---|---|---|
| 输入尺寸 | 224x224 | 224x224 |
| 平均推理时间 | 11.31 ms | 4.72 ms |
| Top-1 类别 | class 549 | class 549 |
| Top-1 概率 | 9.9340% | 9.9385% |
NPU 加速比:2.4 倍(与 CPU 对比)。
| 指标 | 数值 |
|---|---|
| 最大 logits 差异 | 0.03542328 |
| 平均 logits 差异 | 0.00618965 |
| 余弦相似度 | 0.999976 |
| 最大概率差异 | 0.080875% |
| 平均概率差异 | 0.000768% |
| 相对 L2 误差 | 0.736410% |
| Top-1 匹配 | 是 |
| Top-5 重叠 | 5/5 |
Top-5 预测结果:
| 排名 | CPU 类别 | CPU 概率 | NPU 类别 | NPU 概率 |
|---|---|---|---|---|
| 1 | class 549 | 9.9340% | class 549 | 9.9385% |
| 2 | class 419 | 3.4130% | class 419 | 3.3843% |
| 3 | class 610 | 2.7593% | class 610 | 2.6784% |
| 4 | class 844 | 1.6866% | class 844 | 1.6531% |
| 5 | class 769 | 1.4895% | class 769 | 1.4814% |
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_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}%")