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

mobilenetv1_100.ra4_e3600_r224_in1k 昇腾 NPU 适配

模型介绍

mobilenetv1_100.ra4_e3600_r224_in1k 是一个基于 timm (PyTorch Image Models) 的图像分类模型,在 ImageNet-1K 数据集上预训练。

  • 模型名称: mobilenetv1_100.ra4_e3600_r224_in1k
  • 任务类型: 图像分类
  • 模型框架: PyTorch + timm
  • 输入格式: 图片 (RGB, 224x224)
  • 输出格式: 1000 类 ImageNet 分类概率
  • 原始模型地址: timm/mobilenetv1_100
  • 原始模型文件: ModelScope

环境要求

  • 操作系统: Linux (aarch64)
  • NPU: Ascend910 (64GB HBM)
  • CANN: 8.5.1
  • Python: 3.11.14
  • PyTorch: 2.9.0
  • torch_npu: 2.9.0.post1
  • timm: 1.0.27

NPU 适配说明

该模型为标准的 PyTorch 图像分类模型,通过 timm 库加载预训练权重,可在昇腾 Ascend910 NPU 上直接运行。 适配过程的关键步骤:

  1. 从 ModelScope 下载模型权重文件 (model.safetensors)
  2. 使用 timm.create_model() 创建模型实例
  3. 加载本地权重到模型中
  4. 将模型迁移到 NPU 设备 (npu:0)
  5. 执行推理

快速开始

1. 安装依赖

pip install torch torch_npu timm Pillow numpy safetensors

如果下载速度慢,可使用清华镜像源:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torch_npu timm Pillow numpy safetensors

2. 下载模型

# 从 ModelScope 下载 model.safetensors
wget "https://www.modelscope.cn/api/v1/models/timm/mobilenetv1_100.ra4_e3600_r224_in1k/repo?Revision=master&FilePath=model.safetensors" -O model.safetensors

3. 推理

CPU 推理:

python3 inference.py --device cpu

NPU 推理:

python3 inference.py --device npu

4. 精度对比

python3 compare_cpu_npu.py

推理脚本 (inference.py)

import torch
import torch_npu
from timm import create_model
from safetensors.torch import load_file
from PIL import Image
from timm.data import create_transform, resolve_data_config

model = create_model('mobilenetv1_100', pretrained=False)
model.eval()
state_dict = load_file('model.safetensors')
model.load_state_dict(state_dict, strict=False)
model = model.to('npu:0')

img = Image.open('test.jpg').convert('RGB')
cfg = resolve_data_config({}, model=create_model('mobilenetv1_100', pretrained=False))
transform = create_transform(
    input_size=224, is_training=False,
    mean=cfg.get('mean'), std=cfg.get('std'),
    interpolation='bicubic')
input_tensor = transform(img).unsqueeze(0).to('npu:0')

with torch.no_grad():
    output = model(input_tensor)
probs = torch.nn.functional.softmax(output[0].cpu(), dim=0)
top5 = torch.topk(probs, k=5)
for i in range(5):
    print(f'Top {i+1}: class={top5.indices[i].item()}, prob={top5.values[i].item():.6f}')

推理结果

NPU 推理输出

NPU 推理成功完成,Top-5 分类结果如下:

CPU 与 NPU 推理结果对比

CPU 推理耗时: 0.0399s NPU 推理耗时: 0.0031s 性能加速比: 12.86x

指标值
CPU Top-1 类别22
NPU Top-1 类别22
Top-1 匹配是
Top-5 重叠5/5
余弦相似度0.99999958
最大概率差异0.0993%
Top-1 概率相对误差0.192297%

精度测试结论

NPU与CPU推理结果误差为0.0993%,符合精度误差小于1%的要求

NPU 与 CPU 的 Top-1 预测类别完全相同,Top-5 类别完全重叠,余弦相似度接近 1.0, 表明 NPU 推理结果与 CPU 推理结果高度一致。

模型标签

#+NPU #+CV #+图像分类 #+昇腾 #+Ascend910 #+timm #+PyTorch