g
gyccc/apple-mobilevit-small-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

apple/mobilevit-small Ascend NPU 适配工程

#NPU #Ascend #MobileViT #ImageClassification


1. 模型介绍

MobileViT 是 Apple 提出的轻量级视觉 Transformer,专为移动设备设计。它将标准卷积与 Vision Transformer 的优势相结合,在保持较低参数量和计算量的同时,达到与大型 CNN 和 ViT 模型相当的精度。

  • 论文:MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer
  • 特点:混合 CNN-Transformer 架构,参数量约 5.6M,适合端侧和边缘 NPU 部署。

2. 任务类型

图片识别 / image-classification


3. 模型信息

项目内容
模型名称apple/mobilevit-small
模型链接https://ai.gitcode.com/hf_mirrors/apple/mobilevit-small
运行框架Transformers + torch_npu
硬件单卡 Ascend NPU
输入尺寸3 x 256 x 256(processor 自动处理)
输出类别1000(ImageNet-1k)

4. 硬件环境

  • NPU:Ascend910B4
  • 卡数:单卡
  • CANN 版本:8.5.1
  • npu-smi:25.5.1

5. 软件环境

包版本
Python3.11.14
torch2.9.0+cpu
torchvision0.24.0
torch_npu2.9.0.post1
transformers4.57.6
Pillow12.2.0
requests2.33.1
numpy1.26.4

6. 依赖安装

pip install -r requirements.txt

当前环境已预装 torch 和 torch_npu,requirements.txt 中未强制覆盖安装,避免破坏现有环境。


7. 模型权重来源

模型权重通过 Transformers from_pretrained 自动下载,默认镜像端点为:

HF_ENDPOINT=https://hf-mirror.com

若您的环境可直接访问 Hugging Face,可移除或修改该环境变量。


8. NPU 推理运行命令

python inference.py

脚本会自动:

  1. 检查 NPU 可用性;
  2. 加载 AutoImageProcessor 和 AutoModelForImageClassification;
  3. 将模型移动到 npu:0;
  4. 对 assets/test.jpg 执行推理;
  5. 输出 Top-5 分类结果;
  6. 保存结果到 logs/inference.log 和 logs/prediction.txt。

注意:assets/test.jpg 为占位图(PIL 生成的纯色 RGB 图片)。因当前环境无法直连外部网络下载真实测试图片,故使用占位图完成推理流程验证。若需真实图片分类效果,请替换为真实图像后重新运行。

实际运行结果(占位图)

RankLabelConfidence
1kite15.86%
2black stork, Ciconia nigra6.99%
3bald eagle, American eagle, Haliaeetus leucocephalus2.84%
4parachute, chute1.93%
5bee eater1.71%

9. inference.py 使用说明

  • 入口:inference.py
  • 配置项(文件内常量):
    • MODEL_NAME = "apple/mobilevit-small"
    • IMAGE_PATH = "assets/test.jpg"
    • DEVICE = "npu:0"
  • 异常处理:包含 NPU 不可用检测、模型加载失败、图片读取失败等异常捕获,失败时明确报错并退出。
  • 日志:完整运行日志写入 logs/inference.log。

10. eval_accuracy.py 精度验证方法和结果

运行命令

python eval_accuracy.py

验证逻辑

  1. 使用同一输入图片 assets/test.jpg;
  2. 固定预处理流程(AutoImageProcessor);
  3. 分别在 CPU 和 NPU 上加载模型并前向推理;
  4. 对比 logits 和 softmax 概率分布;
  5. 计算 max_abs_diff、mean_abs_diff、prob_max_diff、Top-1 一致性;
  6. 判定标准:prob_max_diff < 1% 且 Top-1 一致即为通过。

实际运行结果

指标数值
max_abs_diff (logits)1.66e-02
mean_abs_diff (logits)4.72e-03
prob_max_diff0.0951%
CPU Top-1class 21
NPU Top-1class 21
Top-1 一致True
结论PASS

logits 存在微小差异,但概率差异 < 1% 且 Top-1 完全一致,属于 CPU/NPU 浮点实现差异,不影响实际部署精度。


11. benchmark.py 性能测试方法和结果

运行命令

python benchmark.py

测试逻辑

  1. 加载模型并移动到 npu:0;
  2. 预热 5 次(warmup);
  3. 正式测试 20 次;
  4. 每次调用前后执行 torch.npu.synchronize() 确保计时准确;
  5. 统计平均 / 最小 / 最大延迟,并计算 images/s。

实际运行结果

指标数值
预热次数5
正式迭代20
平均延迟16.401 ms
最小延迟16.013 ms
最大延迟18.266 ms
吞吐量60.97 images/s

12. 日志文件说明

文件说明
logs/env_check.log环境检查:NPU 信息、Python 版本、依赖版本
logs/inference.loginference.py 完整运行日志
logs/prediction.txt预测标签和置信度(Top-5)
logs/accuracy.logeval_accuracy.py 精度对比日志
logs/benchmark.logbenchmark.py 性能测试日志

13. 常见问题

Q1: 模型下载超时或失败

A: 脚本已内置 HF_ENDPOINT=https://hf-mirror.com。若仍失败,请检查网络连通性,或手动下载模型到本地后修改 MODEL_NAME 为本地路径。

Q2: NPU 不可用

A: 脚本会明确报错 NPU is NOT available. Aborting inference.,请检查:

  • npu-smi info 是否正常;
  • torch_npu 是否正确安装;
  • 当前用户是否有 NPU 设备权限。

Q3: 推理结果置信度较低

A: 当前使用的是占位图(纯色 RGB),并非真实物体图像,因此模型输出置信度偏低且分布较散。替换为真实图片后即可获得正常分类结果。

Q4: 精度差异超过 1%

A: 若遇到概率差异 > 1%,请检查:

  • 是否使用了相同的 AutoImageProcessor 配置;
  • 是否存在随机性算子(如 Dropout),推理时应处于 eval() 模式;
  • 不同 CANN / torch_npu 版本的数值精度可能略有不同。

14. 目录结构

apple-mobilevit-small-NPU/
├── README.md
├── requirements.txt
├── inference.py
├── eval_accuracy.py
├── benchmark.py
├── assets/
│   └── test.jpg          # 占位测试图(可替换为真实图片)
├── logs/
│   ├── env_check.log
│   ├── inference.log
│   ├── prediction.txt
│   ├── accuracy.log
│   └── benchmark.log
├── scripts/              # 可放置辅助脚本
└── screenshots/          # 可放置截图

15. 提交状态

检查项状态
工程目录创建已完成
环境检查已完成
requirements.txt已完成
测试图片准备已完成(占位图)
inference.py已完成
eval_accuracy.py已完成
benchmark.py已完成
NPU 推理运行已完成
精度验证已完成(PASS)
性能测试已完成
README.md已完成

本工程为昇腾模型适配比赛提交项目,基于单卡 Ascend910B4 完成验证。