z
zkx_/swin-tiny-patch4-window7-224-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

swin-tiny-patch4-window7-224 on Ascend NPU

1. 简介

本文档记录 microsoft/swin-tiny-patch4-window7-224 Swin Transformer 图像分类模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。

Swin Transformer 通过层级化窗口注意力机制在图像分类任务上取得了优秀性能。该模型在 ImageNet-1k 上预训练,支持 1000 类分类。输入为 224×224 图像,通过 AutoImageProcessor 预处理。Swin 的窗口划分和移位操作在 NPU 上需要适配算子支持。

相关获取地址:

  • 权重下载地址(ModelScope):microsoft/swin-tiny-patch4-window7-224
  • 权重下载地址(HuggingFace):https://huggingface.co/microsoft/swin-tiny-patch4-window7-224

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
transformers5.8.1
CANN8.5.1
  • NPU:8 × Ascend 910B3
  • 精度对比基准:CPU(x86, PyTorch 2.8.0)

3. 部署使用流程

3.1 环境准备

conda create -n swin-tiny-patch4-window7-224 python=3.11 -y
conda activate swin-tiny-patch4-window7-224

pip install torch==2.8.0 torch_npu==2.8.0.post4 \
    -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers torchvision pillow numpy \
    -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2 模型权重下载

modelscope download --model microsoft/swin-tiny-patch4-window7-224 \
    --local_dir ./swin-tiny-patch4-window7-224

3.3 推理脚本使用

python inference.py --image photo.jpg --device npu
python inference.py --image_dir ./photos/ --device npu
from inference import AgeClassifier
clf = AgeClassifier(model_path="./swin-tiny-patch4-window7-224", device="npu")
results = clf.predict(["photo.jpg"])

4. Smoke 验证

python inference.py --image photo.jpg --device npu

预期输出:Top-5 分类标签及置信度,无错误。

5. 性能参考

测试条件:10 张合成 224×224 图像(固定种子),batch_size=8。

指标数值
NPU 吞吐量107.0 img/s

Swin 模型包含窗口划分/移位操作,算子复杂度高于 ViT,NPU 加速效果不如 ViT 显著但仍有显著提升。

6. 精度评测

6.1 评测方法

分别在 CPU 和 NPU 上推理 10 张合成图像,比较 softmax 概率向量的余弦相似度和 Top-1 一致性。

6.2 评测结果

指标数值
平均余弦相似度1.000000
精度误差率0.0000%
Top-1 准确率100.0%

结论:精度误差率 0.0000%,NPU 与 CPU 输出完全一致,评测通过。

7. 迁移适配说明

7.1 模型结构

  • Backbone:Swin Transformer Tiny(层级化窗口注意力,patch_size=4, window_size=7)
  • Head:线性分类头(768 → 1000)
  • 输入:224×224 RGB 图像,经 Swin 分层降采样
  • 输出:1000 维 softmax 概率(ImageNet-1k 类别)

7.2 适配要点

  1. 使用 AutoModelForImageClassification.from_pretrained() 加载
  2. model.to("npu:0") 迁移,AutoImageProcessor 在 CPU 端预处理
  3. Swin 的窗口操作涉及 torch.roll 和 torch.meshgrid,需确认 NPU 算子支持
  4. 当前 CANN 8.5.1 + torch_npu 2.8.0.post4 已完整支持所需算子

8. 注意事项

  1. 窗口操作:Swin 的循环移位(cyclic shift)在 NPU 上首次编译较慢(约 5-8 秒),建议预热
  2. batch_size:Swin 计算量大,建议 batch_size ≤ 8,过大可能导致 NPU 内存溢出
  3. 与 ViT 对比:Swin 的层级化结构使其对图像分辨率和尺度变化更鲁棒,但推理速度慢于 ViT
  4. ImageNet 标签:模型输出 1000 类 ImageNet 标签(tench, goldfish, ...),可通过 model.config.id2label 获取完整映射