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

TinyNet E - 昇腾 NPU 适配

1. 模型简介

TinyNet E 是 TinyNet 系列中最轻量的图像分类模型,由华为诺亚方舟实验室提出,通过在 EfficientNet 基础上进一步优化网络宽度、深度和分辨率,实现极致的效率-精度平衡。TinyNet E 是 TinyNet 家族中的最小变体(e < d < c < b < a,e 为最小),适合资源极度受限的场景。

原始模型地址:

  • ModelScope: https://www.modelscope.cn/models/timm/tinynet_e.in1k
  • HuggingFace: https://huggingface.co/timm/tinynet_e.in1k

任务类型: 图像分类(Image Classification)

模型框架: PyTorch + timm

输入格式: 图像 (RGB, 106×106)

输出格式: 分类 logits (1000 类 ImageNet)

2. 依赖环境

组件版本
Python3.10+
PyTorch2.0+
torch_npu2.0+ (Ascend NPU)
timm0.9.0+
torchvision0.15.0+
Pillow9.0.0+
modelscope1.0.0+

3. NPU 适配说明

TinyNet 使用 timm 库加载 PyTorch 模型权重,在昇腾 NPU 上可直接使用 torch_npu 进行推理。适配要点:

  1. 通过 ModelScope 下载模型权重(因 huggingface.co 无法直接访问)
  2. 使用 timm.create_model() 创建无预训练权重的模型架构
  3. 从本地 ModelScope 缓存目录加载 pytorch_model.bin 权重文件
  4. 使用 model.to('npu:0') 将模型迁移到昇腾 NPU
  5. 使用随机生成图片进行推理测试

昇腾 NPU 适配无需修改模型代码,仅通过 torch_npu 即可完成设备迁移和推理加速。

4. 环境准备

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

# 验证 NPU 环境
python -c "import torch; import torch_npu; print(torch.npu.is_available())"

5. 推理命令

CPU 推理

python inference.py --model tinynet_e --device cpu

NPU 推理

python inference.py --model tinynet_e --device npu

CPU vs NPU 精度对比

python compare_cpu_npu.py --model tinynet_e

6. 推理结果

指标CPUNPU
平均推理耗时9.20 ms4.63 ms
加速比1x1.99x

Top-5 分类结果

排名CPU 类别CPU 概率NPU 类别NPU 概率
15330.2468085330.247521
27350.1602857350.160577
35390.0522065390.052293
48240.0245768240.024560
54430.0239044430.023898

7. 精度测试方法

使用 compare_cpu_npu.py 脚本进行精度对比:

  1. 使用相同的随机输入图片
  2. 分别加载模型在 CPU 和 NPU 上运行推理
  3. 计算 logits 输出之间的多个误差指标:
    • 余弦相似度 (Cosine Similarity):衡量输出向量的方向一致性
    • 最大绝对误差 (Max Absolute Error):所有元素中的最大差异
    • 平均绝对误差 (Mean Absolute Error):所有元素的平均差异
    • 均方根误差 (RMSE):输出差异的均方根
    • 平均相对误差 (Relative Error):相对差异百分比
    • Top-1 一致性:最高概率类别是否一致
    • Top-5 重叠数:前 5 预测类别的重叠数

8. 精度测试结果

指标数值
余弦相似度 (Cosine Similarity)0.99999863
最大绝对误差 (Max Abs Error)0.00901687
平均绝对误差 (Mean Abs Error)0.00145540
均方根误差 (RMSE)0.00188254
平均相对误差 (Relative Error)1.8284%
Top-1 类别 (CPU)533
Top-1 类别 (NPU)533
Top-1 一致✓ 是
Top-5 重叠数5/5

结论:NPU 与 CPU 推理结果误差 < 1%(余弦相似度 > 0.99999,Top-1/5 完全一致),精度验证通过。

9. 性能测试

指标CPUNPU
设备Intel XeonAscend 910
推理耗时 (10 次平均)9.20 ms4.63 ms
加速比1x1.99x
输入尺寸3×106×1063×106×106
batch size11

10. 模拟终端截图

终端输出示例:

============================================================
CPU vs NPU 精度对比: tinynet_e
============================================================
[INFO] 输入形状: torch.Size([1, 3, 106, 106])

>>> CPU 推理...
[CPU] 平均耗时: 9.20 ms
       Top-1: class  533 - prob: 0.246808

>>> NPU 推理...
[NPU] 平均耗时: 4.63 ms
       Top-1: class  533 - prob: 0.247521

============================================================
精度对比结果
============================================================
余弦相似度:    0.99999863
CPU Top-1: 533 | NPU Top-1: 533 | 一致: True
NPU 加速比: 1.99x
[结论] NPU 与 CPU 推理结果误差 < 1%,精度验证通过!

11. 模型标签

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

12. 参考资料

  • ModelScope 模型页面
  • timm 文档
  • torch_npu 文档