XCiT(Cross-Covariance Image Transformer)是由 Facebook Research(Meta AI)提出的视觉 Transformer 架构。XCiT 的核心创新在于使用跨协方差注意力(Cross-Covariance Attention)替代传统的自注意力机制,从而在保持高性能的同时显著降低计算复杂度。
本模型为 xcit_tiny_24_p8_384.fb_dist_in1k,是 XCiT 系列中的 tiny 变体:
| 项目 | 内容 |
|---|---|
| 原始模型地址 | 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 |
本仓库完成了 xcit_tiny_24_p8_384.fb_dist_in1k 模型在华为昇腾 NPU(Ascend910)上的适配和推理验证。由于该模型基于 timm 库实现,兼容 PyTorch + torch_npu 推理框架,适配过程较为直接:
create_transform 流水线| 组件 | 版本 |
|---|---|
| Python | 3.11.x |
| torch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| timm | 1.0.27 |
| CANN | 8.5.1 |
| NPU | Ascend910 |
pip install -r requirements.txtrequirements.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。
python3 compare_cpu_npu.py [测试图片路径]精度对比脚本会输出详细的误差指标和分类结果对比,并保存结果到 precision_results.json。
python3 generate_screenshot.py生成终端模拟输出的 HTML 截图文件。
使用一张纯灰色(RGB=128,128,128)384×384 图像作为测试输入。
| 设备 | 平均推理耗时 | 速度提升 |
|---|---|---|
| CPU | 1485.46 ms | 1× |
| NPU(Ascend910) | 18.28 ms | 81.2× |
NPU 推理速度为 CPU 的 81 倍,显著提升推理效率。
| 排名 | CPU 类别 | CPU 概率 | NPU 类别 | NPU 概率 |
|---|---|---|---|---|
| 1 | 111 | 12.41% | 111 | 12.86% |
| 2 | 549 | 11.49% | 549 | 11.06% |
| 3 | 473 | 4.91% | 473 | 4.74% |
| 4 | 977 | 2.59% | 977 | 2.54% |
| 5 | 600 | 1.51% | 600 | 1.49% |
CPU 与 NPU 的 Top-1、Top-5 分类结果完全一致,Top-5 重合率为 100%。
| 指标 | 数值 |
|---|---|
| 最大绝对值误差(logits) | 4.656267e-02 |
| 平均绝对值误差(logits) | 8.945174e-03 |
| RMSE | 1.121047e-02 |
| 余弦相似度 | 0.999947 |
| 最大概率差异 | 0.4423% |
| 平均概率差异 | 0.0018% |
| Top-1 一致性 | 100%(完全一致) |
| Top-5 重合率 | 100%(5/5) |
NPU 与 CPU 推理结果误差 < 1%。 具体而言:
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()| 指标 | CPU | NPU(Ascend910) |
|---|---|---|
| 推理设备 | Intel Xeon | Ascend910 |
| 平均推理耗时 | 1485.46 ms | 18.28 ms |
| 速度提升 | 1× | 81.2× |
| 输入尺寸 | 1×3×384×384 | 1×3×384×384 |
| 精度 | FP32 | FP32 |
NPU 推理相比 CPU 获得了约 81 倍 的加速,且精度损失极小(误差 < 1%)。
生成的终端模拟输出截图文件为 terminal_output_*.html,展示了完整的推理过程和精度对比结果。由于网络环境限制,截图以 HTML 格式提供,可在浏览器中打开查看模拟终端界面。
#+NPU:在昇腾 NPU 上完成适配验证#+CV:计算机视觉模型#+昇腾:华为昇腾平台#+图像分类:图像分类任务#+Transformer:基于 Transformer 架构本仓库遵循 Apache-2.0 许可证。