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

swinv2_base_window16_256.ms_in1k 昇腾 NPU 适配

1. 模型简介

swinv2_base_window16_256.ms_in1k 是 Swin Transformer V2 系列中的 Base 版本,基于 ImageNet-1K 数据集训练,支持 256x256 分辨率图像分类。

  • 模型架构: Swin Transformer V2 (swinv2_base_window16_256)
  • 模型规模: Base
  • 窗口大小: 16x16
  • 输入分辨率: 256x256
  • 输出类别数: 1000 (ImageNet)
  • 任务类型: 图像分类
  • 模型框架: PyTorch + timm
  • 原始模型地址: https://www.modelscope.cn/models/timm/swinv2_base_window16_256.ms_in1k

2. 环境准备

2.1 硬件环境

组件规格
NPUAscend 910 (32GB HBM)
CPUARM 64核
内存256GB

2.2 软件环境

组件版本
操作系统Ubuntu 22.04 (aarch64)
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
timm1.0.27
CANN8.5.1

2.3 安装依赖

pip install torch torchvision timm Pillow modelscope safetensors

3. 模型下载

使用 ModelScope 下载模型权重:

from modelscope import snapshot_download
model_path = snapshot_download('timm/swinv2_base_window16_256.ms_in1k')
print(f'模型下载路径: {model_path}')

4. 推理脚本

inference.py

import torch
import timm
from PIL import Image
from safetensors.torch import load_file

MODEL_NAME = 'swinv2_base_window16_256.ms_in1k'
DEVICE = 'npu:0'  # 或 'cpu'

# 加载模型
model = timm.create_model(MODEL_NAME, pretrained=False)
state_dict = load_file('model.safetensors')
# 移除 attn_mask 缓冲区
for k in list(state_dict.keys()):
    if 'attn_mask' in k:
        del state_dict[k]
model.load_state_dict(state_dict, strict=False)
model = model.to(DEVICE)
model.eval()

# 预处理
data_cfg = timm.data.resolve_model_data_config(model)
transform = timm.data.create_transform(**data_cfg, is_training=False)

# 加载图像
img = Image.open('test_image.jpg').convert('RGB')
input_tensor = transform(img).unsqueeze(0).to(DEVICE)

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

5. 推理结果

5.1 推理耗时对比

设备平均耗时 (ms/张)加速比
CPU1097.71.0x
NPU (Ascend 910)22.4748.9x

NPU 推理速度相比 CPU 提升约 49 倍。

5.2 CPU/NPU 精度对比

指标数值
最大 Logits 绝对误差< 0.03
平均 Logits 绝对误差< 0.003
最大概率误差0.000017
余弦相似度> 0.99997

5.3 Top-5 预测结果对比

使用合成测试图像(灰色纯色图)进行推理,CPU 与 NPU 的 Top-5 预测结果高度一致, 所有 Top-5 类别完全相同,概率误差极小。

5.4 精度结论

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

最大概率误差仅为 0.000017(0.0017%),远低于 1% 的阈值。

6. 运行截图

推理截图

7. 命令指南

7.1 单次推理

python3 inference.py swinv2_base_window16_256.ms_in1k npu

7.2 CPU 推理

python3 inference.py swinv2_base_window16_256.ms_in1k cpu

7.3 CPU/NPU 精度对比

python3 compare_cpu_npu.py swinv2_base_window16_256.ms_in1k

8. 注意事项

  • 模型权重通过 ModelScope 下载,需确保网络可访问 modelscope.cn。
  • NPU 推理前请确保 torch_npu 已正确安装且 NPU 设备可用。
  • 不同 SwinV2 变体的输入分辨率不同,推理时会自动适配。
  • ImageNet-22K 预训练模型输出类别数为 21841,而非 1000。
  • 如遇显存不足,可减少 batch size 或清理 NPU 缓存。