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

tiny_vit_5m_224.dist_in22k - NPU 适配

模型介绍

tiny_vit_5m_224.dist_in22k 是基于 TinyViT(Tiny Vision Transformer)架构的图像分类模型,参数量约 5M,输入尺寸为 224x224。

TinyViT 是一种轻量级视觉 Transformer 架构,通过深度可分离卷积和注意力机制的混合设计,在保持较高精度的同时大幅降低了模型参数量和计算量,适合边缘设备和移动端部署。

该模型变体 在 ImageNet-22K 上使用蒸馏训练。

原始模型地址

  • ModelScope: https://www.modelscope.cn/models/timm/tiny_vit_5m_224.dist_in22k
  • HuggingFace: https://huggingface.co/timm/tiny_vit_5m_224.dist_in22k

任务类型

图像分类(Image Classification)

模型框架

  • PyTorch + timm

输入格式

  • 图像张量,形状为 [1, 3, 224, 224]
  • 归一化参数:mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)

输出格式

  • Logits 向量,形状为 [1, 21841](21841类)
  • 可通过 Softmax 转为概率分布

依赖环境

依赖版本
Python>= 3.10
PyTorch>= 2.0.0
torchvision>= 0.15.0
timm>= 1.0.0
modelscope>= 1.35.0
Pillow>= 10.0.0
numpy>= 1.24.0
safetensors>= 0.4.0

NPU 适配说明

该模型基于 PyTorch + timm 框架,在昇腾 NPU 上可直接使用 torch_npu 进行推理。适配过程主要包括:

  1. 从 ModelScope 下载模型权重(pytorch_model.bin)
  2. 使用 timm 创建对应架构模型并加载权重
  3. 将模型迁移至 NPU 设备(model.to("npu:0"))
  4. 使用合成测试图像进行推理验证,无需额外算子适配

环境准备

# 安装依赖
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision timm modelscope Pillow numpy safetensors

# 配置 git 用户信息(如需提交模型仓库)
git config --global user.name "m0_74196153"
git config --global user.email "iamnotphage@163.com"

推理命令

# inference.py
import torch
import timm
from timm.data import create_transform, resolve_data_config
from PIL import Image
from modelscope.hub.snapshot_download import snapshot_download
import numpy as np

# 下载模型
model_path = snapshot_download('timm/tiny_vit_5m_224.dist_in22k')

# 加载模型
model = timm.create_model('tiny_vit_5m_224', pretrained=False, num_classes=21841)
sd = torch.load(f'{model_path}/pytorch_model.bin', map_location='cpu', weights_only=True)
model.load_state_dict(sd, strict=True)

# NPU 推理
device = torch.device('npu:0')
model = model.to(device)
model.eval()

# 创建测试图像
img = Image.new('RGB', (224, 224), color=(128, 128, 128))

# 数据预处理
data_cfg = resolve_data_config(model.pretrained_cfg, model=model)
transform = create_transform(**data_cfg)
input_tensor = transform(img).unsqueeze(0).to(device)

# 推理
with torch.no_grad():
    logits = model(input_tensor)
    probs = torch.softmax(logits, dim=-1)

# 获取 Top-5 结果
top5_indices = logits[0].argsort(descending=True)[:5]
for i, idx in enumerate(top5_indices):
    print(f"Top{i+1}: class {idx}, prob={probs[0][idx]:.4%}")

推理结果

CPU 推理结果

设备平均推理耗时Top-1 类别Top-1 概率Top-5 类别
CPU97.59 ms120081.8201%12008, 12003, 12065, 12061, 21713

CPU Top-5 概率:

  • 类别 12008:1.8201%
  • 类别 12003:0.7361%
  • 类别 12065:0.7225%
  • 类别 12061:0.5412%
  • 类别 21713:0.3614%

NPU 推理结果

设备平均推理耗时Top-1 类别Top-1 概率Top-5 类别
NPU8.02 ms120081.8332%12008, 12003, 12065, 12061, 21713

NPU Top-5 概率:

  • 类别 12008:1.8332%
  • 类别 12003:0.7390%
  • 类别 12065:0.7264%
  • 类别 12061:0.5444%
  • 类别 21713:0.3619%

CPU/NPU 精度测试

测试方法

  1. 使用相同的合成测试图像作为输入
  2. 分别使用 CPU 和 NPU 进行推理
  3. 对比输出的 logits 向量和概率分布

精度指标

指标数值
Max absolute logits difference0.02145123
Mean absolute logits difference0.00232387
Cosine similarity0.9999897448
Max probability difference0.00013053
Mean probability difference0.00000013
Relative L2 error0.446364%
Top-1 match✓
Top-5 overlap5/5

精度结论

NPU 与 CPU 推理结果误差 < 1%,精度对齐通过。

  • Relative L2 error: 0.4464%(< 1% ✓)
  • Max probability difference: 0.013053%(< 1% ✓)
  • Cosine similarity: 0.999990(≈ 1.0 ✓)
  • Top-1 类别完全一致
  • Top-5 类别高度一致(5/5)

性能对比

设备平均推理耗时加速比
CPU97.59 ms1.0x(基线)
NPU8.02 ms12.2x

NPU 推理速度约为 CPU 的 12 倍。

部署和推理方法

该模型适用于图像分类任务。推理流程:

  1. 准备输入图像(JPG/PNG 格式)
  2. 预处理:缩放至 224x224,归一化
  3. 加载模型权重,迁移至 NPU
  4. 执行推理,获取 logits
  5. 通过 Softmax 获取概率分布
  6. 解析 Top-K 分类结果

模拟终端输出截图

终端输出

模型标签

  • #+NPU
  • #+CV
  • #+图像分类
  • #+昇腾
  • #+Vision-Transformer
  • #+TinyViT
  • #+timm
  • #+轻量级模型