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

fastvit_t8.apple_in1k NPU 推理适配

模型介绍

FastViT-T8 是一款高效的混合视觉 Transformer 模型,由 Apple 团队提出。该模型结合了 CNN 和 Transformer 的优势,通过结构重参数化技术实现了快速推理。模型在 ImageNet-1k 数据集上训练,适用于图像分类任务。

  • 原始模型地址: https://huggingface.co/timm/fastvit_t8.apple_in1k
  • ModelScope 地址: https://www.modelscope.cn/models/timm/fastvit_t8.apple_in1k
  • 任务类型: 图像分类 (Image Classification)
  • 模型框架: PyTorch + timm

模型信息

属性值
参数量 (Params)4.0M
GMACs0.7
激活值 (Activations)8.6M
输入尺寸256 × 256
类别数1000
预处理均值[0.485, 0.456, 0.406]
预处理标准差[0.229, 0.224, 0.225]

NPU 适配说明

此模型基于 torch_npu 在华为昇腾 NPU 上完成推理适配。模型权重通过 ModelScope 下载,加载到 timm 定义的模型结构中。CPU 和 NPU 推理结果对比验证精度满足要求。

环境准备

系统要求

  • 华为昇腾 NPU (Ascend910)
  • CANN 8.5.1
  • Python 3.11
  • torch 2.9.0 + torch_npu 2.9.0

安装依赖

pip install -r requirements.txt

依赖列表见 requirements.txt。

推理命令

CPU 推理

python3 inference.py --device cpu

NPU 推理

python3 inference.py --device npu

推理结果

使用随机噪声图片作为输入进行推理测试。

CPU 推理结果

Average inference time: 94.37 ms (10 runs)

Top-5 predictions:
  Class 21: 0.084883
  Class 22: 0.047830
  Class 127: 0.045315
  Class 23: 0.034046
  Class 128: 0.031133

NPU 推理结果

Average inference time: 8.27 ms (10 runs)

Top-5 predictions:
  Class 21: 0.085732
  Class 22: 0.045950
  Class 127: 0.044512
  Class 23: 0.033546
  Class 128: 0.031191

推理性能对比

设备平均推理耗时 (ms)加速比
CPU94.371.0×
NPU (Ascend910)8.2711.4×

NPU 推理相比 CPU 加速约 11.4 倍。

CPU/NPU 精度测试

测试方法

使用相同输入(固定随机种子)分别在 CPU 和 NPU 上运行推理,对比输出 logits 和概率分布。

运行精度测试脚本:

python3 compare_cpu_npu.py

精度测试结果

指标值
Logits 余弦相似度0.99986754
Logits 最大绝对误差0.06208134
Logits 平均绝对误差0.01868037
Probabilities 最大绝对误差0.00188066
Probabilities 平均绝对误差0.00001844
Top-1 类别一致率100.00%
Top-5 类别一致率100.00%

Top-5 概率详细对比

RankCPU ClassCPU ProbNPU ClassNPU ProbProb Diff
1210.08488289210.085732500.00084961
2220.04783030220.045949650.00188066
31270.045315451270.044512060.00080339
4230.03404604230.033545610.00050043
51280.031133231280.031191040.00005781

精度测试结论

NPU 与 CPU 推理误差为 0.19%(概率最大绝对误差),符合精度误差小于 1% 的要求。

Top-1 和 Top-5 类别完全一致,余弦相似度为 0.9999,表明 NPU 推理结果与 CPU 高度一致。

部署和推理方法

核心代码

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

# 创建模型
model_name = 'fastvit_t8.apple_in1k'
model = timm.create_model(model_name, pretrained=False)

# 加载本地权重
state_dict = load_file('/path/to/model.safetensors')
model.load_state_dict(state_dict)

# 移至 NPU
model = model.to('npu')
model.eval()

# 预处理
config = resolve_data_config({}, model=model)
transform = create_transform(**config)
img = Image.open('image.jpg')
input_tensor = transform(img).unsqueeze(0).to('npu')

# 推理
with torch.no_grad():
    output = model(input_tensor)

# 后处理
probs = torch.nn.functional.softmax(output, dim=1)
top_probs, top_indices = torch.topk(probs, 5, dim=1)

推理截图

推理截图

推理成功证据

以下日志展示了 NPU 推理成功的关键信息:

Input shape: torch.Size([1, 3, 256, 256])
CPU Top-1 class: 21, prob: 0.084883
NPU Top-1 class: 21, prob: 0.085732
8. Top-1 类别一致率: 100.00%
9. Top-5 类别一致率: 100.00%
10. Top-5 概率详细对比:

模型标签

  • #+NPU
  • #+CV
  • #+图像分类
  • #+昇腾
  • #+FastViT
  • #+Transformer

仓库说明

本仓库为 fastvit_t8.apple_in1k 模型在华为昇腾 NPU 上的适配仓库,包含完整的推理脚本、精度测试脚本和部署说明。