g
gcw_C8PI9e90/convnext-tiny-fb-in22k-npu
模型介绍文件和版本Pull Requests讨论分析

ConvNeXt NPU 部署与推理

模型介绍

convnext tiny - fb in22k 是 ConvNeXt 系列图像分类模型的一个变体,基于纯卷积架构设计,在 ImageNet 等大规模数据集上预训练。ConvNeXt 通过借鉴 Swin Transformer 的设计思路对标准 ResNet 进行现代化改造,实现了媲美 Transformer 的性能。

  • 原始模型地址: https://www.modelscope.cn/models/timm/convnext_tiny.fb_in22k
  • 任务类型: 图像分类
  • 模型框架: PyTorch + timm
  • 输入格式: RGB 图像(224×224)
  • 输出格式: 类别概率分布(21841 类)
  • 参数量: ~28M
  • 输入数据: 单张图像,3 通道 RGB,分辨率 224×224

NPU 适配说明

本模型已适配昇腾 Ascend 910 NPU,支持在 NPU 上进行推理。核心适配工作包括:

  1. 使用 torch.npu 将模型加载到 NPU 设备。
  2. 使用 torch.npu.synchronize() 确保 NPU 同步执行。
  3. 对 NPU 进行 3 轮 warmup 后再执行正式推理。
  4. 单测结果已完成 CPU 与 NPU 的精度对比验证。

环境准备

系统要求

  • Python 3.11+
  • Ascend 910 NPU
  • CANN 8.5.1+
  • torch 2.0+
  • torch-npu 2.0+

安装依赖

pip install torch torch-npu timm Pillow safetensors

推理方法

使用推理脚本

# CPU 推理
python3 inference.py --model convnext_tiny.fb_in22k --device cpu --image test.jpg

# NPU 推理
python3 inference.py --model convnext_tiny.fb_in22k --device npu --image test.jpg

推理结果

CPU 推理结果


Device: CPU
Inference time: 0.2284s
Top-5 predictions:
  1. class=12061  prob=0.226947
  2. class=12003  prob=0.183073
  3. class=12002  prob=0.130906
  4. class=21666  prob=0.103476
  5. class=12008  prob=0.100319

NPU 推理结果


Device: NPU
Inference time: 0.0068s
Top-5 predictions:
  1. class=12061  prob=0.229016
  2. class=12003  prob=0.183348
  3. class=12002  prob=0.131206
  4. class=21666  prob=0.102437
  5. class=12008  prob=0.100250

CPU/NPU 精度对比

精度测试方法

  1. 分别在 CPU 和 NPU 上加载同一模型权重。
  2. 使用相同的输入图像,经过相同的预处理流程。
  3. 对比 CPU 与 NPU 的输出 logits,计算以下指标:
    • MAE(平均绝对误差)
    • MSE(均方误差)
    • 最大绝对误差
    • 余弦相似度
    • Top-100 平均相对误差
    • Top-1 分类一致性
    • Top-5 分类一致性

精度测试结果

指标值
MAE0.00495619
MSE0.00003806" if results else "-"
最大绝对误差0.03473377
余弦相似度0.99998093
Top-100 平均相对误差0.1999%
Top-1 分类一致是
Top-5 重叠数5/5

结论:NPU 与 CPU 推理结果误差 < 1%,精度完全满足要求。

精度结论

基于现有评测数据,CPU 与 NPU 的 余弦相似度 精度误差为 0.0019%,小于 1% 的精度要求。

性能对比

设备推理耗时
CPU0.2268 s
NPU0.0068 s
加速比33.12×

推理成功证据

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

Model moved to NPU (Ascend 910)
Input shape: torch.Size([1, 3, 224, 224])
Warming up...
Running inference...
=== Results ===
Device: NPU

模型标签

  • #+NPU
  • #+CV
  • #+图像分类
  • #+昇腾
  • #+ConvNeXt
  • #+timm

运行截图

运行截图

下载使用量0