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

MobileNetV3 Large Minimal 100 - 昇腾NPU适配

1. 简介

MobileNetV3-Large-Minimal是MobileNetV3 Large的精简版本,通过Minimal设计减少冗余计算,同时保持较高精度。该模型在ImageNet-1K数据集上训练,输入尺寸为224x224。

原始模型:timm/tf_mobilenetv3_large_minimal_100.in1k

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

2. 环境

组件版本
NPUAscend910
CANN25.5.2
PyTorch2.9.0
torch_npu2.9.0
timm1.0.27
Python3.11.14
操作系统Linux (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_large_minimal_100.in1k --device cpu --output_dir ./tf_mobilenetv3_large_minimal_100.in1k

# NPU inference
python3 inference.py --model_name tf_mobilenetv3_large_minimal_100.in1k --device npu --output_dir ./tf_mobilenetv3_large_minimal_100.in1k

5. 推理结果

指标CPUNPU (Ascend910)
输入尺寸224x224224x224
平均推理时间25.79 毫秒4.57 毫秒
Top-1 类别class 549class 549
Top-1 概率13.9668%13.5947%

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

6. CPU/NPU 精度对比

指标

指标数值
最大 logits 差异0.04244757
平均 logits 差异0.00639623
余弦相似度0.999971
最大概率差异0.372125%
平均概率差异0.001196%
相对 L2 误差0.765733%
Top-1 匹配是
Top-5 重叠5/5

Top-5 预测结果:

排名CPU 类别CPU 概率NPU 类别NPU 概率
1class 54913.9668%class 54913.5947%
2class 4467.1007%class 4467.2364%
3class 5302.8741%class 5302.9216%
4class 4091.2140%class 4091.2257%
5class 7821.1758%class 7821.1838%

结论

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

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

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_large_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 变体模型