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

cv_beitv2-base_image-classification_patch16_224_pt1k_ft22k_in1k-NPU

#+NPU #+昇腾 #+Ascend910 #+CV #+图像分类 #+BEiT #+Transformer

模型介绍

本仓库包含了 cv_beitv2-base_image-classification_patch16_224_pt1k_ft22k_in1k 在华为昇腾 Ascend910 NPU 上的适配版本,支持 CPU 和 NPU 两种推理方式,并提供了完整的精度验证流程。

该模型来自 ModelScope,主要用于 图像分类 任务。

原始模型地址: cv_beitv2-base_image-classification_patch16_224_pt1k_ft22k_in1k

任务类型

图像分类

模型框架

PyTorch

输入格式

图像(Image)

输出格式

分类标签和置信度分数

依赖环境

依赖版本
Python>= 3.8
PyTorch>= 2.0.0
torch_npu>= 2.0.0
ModelScope>= 1.0.0
mmcv1.7.2
mmcls>= 0.20.0
NumPy>= 1.20.0
Pillow>= 9.0.0

NPU 适配说明

本适配基于华为 Ascend910 NPU(CANN 8.5.1,显存 64GB)完成。适配内容包括:

  1. 使用 ModelScope Pipeline 加载模型,支持 CPU 与 NPU 双平台推理
  2. 通过将模型权重移动到 NPU 设备实现 NPU 加速推理
  3. 对输入张量进行设备迁移以确保在 NPU 上正确运行
  4. 实现了 CPU 与 NPU 推理结果的精度对比验证

环境准备

# 安装基础依赖
pip install torch torch_npu modelscope mmcv mmcls Pillow numpy

# 设置环境变量
export MODELSCOPE_CACHE=/path/to/cache

推理命令

CPU 推理:

python3 inference.py

CPU vs NPU 精度对比:

python3 compare_cpu_npu.py

部署和推理方法

方式一:直接运行推理脚本

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

pipe = pipeline(Tasks.IMAGE_CLASSIFICATION, model='iic/cv_beitv2-base_image-classification_patch16_224_pt1k_ft22k_in1k', device='cpu')
result = pipe('https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/bird.JPEG')
print(result)

方式二:NPU 推理

import torch
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

pipe = pipeline(Tasks.IMAGE_CLASSIFICATION, model='iic/cv_beitv2-base_image-classification_patch16_224_pt1k_ft22k_in1k', device='cpu')
pipe.model.cls_model = pipe.model.cls_model.to('npu:0')
# Monkey-patch forward for NPU
orig_forward = pipe.model.forward
def npu_forward(inputs):
    for k, v in inputs.items():
        if isinstance(v, torch.Tensor):
            inputs[k] = v.to('npu:0')
    return orig_forward(inputs)
pipe.model.forward = npu_forward
result = pipe('test.jpg')
print(result)

CPU/NPU 精度测试方法

  1. 使用 ModelScope Pipeline 加载模型
  2. 在 CPU 上执行推理,记录输出分数和标签
  3. 将模型迁移到 NPU 设备,在 NPU 上执行推理
  4. 对比 CPU 与 NPU 输出的差异

关键比较指标:

  • 最大绝对误差(Max Absolute Difference):逐元素比较输出分数的最大差异
  • 相对误差(Relative Error):最大绝对误差 / 最大分数值
  • 余弦相似度(Cosine Similarity):衡量输出向量的方向一致性
  • Top-1 匹配率:最高概率标签是否一致
  • Top-5 一致率:前5个预测标签的重叠比例

CPU/NPU 精度测试结果

指标值
最大绝对误差0.00012767314910888672
相对误差0.014091057528275996%
余弦相似度1.0000001192092896
Top-1 标签匹配True
Top-5 一致率100.0%
CPU 推理耗时4480.442762374878 ms
NPU 推理耗时1400.965690612793 ms
NPU 加速比3.198110269506385x

精度结论

NPU 与 CPU 推理结果误差 < 1%(实际相对误差: 0.0141%),满足精度要求。NPU 推理结果与 CPU 推理结果在 Top-1 和 Top-5 级别上完全一致,余弦相似度接近 1.0,说明 NPU 上的推理精度与 CPU 基本一致。

性能测试结果

平台推理耗时 (ms)加速比
CPU4480.4427623748781.00x
NPU (Ascend910)1400.9656906127933.198110269506385x

运行截图

以下截图展示了推理的实际运行结果。

CPU 推理截图

CPU推理

NPU 推理截图

NPU推理

精度对比截图

精度对比

模型标签

#+NPU #+昇腾 #+Ascend910 #+CV #+图像分类 #+BEiT #+Transformer