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

MobileNetV3 Large 100 - 昇腾NPU适配

1. 简介

MobileNetV3-Large是MobileNetV3系列的标准大型模型变体,采用1.0倍宽度乘数,在该系列中提供最佳的分类精度。适用于对精度要求较高的场景。模型在ImageNet-1K数据集上训练,输入尺寸为224x224。

原始模型:timm/tf_mobilenetv3_large_100.in1k

  • 任务类型:图像分类
  • 框架:PyTorch / timm
  • 输入:RGB图像,224x224
  • 输出:1000类ImageNet-1K的logits和概率
  • 参数数量:约5.5M
  • 模型大小:21.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_100.in1k --device cpu --output_dir ./tf_mobilenetv3_large_100.in1k

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

5. 推理结果

指标CPUNPU (Ascend910)
输入尺寸224x224224x224
平均推理时间28.72 ms5.76 ms
Top-1 类别class 549class 549
Top-1 概率5.3541%5.2919%

NPU 加速比:5.0x(对比 CPU)。

6. CPU/NPU 精度对比

指标

指标数值
最大 logits 差异0.03052139
平均 logits 差异0.00427881
余弦相似度0.999983
最大概率差异0.062194%
平均概率差异0.000608%
相对 L2 误差0.584360%
Top-1 匹配是
Top-5 重叠5/5

Top-5 预测结果:

排名CPU 类别CPU 概率NPU 类别NPU 概率
1class 5495.3541%class 5495.2919%
2class 4091.9407%class 4091.9352%
3class 4461.6589%class 4461.6405%
4class 7721.2364%class 7721.2441%
5class 8921.2053%class 8921.1960%

结论

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

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

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_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. 这是一个基于 TensorFlow 训练的 MobileNetV3 变体模型,通过 PyTorch/timm 加载使用