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

Remote_sensing_image_classificatin-NPU

遥感图像分类模型在华为昇腾 NPU 上的适配部署。

模型介绍

本模型用于遥感图像二分类任务,支持三种经典卷积神经网络架构:AlexNet、ResNet34、VGG16。模型基于 PyTorch 框架实现,已适配华为昇腾 NPU (Ascend 910) 进行推理加速。

基本信息

项目内容
原始模型地址https://www.modelscope.cn/models/qzy3386401548/Remote_sensing_image_classificatin
任务类型图像分类 (Image Classification)
模型框架PyTorch
输入格式RGB 图像 (3, 224, 224),归一化到 [-1, 1]
输出格式二分类 logits,经 softmax 后得到类别概率
类别数量2
支持架构AlexNet, ResNet34, VGG16
许可证Apache License 2.0

环境准备

硬件要求

  • 华为昇腾 NPU (Ascend 910 系列)
  • CANN 25.5.2 及以上

依赖安装

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

NPU 环境配置

确保已安装 torch_npu:

python3 -c "import torch; import torch_npu; print('NPU available:', torch.npu.is_available())"

快速开始

模型下载

# 安装 ModelScope
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple

# 下载模型
from modelscope import snapshot_download
model_dir = snapshot_download('qzy3386401548/Remote_sensing_image_classificatin')

CPU 推理

# 单架构推理
python inference.py --arch resnet34 --device cpu

# 全部架构推理
python inference.py --arch all --device cpu --output cpu_results.json

NPU 推理

# 单架构推理
python inference.py --arch resnet34 --device npu

# 全部架构推理
python inference.py --arch all --device npu --output npu_results.json

CPU/NPU 精度对比

python compare_cpu_npu.py --arch all --output compare_results.json

NPU 适配说明

适配方式

本模型使用原生 PyTorch 算子,无需 Triton 或 CUDA 自定义算子,可直接运行在华为昇腾 NPU 上。适配主要涉及的修改:

  1. 将模型和张量从 CPU 移动至 NPU 设备 (model.to("npu:0"), tensor.to("npu:0"))
  2. NPU 推理结束后调用 torch.npu.synchronize() 确保计算完成
  3. 推理完毕后释放 NPU 显存 (torch.npu.empty_cache())

适配要点

  • 所有算子均为原生 PyTorch 算子 (Conv2d, BatchNorm2d, ReLU, Linear, MaxPool2d, AdaptiveAvgPool2d 等)
  • 无需 Triton 或 CUDA 算子替换
  • 推理精度与 CPU 完全一致

推理结果

AlexNet

设备预测类别类别0概率类别1概率推理耗时
CPU00.506046650.493953320.5177s
NPU00.506046000.493954031.6881s

ResNet34

设备预测类别类别0概率类别1概率推理耗时
CPU00.503563110.496436860.2834s
NPU00.503560480.496439520.1745s

VGG16

设备预测类别类别0概率类别1概率推理耗时
CPU00.500049410.499950561.4560s
NPU00.500049410.499950560.7923s

CPU/NPU 精度测试

测试方法

  1. 使用相同的固定随机种子初始化模型权重
  2. 使用相同的固定随机种子生成测试输入
  3. 分别在 CPU 和 NPU 上进行前向推理
  4. 比较 logits、概率输出和预测类别

精度测试结果

指标AlexNetResNet34VGG16
Logits MAE1.39×10⁻⁶5.30×10⁻⁶3.28×10⁻⁸
Logits Max AbsErr1.58×10⁻⁶9.00×10⁻⁶3.70×10⁻⁸
Logits Mean RelErr0.0116%0.0145%0.0042%
Probs MAE6.85×10⁻⁷2.64×10⁻⁶0.0
Probs Max AbsErr7.15×10⁻⁷2.65×10⁻⁶0.0
Cosine Similarity0.99999980.99999990.9999178
Top-1 Match✅ 一致✅ 一致✅ 一致

误差分析

  • Logits 平均相对误差: AlexNet 0.0116%, ResNet34 0.0145%, VGG16 0.0042%
  • 概率最大绝对误差: AlexNet 7.15×10⁻⁷, ResNet34 2.65×10⁻⁶, VGG16 0.0
  • 余弦相似度: 均 > 0.9999
  • Top-1 预测一致率: 100%

结论:NPU 与 CPU 推理结果误差 < 1%,精度完全达标。

性能测试

架构CPU 推理耗时NPU 推理耗时加速比
AlexNet0.5177s1.6881s0.31×
ResNet340.2834s0.1745s1.62×
VGG161.4560s0.7923s1.84×

注:AlexNet 在 NPU 上首次推理因包含设备初始化和 kernel 编译开销,耗时较长。ResNet34 和 VGG16 在 NPU 上均获得了显著的推理加速。对于批量推理和实际部署场景,NPU 的吞吐量优势会更加明显。

部署方法

单张图片推理示例

import torch
import numpy as np
from resnet34 import ResNet34

# 加载模型
model = ResNet34(num_classes=2)

# 移动到 NPU
model = model.to("npu:0")
model.eval()

# 准备输入 (模拟遥感图像)
dummy_input = torch.randn(1, 3, 224, 224).to("npu:0")

# 推理
with torch.no_grad():
    output = model(dummy_input)
    probs = torch.softmax(output, dim=-1)
    pred_class = torch.argmax(output, dim=-1)

print(f"预测类别: {pred_class.item()}, 概率: {probs.cpu().tolist()}")

批量推理示例

import torch
from resnet34 import ResNet34

model = ResNet34(num_classes=2).to("npu:0")
model.eval()

# 批量输入
batch = torch.randn(16, 3, 224, 224).to("npu:0")

with torch.no_grad():
    outputs = model(batch)
    predictions = torch.argmax(outputs, dim=-1)

print(f"批量预测结果: {predictions.cpu().tolist()}")

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。

模型标签

#+NPU #+CV #+昇腾 #图像分类 #遥感 #PyTorch #Ascend

仓库文件说明

文件说明
inference.py独立推理脚本,支持 CPU/NPU 和三种架构
compare_cpu_npu.pyCPU/NPU 精度对比脚本
requirements.txtPython 依赖列表
readme.md本说明文档
model_files/模型架构源文件 (alexnet.py, resnet34.py, vgg16.py)
compare_results.jsonCPU/NPU 精度对比详细结果
cpu_inference_results.jsonCPU 推理结果
npu_inference_results.jsonNPU 推理结果