m0_74196153/tf_mobilenetv3_small_minimal_100-in1k-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MobileNetV3 Small Minimal 100 - 昇腾NPU适配

1. 简介

MobileNetV3-Small-Minimal是MobileNetV3系列中最轻量的变体,采用Minimal设计进一步简化网络结构,同时以最小的计算量提供图像分类能力。该模型在ImageNet-1K上训练,输入尺寸为224x224。

原始模型:timm/tf_mobilenetv3_small_minimal_100.in1k

  • 任务类型:图像分类
  • 框架:PyTorch / timm
  • 输入:RGB图像,224x224
  • 输出:1000类ImageNet-1K的logits和概率
  • 参数:约2.5M
  • 模型大小:7.9 MB

2. 环境

组件版本
NPUAscend910
CANN25.5.2
PyTorch2.9.0
torch_npu2.9.0
timm1.0.27
Python3.11.14
OSLinux (aarch64)

3. 安装配置

pip install torch torchvision timm Pillow numpy modelscope safetensors
export MODELSCOPE_CACHE=/tmp/modelscope

4. 推理

# 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

5. 推理结果

指标CPUNPU (Ascend910)
输入尺寸224x224224x224
平均推理时间9.60 毫秒3.55 毫秒
Top-1 类别class 111class 111
Top-1 概率1.9474%1.9989%

NPU 加速比:2.7 倍(相较于 CPU)。

6. CPU/NPU 精度对比

指标

指标数值
最大 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 概率
1class 1111.9474%class 1111.9989%
2class 6441.5847%class 6441.6216%
3class 4991.5195%class 4991.5134%
4class 9161.4519%class 9161.4584%
5class 5491.4026%class 5491.3951%

结论

NPU 与 CPU 误差 < 1%。所有指标均表明 NPU 结果与 CPU 匹配:

  • 余弦相似度:0.999930(接近 1.0)
  • 最大概率差异:0.0514%

7. 截图

inference

8. 部署

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}%")

9. 注意事项

  1. 模型首次运行时会从 ModelScope 自动下载
  2. 在进行 NPU 推理前,请先验证 torch.npu.is_available()
  3. 推理结束后,NPU 内存会自动释放
  4. 若出现 NPU 内存溢出(OOM),请减少 inference.py 中的 num_runs
  5. 这是一个通过 PyTorch/timm 加载的 TensorFlow 训练的 MobileNetV3 变体模型