g
gcw_HxvH3o63/resnet10t_c3_in1k_ascend_model
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

timm/resnet10t.c3_in1k 昇腾 NPU 适配

1. 模型信息

  • 模型名称:timm/resnet10t.c3_in1k
  • 模型来源:Hugging Face / timm
  • 模型类型:ImageNet-1k 图像分类模型
  • 模型结构:ResNet10t
  • 输出类别数:1000
  • 输入尺寸:176 × 176
  • 推理框架:PyTorch + timm + torch-npu
  • 运行设备:Ascend NPU
  • 适配目标:完成 timm/resnet10t.c3_in1k 模型在昇腾 NPU 环境下的图像分类推理验证,并与 CPU 推理结果进行误差对比。

本项目面向昇腾 Model-Agent 模型适配大赛赛道一,完成 timm/resnet10t.c3_in1k 图像分类模型在 Ascend NPU 环境下的适配验证。项目基于 PyTorch、timm 和 torch-npu,完成测试图片生成、CPU 推理、NPU 推理、Top-5 分类输出、CPU/NPU 输出一致性对比以及验证材料整理。

2. 项目说明

timm/resnet10t.c3_in1k 是 timm 模型库中的 ImageNet-1k 图像分类模型。模型输入一张 RGB 图像后输出 1000 维 ImageNet 分类 logits,并进一步得到 Top-5 分类结果。

本次适配重点包括:

  1. 在 Ascend NPU Notebook 环境中安装依赖;
  2. 使用 timm 加载 resnet10t.c3_in1k 模型;
  3. 构造测试图片 test.jpg;
  4. 分别执行 CPU 与 NPU 图像分类推理;
  5. 保存 CPU/NPU 的 logits、概率和 Top-5 分类结果;
  6. 对 CPU 与 NPU 输出进行误差对比;
  7. 保存日志、截图和对比结果,用于赛道一模型适配验证提交。

3. 工程结构

.
├── README.md
├── make_test_image.py
├── inference.py
├── compare_cpu_npu.py
├── generate_report.py
├── requirements.txt
├── test.jpg
├── cpu_result.json
├── cpu_result.txt
├── cpu_infer.log
├── npu_result.json
├── npu_result.txt
├── npu_infer.log
├── compare_result.json
├── compare_result.txt
├── compare.log
├── fusion_result.json
├── npu_env.txt
└── screenshots/
    ├── npu_env.png
    ├── npu_result.png
    └── compare_result.png

其中:

  • make_test_image.py:测试图片生成脚本;
  • inference.py:CPU/NPU 推理脚本;
  • compare_cpu_npu.py:CPU/NPU 输出误差对比脚本;
  • generate_report.py:报告或结果整理脚本;
  • cpu_result.json:CPU 推理结构化结果;
  • cpu_result.txt:CPU 推理日志;
  • cpu_infer.log:CPU 推理补充日志;
  • npu_result.json:NPU 推理结构化结果;
  • npu_result.txt:NPU 推理日志;
  • npu_infer.log:NPU 推理补充日志;
  • compare_result.json:CPU/NPU 对比结构化结果;
  • compare_result.txt:CPU/NPU 对比文本结果;
  • compare.log:CPU/NPU 对比运行日志;
  • fusion_result.json:汇总结果文件;
  • npu_env.txt:NPU 环境信息;
  • screenshots/:验证截图材料。

4. 环境检查

在 Ascend NPU Notebook 中执行以下命令检查运行环境:

npu-smi info
python --version
python - <<'PY'
import torch
import timm

print("torch:", torch.__version__)
print("timm:", timm.__version__)

try:
    import torch_npu
    print("torch_npu import success")
    print("npu available:", torch.npu.is_available())
except Exception as e:
    print("torch_npu import failed:", repr(e))
PY

环境信息保存为:

npu_env.txt

环境检查截图保存为:

screenshots/npu_env.png

该截图用于证明当前运行环境存在 Ascend NPU,并记录 NPU 型号、运行状态和 Python 版本信息。

