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

skresnext50_32x4d.ra_in1k-NPU

模型介绍

skresnext50_32x4d.ra_in1k 是一个基于 Selective Kernel Networks (SKNet) 架构的图像分类模型。该模型结合了 ResNeXt 的分组卷积思想和 SKNet 的动态选择机制,通过自适应感受野大小的卷积核选择来提升特征表达能力。

  • 模型架构: SKResNeXt50 (32×4d)
  • 预训练数据集: ImageNet-1k
  • 预训练配置: RA (Regularized Attention)
  • 输入尺寸: 3×224×224
  • 参数量: ~25M

原始模型地址

  • ModelScope: https://www.modelscope.cn/models/timm/skresnext50_32x4d.ra_in1k
  • HuggingFace: https://huggingface.co/timm/skresnext50_32x4d.ra_in1k

任务类型

图像分类(Image Classification),Top-1 / Top-5 预测

模型框架

  • PyTorch + torch_npu
  • timm (PyTorch Image Models)

输入格式

  • 图像: RGB 格式,尺寸 224×224
  • 预处理: Normalization (mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
  • 插值方式: Bicubic

输出格式

  • logits: 形状 (1, 1000) 的类别分数
  • probabilities: 经 Softmax 归一化后的概率分布
  • Top-5 预测类别及其概率

依赖环境

组件版本
Python3.11.14
PyTorch2.9.0
torch_npu2.9.0.post1
timm≥0.9.0
torchvision≥0.15.0
Pillow≥10.0.0
NumPy≥1.22.0

NPU 适配说明

该模型基于 PyTorch + torch_npu 在昇腾 Ascend910 NPU 上完成适配。适配过程中的关键点:

  1. 模型权重从 ModelScope 下载,加载到 CPU 后通过 .to(device) 迁移至 NPU
  2. NPU 推理与 CPU 推理使用相同的输入数据和预处理流程
  3. 精度对比涵盖 logits 层面的数值差异和 Top-1/Top-5 分类一致性
  4. 无需修改模型结构,PyTorch 模型可直接在 NPU 上运行

环境准备

# 安装依赖
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple timm torchvision Pillow numpy

# 下载模型权重(使用 ModelScope)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple modelscope
python -c "from modelscope.hub.snapshot_download import snapshot_download; snapshot_download('timm/skresnext50_32x4d.ra_in1k', cache_dir='./cache')"

推理命令

CPU 推理

python3 inference.py --model skresnext50_32x4d.ra_in1k --device cpu

NPU 推理

python3 inference.py --model skresnext50_32x4d.ra_in1k --device npu

推理结果

指标CPUNPU
Top-1 类别916 (class 916)916 (class 916)
Top-1 概率0.1563600.156525
Top-2 类别722722
Top-2 概率0.1368900.137277
Top-3 类别417417
Top-3 概率0.0343080.034273
推理耗时0.3630s0.2221s

Top-5 预测类别完全一致:[916, 722, 417, 549, 650]

部署和推理方法

该模型可直接使用 PyTorch + torch_npu 部署在昇腾 NPU 上:

import torch
import timm

# 加载模型
model = timm.create_model('skresnext50_32x4d.ra_in1k', pretrained=True)
model = model.to('npu:0')
model.eval()

# 准备输入
from PIL import Image
from torchvision import transforms
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
img = Image.open('test.jpg').convert('RGB')
input_tensor = transform(img).unsqueeze(0).to('npu:0')

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

CPU/NPU 精度测试方法

运行对比脚本:

python3 compare_cpu_npu.py --model skresnext50_32x4d.ra_in1k

该脚本执行以下步骤:

  1. 加载相同的预训练模型权重到 CPU 和 NPU
  2. 使用相同的合成测试图像进行预处理
  3. 分别在 CPU 和 NPU 上运行推理
  4. 计算 logits 和概率分布的差异指标
  5. 输出对比结果 JSON

CPU/NPU 精度测试结果

精度指标数值
Max Absolute Error (logits)0.00705171
Mean Absolute Error (logits)0.00107907
L2 Difference0.04675826
Cosine Similarity (logits)0.9999991655
Mean Relative Error0.466517%
Max Probability Difference0.00038768
Top-1 AgreementTrue
Top-5 AgreementTrue

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

概率最大差异仅为 0.039%,余弦相似度 > 0.999999,Top-1 和 Top-5 分类结果完全一致。

性能测试结果

设备推理耗时 (秒)加速比
CPU0.36301.00×
NPU (Ascend910)0.22211.63×

NPU 推理在 Ascend910 上实现了约 1.63 倍的加速。

模拟终端输出截图

终端截图