g
gcw_C8PI9e90/convformer-s18-sail-in22k-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

convformer_s18.sail_in22k 昇腾 NPU 适配

1. 模型介绍

  • 模型名称: convformer_s18.sail_in22k
  • 模型架构: ConvFormer
  • 原始模型: timm/convformer_s18.sail_in22k
  • ModelScope 地址: timm/convformer_s18.sail_in22k
  • 任务类型: 图像分类(Image Classification)
  • 模型框架: PyTorch + timm
  • 参数量: ~27M
  • 输入格式: 图像 (3, 224, 224)
  • 输出格式: 分类 logits
  • 数据集: ImageNet-22K

2. 环境准备

硬件环境

组件规格
NPUAscend 910 (64GB HBM)
CPUARM 64-core
内存系统内存

软件环境

组件版本
操作系统Linux (aarch64)
Python3.11.14
PyTorch2.9.0
torch-npu2.9.0.post1
timm1.0.27
CANN8.5.1

安装依赖

pip install timm torchvision Pillow requests safetensors modelscope

下载模型

from modelscope.hub.snapshot_download import snapshot_download

model_dir = snapshot_download("timm/convformer_s18.sail_in22k")
print(f"Model downloaded to: {model_dir}")

3. 推理方法

CPU 推理

import torch
import timm
from PIL import Image
from timm.data import resolve_data_config
from timm.data.transforms_factory import create_transform

model = timm.create_model("convformer_s18.sail_in22k", pretrained=True)
model.eval()
img = Image.open("test.jpg").convert("RGB")
config = resolve_data_config({}, model=model)
transform = create_transform(**config)
input_tensor = transform(img).unsqueeze(0)

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

NPU 推理

import torch
import timm
from PIL import Image
from timm.data import resolve_data_config
from timm.data.transforms_factory import create_transform

model = timm.create_model("convformer_s18.sail_in22k", pretrained=True)
model = model.npu()
model.eval()
img = Image.open("test.jpg").convert("RGB")
config = resolve_data_config({}, model=model)
transform = create_transform(**config)
input_tensor = transform(img).unsqueeze(0).npu()

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

使用推理脚本

# CPU 推理
python inference.py --device cpu

# NPU 推理
python inference.py --device npu

# CPU/NPU 精度对比
python compare_cpu_npu.py

4. 推理结果

使用测试图像进行推理,输入尺寸为 224×224。

推理耗时对比

指标CPUNPU (Ascend 910)
推理耗时0.3482s0.0128s
加速比1×27.2×

Top-5 输出对比

排名CPU 类别CPU 概率NPU 类别NPU 概率
1216660.226074216660.226282
2120030.163911120030.163789
3120080.12476120080.124917
4120020.079406120020.079323
5120610.069605120610.069602

推理日志

$ python inference.py --device cpu
Loading model: convformer_s18.sail_in22k
Model loaded on CPU
Input shape: (1, 3, 224, 224)
Running inference...
CPU inference time: 0.3482s
Top-1: class=21666 prob=0.226074
Top-2: class=12003 prob=0.163911

$ python inference.py --device npu
Loading model: convformer_s18.sail_in22k
Model moved to NPU (Ascend 910)
Input shape: (1, 3, 224, 224)
Running inference...
NPU inference time: 0.0128s
Top-1: class=21666 prob=0.226282
Top-2: class=12003 prob=0.163789

5. CPU/NPU 精度测试

测试方法

  1. 分别在 CPU 和 NPU 上加载同一模型权重(通过 timm pretrained=True 加载)
  2. 使用同一张测试图像,经过相同的预处理流程(resolve_data_config + create_transform)
  3. 对比输出 logits 的差异

精度指标

指标含义目标值
MAE平均绝对误差(Mean Absolute Error)越小越好
MSE均方误差(Mean Squared Error)越小越好
Max Error最大绝对误差(Max Absolute Error)越小越好
Cosine Similarity余弦相似度越接近 1 越好
Mean Relative Error平均相对误差< 1%

精度测试结果

指标数值
MAE0.0004763257
MSE3.83e-07
Max Absolute Error0.0037302971
Cosine Similarity0.9999997616
Mean Relative Error0.367259%
Top-5 一致数5/5
Top-1 一致是

结论

NPU 与 CPU 推理结果误差 < 1%,精度完全满足要求。

具体来说:

  • 余弦相似度达到 0.9999997616,接近 1.0,说明 NPU 输出与 CPU 输出在方向上几乎完全一致
  • 平均相对误差仅 0.367259%,远低于 1% 的容差阈值
  • Top-5 预测类别 5/5 完全一致
  • Top-1 预测类别 一致(是)

以上数据充分证明了 NPU 推理结果与 CPU 推理结果的高度一致性,NPU 在提供大幅性能提升的同时,保持了卓越的数值精度。

6. 性能分析

指标CPUNPU (Ascend 910)
推理耗时0.3482s0.0128s
加速比1×27.2×

NPU (Ascend 910) 推理相比 CPU 推理取得了约 27.2× 的加速效果,同时保持了精度一致。这使得该模型适合部署在昇腾 NPU 上进行高性能图像分类推理。

7. 部署说明

模型下载

# 方式一:ModelScope(推荐)
pip install modelscope
python -c "from modelscope.hub.snapshot_download import snapshot_download; snapshot_download('timm/convformer_s18.sail_in22k')"

# 方式二:HuggingFace
pip install huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download('timm/convformer_s18.sail_in22k')"

推理脚本

# 安装依赖
pip install -r requirements.txt

# CPU 推理
python inference.py --device cpu

# NPU 推理
python inference.py --device npu

# 精度对比
python compare_cpu_npu.py

8. 截图

推理截图

9. 标签

  • #NPU #CV #图像分类 #昇腾 #Ascend #ConvFormer #timm #PyTorch #ImageNet

精度结论

基于现有评测数据,CPU 与 NPU 的 余弦相似度 精度误差为 0.0%,小于 1% 的精度要求。

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。