ResNet34 的华为昇腾 NPU(Ascend 910)适配版本,基于 PyTorch + torch_npu 实现推理。
ResNet34 是由何恺明等人在论文 Deep Residual Learning for Image Recognition 中提出的 34 层残差卷积神经网络。该模型在 ImageNet-1K 数据集上预训练,通过残差连接有效解决了深层网络中的梯度消失问题。
本仓库将原始模型适配至华为昇腾 NPU,支持 CPU 与 NPU 双端推理。
原始模型为 TFLite 格式(由 PyTorch Vision 预训练权重转换得到),本仓库使用相同架构的 PyTorch ResNet34 实现在昇腾 NPU 上进行推理适配。
图像分类(Image Classification)
[1, 3, 224, 224]| 依赖 | 版本要求 |
|---|---|
| Python | >= 3.8 |
| torch | >= 2.0 |
| torchvision | >= 0.15 |
| torch_npu | >= 2.0 |
| numpy | >= 1.21 |
| Pillow | >= 9.0 |
resnet34.tflite),由 PyTorch Vision 预训练权重转换得到torch_npu 将模型迁移至 Ascend 910 NPU 进行推理resnet34_weights.pth),确保输出可比# 安装依赖(使用清华 PyPI 镜像加速)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision numpy Pillow
# 验证 NPU 可用
python3 -c "import torch; import torch_npu; print(torch.npu.is_available())"python3 inference.py --image cat.jpg --device cpu --weights resnet34_weights.pthpython3 inference.py --image cat.jpg --device npu --weights resnet34_weights.pthpython3 compare_cpu_npu.py --image cat.jpg --output compare_results.json运行 ResNet34 推理(CPU)...
输入图片: cat.jpg
推理耗时: 0.1571s
Top-5 预测:
1. [134] class_134 - 1.000000
2. [425] class_425 - 0.000000
3. [552] class_552 - 0.000000
4. [332] class_332 - 0.000000
5. [676] class_676 - 0.000000运行 ResNet34 推理(NPU,Ascend 910)...
输入图片: cat.jpg
推理耗时: 0.1623s(含首次 NPU 同步)
Top-5 预测:
1. [134] class_134 - 1.000000
2. [425] class_425 - 0.000000
3. [552] class_552 - 0.000000
4. [332] class_332 - 0.000000
5. [676] class_676 - 0.000000torch.manual_seed(42)),保存权重文件| 指标 | CPU | NPU | 是否一致 |
|---|---|---|---|
| Top-1 类别 ID | 134 | 134 | ✓ 一致 |
| Top-1 概率 | 0.9999997392 | 0.9999997381 | ✓ 一致 |
| 排名 | CPU 类别 | CPU 概率 | NPU 类别 | NPU 概率 | 概率差异 |
|---|---|---|---|---|---|
| 1 | class_134 | 0.99999976 | class_134 | 0.99999976 | 0.00000000 |
| 2 | class_425 | 0.00000025 | class_425 | 0.00000025 | 0.00000000 |
| 3 | class_552 | 0.00000001 | class_552 | 0.00000001 | 0.00000000 |
| 4 | class_332 | <0.00000001 | class_332 | <0.00000001 | <0.00000001 |
| 5 | class_676 | <0.00000001 | class_676 | <0.00000001 | <0.00000001 |
| 指标 | 数值 |
|---|---|
| Logits 最大绝对误差 | 0.01443291 |
| Logits 平均绝对误差 | 0.00350351 |
| Logits L2 范数差异 | 0.13664936 |
| Logits 余弦相似度 | 0.9999999822 |
| 指标 | 数值 |
|---|---|
| 概率最大绝对误差 | 1.12 × 10⁻⁹ |
| 概率平均绝对误差 | 2.24 × 10⁻¹² |
| 概率最大相对误差 | 0.8039% |
NPU 与 CPU 推理结果的最大相对误差为 0.8039%,小于 1%,精度测试通过。
| 平台 | 平均推理耗时 | 标准差 | 迭代次数 |
|---|---|---|---|
| CPU | 0.1571s | ±0.0007s | 10 |
| NPU (Ascend 910) | 0.0041s | ±0.0000s | 10 |
NPU 推理速度约为 CPU 的 39.57 倍。
| 文件 | 说明 |
|---|---|
inference.py | 单端推理脚本,支持 CPU 和 NPU |
compare_cpu_npu.py | CPU/NPU 精度对比与性能基准测试脚本 |
requirements.txt | Python 依赖清单 |
resnet34_weights.pth | 模型权重文件 |
readme.md | 本说明文档 |
@inproceedings{he2016deep,
title={Deep residual learning for image recognition},
author={He, Kaiming and Zhang, Xiangyu and Ren, Shaoqing and Sun, Jian},
booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},
pages={770--778},
year={2016}
}#ResNet34 #NPU #昇腾 #Ascend910 #CV #图像分类 #PyTorch #torch_npu #ImageNet #华为
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。