5. 测试输入

本项目使用测试图片:

test.jpg

推理流程包括:

  1. 读取测试图片;
  2. 使用 timm 对图片进行预处理;
  3. 构造模型输入张量;
  4. 输入 ResNet10t 图像分类模型;
  5. 输出 1000 维 ImageNet 分类 logits;
  6. 计算 softmax 概率;
  7. 输出 Top-5 分类结果。

输入张量形状为:

(1, 3, 176, 176)

6. CPU 推理

运行:

python inference.py --device cpu --image test.jpg --output cpu_result.json 2>&1 | tee cpu_result.txt

CPU 推理输出文件:

cpu_result.json
cpu_result.txt
cpu_infer.log

CPU 推理日志摘要如下:

Ascend NPU adaptation inference result

model: timm/resnet10t.c3_in1k
device: cpu
torch: 2.9.0+cpu
timm: 1.0.27
input_shape: (1, 3, 176, 176)
logits_shape: (1, 1000)
elapsed_ms: 91.209

CPU Top-5 输出如下:

1. class_index=823, prob=0.18721622, logit=8.11383629
2. class_index=688, prob=0.09064070, logit=7.38847542
3. class_index=616, prob=0.06827915, logit=7.10517645
4. class_index=818, prob=0.03319177, logit=6.38387394
5. class_index=409, prob=0.02759348, logit=6.19915152

7. NPU 推理

运行:

python inference.py --device npu --image test.jpg --output npu_result.json 2>&1 | tee npu_result.txt

NPU 推理输出文件:

npu_result.json
npu_result.txt
npu_infer.log

NPU 推理日志摘要如下:

Ascend NPU adaptation inference result

model: timm/resnet10t.c3_in1k
device: npu
torch: 2.9.0+cpu
timm: 1.0.27
input_shape: (1, 3, 176, 176)
logits_shape: (1, 1000)
elapsed_ms: 13785.357

NPU Top-5 输出如下:

1. class_index=823, prob=0.18749291, logit=8.11705589
2. class_index=688, prob=0.09090252, logit=7.39310265
3. class_index=616, prob=0.06830058, logit=7.10723305
4. class_index=818, prob=0.03314932, logit=6.38433695
5. class_index=409, prob=0.02758294, logit=6.20051241

NPU 推理结果截图保存为:

screenshots/npu_result.png

8. CPU/NPU 误差对比

运行:

python compare_cpu_npu.py 2>&1 | tee compare_result.txt

或:

python compare_cpu_npu.py 2>&1 | tee compare.log

对比脚本会读取 CPU 与 NPU 的 logits 和 probability 输出,并计算:

  • CPU Top-5;
  • NPU Top-5;
  • CPU/NPU Top-1 是否一致;
  • CPU/NPU Top-5 顺序是否一致;
  • CPU/NPU Top-5 集合是否一致;
  • logits 最大绝对误差;
  • logits 平均绝对误差;
  • logits 最大相对误差;
  • logits 余弦相似度;
  • probability 最大绝对误差;
  • probability 平均绝对误差;
  • CPU/NPU 运行耗时;
  • 是否通过基础验证。

对比结果保存为:

compare_result.txt
compare_result.json
compare.log
fusion_result.json

9. 自验证结果

本次 timm/resnet10t.c3_in1k 适配验证的 CPU/NPU 误差结果如下:

指标结果
CPU Top-5[823, 688, 616, 818, 409]
NPU Top-5[823, 688, 616, 818, 409]
CPU/NPU Top-1 是否一致True
CPU/NPU Top-5 顺序是否一致True
CPU/NPU Top-5 集合是否一致True
logits 最大绝对误差0.0050907135
logits 平均绝对误差0.0009247239
logits 最大相对误差0.1726411253
logits 余弦相似度0.9999998606
probability 最大绝对误差0.0002766848
probability 平均绝对误差0.0000013098
CPU 推理耗时91.209 ms
NPU 推理耗时13785.357 ms
基础验证是否通过True

