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

MobileNetV3 Large 075 - Ascend NPU 适配

1. 简介

MobileNetV3-Large-075 是 MobileNetV3-Large 的宽度缩减版本,采用 0.75 倍宽度乘数来减少通道数,同时保持 Large 系列网络的深度。该模型在 ImageNet-1K 数据集上进行训练,输入尺寸为 224x224。

原始模型:timm/tf_mobilenetv3_large_075.in1k

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

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

5. 推理结果

指标CPUNPU (Ascend910)
输入尺寸224x224224x224
平均推理时间24.18 ms5.83 ms
Top-1 类别class 549class 549
Top-1 概率7.4729%7.4055%

NPU 加速比:4.1 倍(对比 CPU)。

6. CPU 与 NPU 精度对比

指标

指标数值
最大 logits 差异0.01664400
平均 logits 差异0.00292952
余弦相似度0.999994
最大概率差异0.067369%
平均概率差异0.000392%
相对 L2 误差0.335626%
Top-1 匹配是
Top-5 重叠率5/5

Top-5 预测结果:

排名CPU 类别CPU 概率NPU 类别NPU 概率
1class 5497.4729%class 5497.4055%
2class 9024.7883%class 9024.7955%
3class 9163.7425%class 9163.7318%
4class 4462.7991%class 4462.7828%
5class 4092.7624%class 4092.7593%

结论

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

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

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_075.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 加载使用