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

focalnet_tiny_lrf ImageNet-1K 昇腾 NPU 适配

模型介绍

本仓库包含了 focalnet_tiny_lrf.ms_in1k 模型在华为昇腾 NPU(Ascend 910)上的适配配置和推理部署代码。

FocalNet (Focal Modulation Network) 模型,参数量级为 Tiny (28M),在 ImageNet-1K 上预训练。

任务类型: 图像分类

模型框架: PyTorch + timm

原始模型地址

  • HuggingFace: https://huggingface.co/timm/focalnet_tiny_lrf.ms_in1k
  • ModelScope: https://www.modelscope.cn/models/timm/focalnet_tiny_lrf.ms_in1k

输入输出格式

项目说明
输入格式图像 (RGB)
输入尺寸根据模型配置自动确定
输出格式分类 logits (torch.Tensor)
输出类别数1000 (ImageNet-1K) / 21843 (ImageNet-22K)

依赖环境

依赖项版本要求
Python>= 3.8
PyTorch>= 2.0.0
torch_npu>= 2.1.0
timm>= 0.9.0
Pillow>= 10.0.0
NumPy>= 1.22.0

NPU 适配说明

本适配已验证在华为昇腾 Ascend 910 NPU 上运行。主要工作包括:

  1. 使用 torch_npu 将模型迁移至 NPU 设备
  2. 验证推理精度:NPU 与 CPU 输出结果的余弦相似度 > 0.999
  3. Top-1 / Top-5 分类结果完全一致
  4. NPU 推理相比 CPU 获得显著加速

环境准备

# 创建虚拟环境(可选)
python -m venv npu_env
source npu_env/bin/activate

# 安装依赖
pip install torch torch_npu timm Pillow numpy safetensors modelscope

推理命令

CPU 推理

python inference.py --device cpu

NPU 推理

python inference.py --device npu

指定输入图像

python inference.py --device npu --input /path/to/image.jpg

推理结果

CPU 推理性能

  • 平均推理时间:298.60 ms(10 次运行)
  • 输入图像为合成的梯度图像

NPU 推理性能

  • 平均推理时间:11.40 ms(10 次运行)
  • NPU 推理速度约为 CPU 的 26x

CPU Top-5 预测结果

NPU Top-5 预测结果

CPU/NPU 精度测试

测试方法

  1. 在 CPU 上运行模型推理,保存 logits 输出
  2. 在 NPU 上使用相同输入运行模型推理,保存 logits 输出
  3. 将 logits 转换为概率分布(softmax)
  4. 对比 CPU 和 NPU 的输出概率分布

精度测试结果

指标数值
Max Absolute Error (Logits)0.02292204
Max Probability Difference0.00098842
Cosine Similarity0.9999927872
Top-1 Match Rate100.00

精度测试结论

NPU 与 CPU 推理结果误差小于 1%,精度测试通过。

NPU 上的推理结果与 CPU 高度一致:

  • 余弦相似度达到 0.9999927872
  • Top-1 分类结果完全相同(匹配率 100.00)
  • Top-5 分类结果完全一致
  • 最大概率差异仅为 0.00098842

部署和推理方法

Python 推理代码示例

import torch
import torch_npu
import timm
from PIL import Image
from timm.data import create_transform, resolve_data_config

# 加载模型
model_name = "focalnet_tiny_lrf.ms_in1k"
model = timm.create_model(model_name, pretrained=True)
model = model.to("npu:0")
model.eval()

# 图像预处理
data_config = resolve_data_config(model.pretrained_cfg, model=model)
transform = create_transform(**data_config)

# 加载并预处理图像
img = Image.open("image.jpg").convert("RGB")
input_tensor = transform(img).unsqueeze(0).to("npu:0")

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

# 获取预测结果
probs = torch.nn.functional.softmax(output, dim=-1)
top5_probs, top5_indices = torch.topk(probs, 5, dim=-1)
for i in range(5):
    print(f"class {top5_indices[0][i].item()}: {top5_probs[0][i].item():.4f}")

推理成功证据

以下日志展示了 NPU 推理成功的关键信息:

CPU top-1 class:             646 (prob: 0.33354604)
NPU top-1 class:             646 (prob: 0.33301890)
Top-1 match rate:         100.00%
CPU top-5 classes:      [646 549 539 700 714]
NPU top-5 classes:      [646 549 539 700 714]
Top-5 overlap:          5/5

模型标签

  • #+NPU
  • #+CV
  • #+图像分类
  • #+昇腾
  • #+Ascend
  • #+FocalNet

适配平台: 华为昇腾 Ascend 910 PyTorch 版本: 2.1.0 torch_npu 版本: 2.1.0 timm 版本: 1.0.27 适配日期: 2026年5月