对应的 compare_result.txt 内容如下:

CPU/NPU comparison for Ascend NPU adaptation

model: timm/resnet10t.c3_in1k
cpu_result: cpu_result.json
npu_result: npu_result.json

Top-k consistency:
  CPU top5: [823, 688, 616, 818, 409]
  NPU top5: [823, 688, 616, 818, 409]
  top1_same: True
  top5_order_same: True
  top5_set_same: True

Numerical metrics:
  logit_max_abs: 0.0050907135
  logit_mean_abs: 0.0009247239
  logit_max_rel: 0.1726411253
  logit_cosine_similarity: 0.9999998606
  probability_max_abs: 0.0002766848
  probability_mean_abs: 0.0000013098

Runtime:
  cpu_elapsed_ms: 91.209
  npu_elapsed_ms: 13785.357

pass_basic_check: True

根据上述结果,CPU 与 NPU 的 Top-1 结果一致,Top-5 顺序完全一致,Top-5 集合一致。logits 最大绝对误差为 0.0050907135,probability 最大绝对误差为 0.0002766848,logits 余弦相似度达到 0.9999998606,基础验证结果为 pass_basic_check: True。因此,本次 timm/resnet10t.c3_in1k 昇腾 NPU 推理验证通过。

10. 验证截图材料

10.1 NPU 环境截图

npu_env

该截图展示 Ascend NPU Notebook 环境、npu-smi info 输出和 Python 版本信息。

10.2 NPU 推理结果截图

npu_result

该截图展示 NPU 推理日志,包括模型名称、运行设备、输入张量形状、输出张量形状和 Top-5 分类结果。

10.3 CPU/NPU 误差对比截图

compare_result

该截图展示 CPU/NPU 输出误差对比结果,包括 Top-K 一致性、logits 误差、probability 误差、运行耗时和基础验证结论。

11. 运行日志与提交材料

本项目提交材料包括:

  • README.md
  • make_test_image.py
  • inference.py
  • compare_cpu_npu.py
  • generate_report.py
  • requirements.txt
  • test.jpg
  • cpu_result.json
  • cpu_result.txt
  • cpu_infer.log
  • npu_result.json
  • npu_result.txt
  • npu_infer.log
  • compare_result.json
  • compare_result.txt
  • compare.log
  • fusion_result.json
  • npu_env.txt
  • screenshots/npu_env.png
  • screenshots/npu_result.png
  • screenshots/compare_result.png

CPU 推理日志可查看:

cpu_result.txt
cpu_infer.log

NPU 推理日志可查看:

npu_result.txt
npu_infer.log

CPU/NPU 误差对比结果可查看:

compare_result.txt
compare_result.json
compare.log

12. 适配说明

本项目的适配工作包括:

  1. 在 Ascend NPU 环境中完成依赖安装;
  2. 使用 timm 加载 resnet10t.c3_in1k 模型;
  3. 编写测试图片生成脚本;
  4. 编写 CPU/NPU 统一推理脚本;
  5. 支持测试图片输入和 timm 图像预处理;
  6. 保存 CPU 与 NPU 的结构化分类结果;
  7. 编写 CPU/NPU logits 和 probability 误差对比脚本;
  8. 计算 Top-1 一致性、Top-5 顺序一致性、Top-5 集合一致性、logits 误差、probability 误差和余弦相似度;
  9. 输出日志、截图和对比报告。

13. 结论

本项目完成了 timm/resnet10t.c3_in1k 模型在 Ascend NPU 环境下的图像分类推理适配验证。

验证结果表明,NPU 推理能够正常完成模型加载、图像预处理和 Top-5 分类输出。CPU 与 NPU 的 Top-1 结果一致,Top-5 顺序完全一致,logits 最大绝对误差为 0.0050907135,probability 最大绝对误差为 0.0002766848,logits 余弦相似度达到 0.9999998606,并通过基础验证。本项目可作为赛道一模型适配提交材料。