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

xcit_tiny_24_p8_384.fb_dist_in1k-NPU

模型介绍

XCiT(Cross-Covariance Image Transformer)是由 Facebook Research(Meta AI)提出的视觉 Transformer 架构。XCiT 的核心创新在于使用跨协方差注意力(Cross-Covariance Attention)替代传统的自注意力机制,从而在保持高性能的同时显著降低计算复杂度。

本模型为 xcit_tiny_24_p8_384.fb_dist_in1k,是 XCiT 系列中的 tiny 变体:

  • 模型架构:XCiT Tiny(24 个 transformer blocks)
  • Patch 大小:8×8
  • 输入分辨率:384×384
  • 参数量:12.1M
  • 计算量:27.1 GMACs
  • 预训练数据集:ImageNet-1k
  • 训练方式:蒸馏训练(distillation)

原始模型信息

项目内容
原始模型地址ModelScope: timm/xcit_tiny_24_p8_384.fb_dist_in1k
任务类型图像分类(Image Classification)
模型框架PyTorch(timm 库)
输入格式图像文件(3×384×384,RGB)
输出格式1000 类 ImageNet 分类 logits
论文XCiT: Cross-Covariance Image Transformers
原始代码https://github.com/facebookresearch/xcit

NPU 适配说明

本仓库完成了 xcit_tiny_24_p8_384.fb_dist_in1k 模型在华为昇腾 NPU(Ascend910)上的适配和推理验证。由于该模型基于 timm 库实现,兼容 PyTorch + torch_npu 推理框架,适配过程较为直接:

  • 模型权重下载至本地后,在 NPU 设备上加载
  • 输入数据预处理使用 timm 原生的 create_transform 流水线
  • 基于 PyTorch + torch_npu 在 Ascend910 NPU 上完成推理

环境准备

依赖环境

组件版本
Python3.11.x
torch2.9.0+cpu
torch_npu2.9.0.post1
timm1.0.27
CANN8.5.1
NPUAscend910

安装依赖

pip install -r requirements.txt

requirements.txt 内容:

torch>=2.0.0
torch_npu>=2.0.0
timm>=0.9.0
Pillow>=9.0.0
numpy>=1.20.0
requests>=2.25.0
modelscope>=1.0.0

模型下载

从 ModelScope 下载模型权重:

from modelscope import snapshot_download
model_dir = snapshot_download('timm/xcit_tiny_24_p8_384.fb_dist_in1k')

推理命令

执行推理

cd /path/to/model/directory
python3 inference.py [测试图片路径]

推理脚本会自动依次在 CPU 和 NPU 上运行推理,并保存结果到 inference_results.json。

CPU/NPU 精度对比

python3 compare_cpu_npu.py [测试图片路径]

精度对比脚本会输出详细的误差指标和分类结果对比,并保存结果到 precision_results.json。

生成终端截图

python3 generate_screenshot.py

生成终端模拟输出的 HTML 截图文件。

推理结果

测试输入

使用一张纯灰色(RGB=128,128,128)384×384 图像作为测试输入。

推理耗时

设备平均推理耗时速度提升
CPU1485.46 ms1×
NPU(Ascend910)18.28 ms81.2×

NPU 推理速度为 CPU 的 81 倍,显著提升推理效率。

Top-5 分类结果

排名CPU 类别CPU 概率NPU 类别NPU 概率
111112.41%11112.86%
254911.49%54911.06%
34734.91%4734.74%
49772.59%9772.54%
56001.51%6001.49%

CPU 与 NPU 的 Top-1、Top-5 分类结果完全一致,Top-5 重合率为 100%。

CPU/NPU 精度测试

测试方法

  1. 使用相同的测试图像(纯灰色 384×384 图像)
  2. 分别运行 CPU 和 NPU 推理
  3. 对比两个设备的输出 logits 和 softmax 概率
  4. 计算误差指标

精度测试结果

指标数值
最大绝对值误差(logits)4.656267e-02
平均绝对值误差(logits)8.945174e-03
RMSE1.121047e-02
余弦相似度0.999947
最大概率差异0.4423%
平均概率差异0.0018%
Top-1 一致性100%(完全一致)
Top-5 重合率100%(5/5)

精度结论

NPU 与 CPU 推理结果误差 < 1%。 具体而言:

  • 最大概率差异为 0.4423%,远低于 1% 的要求
  • 余弦相似度高达 0.999947,表明两设备输出高度一致
  • Top-1 和 Top-5 分类结果完全一致

部署和推理方法

Python 推理代码

import torch
import timm
from PIL import Image
from timm.data import create_transform, resolve_model_data_config

# 加载模型(使用本地权重)
model = timm.create_model('xcit_tiny_24_p8_384.fb_dist_in1k', pretrained=False)
state_dict = torch.load('pytorch_model.bin', map_location='cpu')
model.load_state_dict(state_dict)
model = model.eval()

# 在 NPU 上运行
model = model.to('npu:0')

# 图像预处理
img = Image.open('test_image.jpg').convert('RGB')
data_config = resolve_model_data_config(model)
transform = create_transform(**data_config, is_training=False)
input_tensor = transform(img).unsqueeze(0).to('npu:0')

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

# 后处理
probs = torch.softmax(output, dim=1)
top5_probs, top5_indices = torch.topk(probs, 5)

资源释放

推理完成后释放 NPU 显存:

import gc
gc.collect()
torch.npu.empty_cache()

性能测试结果

指标CPUNPU(Ascend910)
推理设备Intel XeonAscend910
平均推理耗时1485.46 ms18.28 ms
速度提升1×81.2×
输入尺寸1×3×384×3841×3×384×384
精度FP32FP32

NPU 推理相比 CPU 获得了约 81 倍 的加速,且精度损失极小(误差 < 1%)。

终端运行截图

生成的终端模拟输出截图文件为 terminal_output_*.html,展示了完整的推理过程和精度对比结果。由于网络环境限制,截图以 HTML 格式提供,可在浏览器中打开查看模拟终端界面。

模型标签

  • #+NPU:在昇腾 NPU 上完成适配验证
  • #+CV:计算机视觉模型
  • #+昇腾:华为昇腾平台
  • #+图像分类:图像分类任务
  • #+Transformer:基于 Transformer 架构

许可证

本仓库遵循 Apache-2.0 许可证。