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

MobileNetV3 Small 100 - Ascend NPU 适配

1. 简介

MobileNetV3-Small 是 MobileNetV3 系列的小型变体,采用 1.0 倍宽度乘数以平衡轻量化和准确性。适用于移动设备和边缘计算。在 ImageNet-1K 上训练,输入尺寸为 224x224。

原始模型:timm/tf_mobilenetv3_small_100.in1k

  • 任务类型:图像分类
  • 框架:PyTorch / timm
  • 输入:RGB 图像,224x224
  • 输出:1000 类 ImageNet-1K 对数概率和概率值
  • 参数:约 2.5M
  • 模型大小:9.8 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_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

5. 推理结果

指标CPUNPU (Ascend910)
输入尺寸224x224224x224
平均推理时间11.31 ms4.72 ms
Top-1 类别class 549class 549
Top-1 概率9.9340%9.9385%

NPU 加速比:2.4 倍(与 CPU 对比)。

6. CPU/NPU 精度对比

指标

指标数值
最大 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 概率
1class 5499.9340%class 5499.9385%
2class 4193.4130%class 4193.3843%
3class 6102.7593%class 6102.6784%
4class 8441.6866%class 8441.6531%
5class 7691.4895%class 7691.4814%

结论

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

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

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