skresnext50_32x4d.ra_in1k 是一个基于 Selective Kernel Networks (SKNet) 架构的图像分类模型。该模型结合了 ResNeXt 的分组卷积思想和 SKNet 的动态选择机制,通过自适应感受野大小的卷积核选择来提升特征表达能力。
图像分类(Image Classification),Top-1 / Top-5 预测
| 组件 | 版本 |
|---|---|
| Python | 3.11.14 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| timm | ≥0.9.0 |
| torchvision | ≥0.15.0 |
| Pillow | ≥10.0.0 |
| NumPy | ≥1.22.0 |
该模型基于 PyTorch + torch_npu 在昇腾 Ascend910 NPU 上完成适配。适配过程中的关键点:
.to(device) 迁移至 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')"python3 inference.py --model skresnext50_32x4d.ra_in1k --device cpupython3 inference.py --model skresnext50_32x4d.ra_in1k --device npu| 指标 | CPU | NPU |
|---|---|---|
| Top-1 类别 | 916 (class 916) | 916 (class 916) |
| Top-1 概率 | 0.156360 | 0.156525 |
| Top-2 类别 | 722 | 722 |
| Top-2 概率 | 0.136890 | 0.137277 |
| Top-3 类别 | 417 | 417 |
| Top-3 概率 | 0.034308 | 0.034273 |
| 推理耗时 | 0.3630s | 0.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)运行对比脚本:
python3 compare_cpu_npu.py --model skresnext50_32x4d.ra_in1k该脚本执行以下步骤:
| 精度指标 | 数值 |
|---|---|
| Max Absolute Error (logits) | 0.00705171 |
| Mean Absolute Error (logits) | 0.00107907 |
| L2 Difference | 0.04675826 |
| Cosine Similarity (logits) | 0.9999991655 |
| Mean Relative Error | 0.466517% |
| Max Probability Difference | 0.00038768 |
| Top-1 Agreement | True |
| Top-5 Agreement | True |
结论:NPU 与 CPU 推理结果误差 < 1%,精度对齐通过。
概率最大差异仅为 0.039%,余弦相似度 > 0.999999,Top-1 和 Top-5 分类结果完全一致。
| 设备 | 推理耗时 (秒) | 加速比 |
|---|---|---|
| CPU | 0.3630 | 1.00× |
| NPU (Ascend910) | 0.2221 | 1.63× |
NPU 推理在 Ascend910 上实现了约 1.63 倍的加速。
