Modotte/AIRealNetartificial、realModotte/AIRealNet 模型在昇腾 NPU 环境下的图像分类推理验证,并与 CPU 推理结果进行误差对比。本项目面向昇腾 Model-Agent 模型适配大赛赛道一,完成 Modotte/AIRealNet 图像二分类模型在 Ascend NPU 环境下的适配验证。项目基于 PyTorch、Transformers 和 torch-npu,完成模型下载、测试图片生成、CPU 推理、NPU 推理、分类输出、CPU/NPU 输出一致性对比以及验证材料整理。
Modotte/AIRealNet 是一个图像二分类模型,用于区分 AI-generated image 与 Real human image。本项目使用一张合成测试图片 test.jpg 作为输入,分别在 CPU 与 Ascend NPU 上执行推理,并比较两端输出 logits 与 probability 是否一致。
说明:test.jpg 是脚本生成的合成示意图,仅用于验证模型加载、图像预处理和前向推理流程,不用于评价模型在真实业务数据上的准确率。
本次适配重点包括:
Modotte/AIRealNet 模型;test.jpg;.
├── README.md
├── adaptation_report.md
├── download_model.sh
├── make_test_image.py
├── inference.py
├── compare_cpu_npu.py
├── build_readme.py
├── requirements.txt
├── test.jpg
├── cpu_result.json
├── cpu_result.txt
├── npu_result.json
├── npu_result.txt
├── compare_result.txt
├── fusion_result.json
├── run.log
└── screenshots/
├── npu_env.png
├── npu_result.png
└── compare_result.png其中:
download_model.sh:模型下载脚本;make_test_image.py:测试图片生成脚本;inference.py:CPU/NPU 推理脚本;compare_cpu_npu.py:CPU/NPU 输出误差对比脚本;build_readme.py:README 自动生成脚本;cpu_result.json:CPU 推理结构化结果;cpu_result.txt:CPU 推理日志;npu_result.json:NPU 推理结构化结果;npu_result.txt:NPU 推理日志;compare_result.txt:CPU/NPU 误差对比结果;fusion_result.json:结构化对比结果;run.log:完整运行日志;screenshots/:验证截图材料。在 Ascend NPU Notebook 中执行以下命令检查运行环境:
npu-smi info
python --version
python - <<'PY'
import torch
print("torch:", torch.__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环境检查截图保存为:
screenshots/npu_env.png该截图用于证明当前运行环境存在 Ascend NPU,并记录 NPU 型号、运行状态和 Python 版本信息。
运行:
bash download_model.sh模型来源为:
Modotte/AIRealNet模型文件默认下载到:
./model本次本地模型目录中包含:
model/config.json
model/model.safetensors
model/preprocessor_config.json
model/README.md说明模型配置、预处理配置和权重文件已经下载成功。
生成测试图片:
python make_test_image.py生成文件:
test.jpg推理流程包括:
pixel_values;Modotte/AIRealNet 图像二分类模型;本次输入张量形状为:
pixel_values: [1, 3, 256, 256]运行:
python inference.py --device cpu --model ./model --image test.jpg --output cpu_result.json 2>&1 | tee cpu_result.txtCPU 推理输出文件:
cpu_result.json
cpu_result.txtCPU 推理日志摘要如下:
Loading model: ./model
Model ID: Modotte/AIRealNet
Using device: cpu
Python: 3.11.14
torch: 2.9.0+cpu
transformers: 4.57.6
Input image: test.jpg
pixel_values shape: [1, 3, 256, 256] device: cpu
output_shape: [1, 2]CPU Top-K 输出如下:
rank 1: label_id=1, label=real, logit=1.57633865, probability=0.93286514
rank 2: label_id=0, label=artificial, logit=-1.05521846, probability=0.06713487运行:
python inference.py --device npu --model ./model --image test.jpg --output npu_result.json 2>&1 | tee npu_result.txtNPU 推理输出文件:
npu_result.json
npu_result.txtNPU 推理日志摘要如下:
Loading model: ./model
Model ID: Modotte/AIRealNet
Using device: npu:0
Python: 3.11.14
torch: 2.9.0+cpu
transformers: 4.57.6
Input image: test.jpg
pixel_values shape: [1, 3, 256, 256] device: npu:0
output_shape: [1, 2]NPU Top-K 输出如下:
rank 1: label_id=1, label=real, logit=1.57589209, probability=0.93280596
rank 2: label_id=0, label=artificial, logit=-1.05472064, probability=0.06719402NPU 推理结果截图保存为:
screenshots/npu_result.png日志中出现的 CANN owner warning 和:
path string is NULLpath string is NULL属于 torch-npu / CANN 环境提示信息,不影响模型加载、NPU 推理和结果保存。本次验证已经成功获得 NPU 分类输出。
运行:
python compare_cpu_npu.py --cpu cpu_result.json --npu npu_result.json --output_json fusion_result.json 2>&1 | tee compare_result.txt对比脚本会读取 CPU 与 NPU 的 logits 和 probability 输出,并计算:
对比结果保存为:
compare_result.txt本次 Modotte/AIRealNet 适配验证的 CPU/NPU 误差结果如下:
| 指标 | 结果 |
|---|---|
| CPU 输出形状 | (2,) |
| NPU 输出形状 | (2,) |
| CPU Top-K | [1, 0] |
| NPU Top-K | [1, 0] |
| CPU Top-1 | real |
| NPU Top-1 | real |
| CPU/NPU Top-1 是否一致 | True |
| CPU/NPU Top-K 顺序是否一致 | True |
| Top-K 重合数量 | 2/2 |
| logits 最大绝对误差 | 0.0004978180 |
| logits 平均绝对误差 | 0.0004721880 |
| logits RMSE | 0.0004728831 |
| logits 最大相对误差 | 0.0004717673 |
| logits 平均相对误差 | 0.0003775276 |
| logits 余弦相似度 | 1.0000000663 |
| probability 最大绝对误差 | 0.0000591874 |
| probability 平均绝对误差 | 0.0000591688 |
| probability 最大相对误差 | 0.0008810515 |
| probability 平均相对误差 | 0.0004722492 |
| probability 余弦相似度 | 0.9999999319 |
| 是否通过验证 | True |
对应的 compare_result.txt 内容如下:
CPU/NPU comparison result
==================================================
model: Modotte/AIRealNet
cpu_result: cpu_result.json
npu_result: npu_result.json
cpu_output_shape: (2,)
npu_output_shape: (2,)
cpu_topk: [1, 0]
npu_topk: [1, 0]
same_top1: True
same_topk_order: True
topk_overlap: 2/2
logit_max_abs: 0.0004978180
logit_mean_abs: 0.0004721880
logit_rmse: 0.0004728831
logit_max_rel: 0.0004717673
logit_mean_rel: 0.0003775276
logit_cosine_similarity: 1.0000000663
probability_max_abs: 0.0000591874
probability_mean_abs: 0.0000591688
probability_max_rel: 0.0008810515
probability_mean_rel: 0.0004722492
probability_cosine_similarity: 0.9999999319
passed: True根据上述结果,CPU 与 NPU 的 Top-1 结果均为 real,Top-K 顺序完全一致,Top-K 重合数量为 2/2。logits 最大绝对误差为 0.0004978180,probability 最大绝对误差为 0.0000591874,probability 余弦相似度达到 0.9999999319,验证结果为 passed: True。因此,本次 Modotte/AIRealNet 昇腾 NPU 推理验证通过。

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

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

该截图展示 CPU/NPU 输出误差对比结果,包括 Top-K 一致性、logits 误差、probability 误差和余弦相似度。
本项目提交材料包括:
README.mdadaptation_report.mddownload_model.shmake_test_image.pyinference.pycompare_cpu_npu.pybuild_readme.pyrequirements.txttest.jpgcpu_result.jsoncpu_result.txtnpu_result.jsonnpu_result.txtcompare_result.txtfusion_result.jsonrun.logscreenshots/npu_env.pngscreenshots/npu_result.pngscreenshots/compare_result.png完整运行日志可查看:
run.logCPU 推理日志可查看:
cpu_result.txtNPU 推理日志可查看:
npu_result.txtCPU/NPU 误差对比结果可查看:
compare_result.txt本项目的适配工作包括:
Modotte/AIRealNet 模型;本项目完成了 Modotte/AIRealNet 模型在 Ascend NPU 环境下的图像分类推理适配验证。
验证结果表明,NPU 推理能够正常完成模型加载、图像预处理和图像二分类输出。CPU 与 NPU 的 Top-1 结果均为 real,Top-K 顺序完全一致,logits 最大绝对误差为 0.0004978180,probability 最大绝对误差为 0.0000591874,probability 余弦相似度达到 0.9999999319,并通过验证。本项目可作为赛道一模型适配提交材料。