z
zkx_/mobilenetv3_small_075.lamb_in1k-ascend
模型介绍文件和版本Pull Requests讨论分析

mobilenetv3_small_075.lamb_in1k on Ascend NPU

1. 简介

本文档记录 mobilenetv3_small_075.lamb_in1k MobileNetV3-Small(width=0.75)图像分类模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。

该模型是 MobileNetV3-Small 的 0.75× width 变体(约 1.8M 参数),使用 LAMB 优化器在 ImageNet-1k 上训练。width multiplier 控制通道数的缩放比例,0.75× 比 1.0× 减少约 30% 参数量,推理速度更快但 Top-1 精度约降 1-2 个百分点。以 timm 格式发布,采用 timm.create_model() 加载。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/timm/mobilenetv3_small_075.lamb_in1k

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
timm1.0.27
CANN8.5.1
  • NPU:8 × Ascend 910B3
  • 精度对比基准:CPU

3. 部署使用流程

3.1 环境准备

conda create -n timm-models python=3.11 -y
conda activate timm-models

pip install torch==2.8.0 torch_npu==2.8.0.post4 \
    -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install timm safetensors pillow numpy \
    -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2 推理脚本使用

python inference.py \
    --model_path /path/to/mobilenetv3_small_075.lamb_in1k \
    --image photo.jpg --device npu
from inference import TimmClassifier
clf = TimmClassifier(model_path="./mobilenetv3_small_075.lamb_in1k", device="npu")
probs = clf.predict(["photo.jpg"])

4. Smoke 验证

python inference.py --model_path ./mobilenetv3_small_075.lamb_in1k --device npu

预期输出:Top-5 分类索引及置信度,无运行时错误。

5. 性能参考

测试条件:6 张合成 224×224 图像,batch_size=8,NPU 预热 1 轮。

指标数值
NPU 吞吐量106.5 img/s

width=0.75 变体(1.8M)推理速度与 1.0×(2.5M)相近,因 NPU 上同一架构的计算瓶颈在内存带宽而非计算量。

6. 精度评测

6.1 评测方法

分别在 CPU 和 NPU 上推理 6 张合成图像,比较 1000 维 softmax 余弦相似度和 Top-1 一致性。

6.2 评测结果

指标数值
平均余弦相似度0.999996
MAE0.000002
精度误差率0.0004%
Top-1 准确率100.0%

结论:精度误差率 0.0004%,评测通过。

7. 迁移适配说明

7.1 模型结构

  • Backbone:MobileNetV3-Small(width=0.75,1.8M 参数)
  • Classifier:GAP + Conv2d 1×1 + FC → 1000
  • 输入:224×224 RGB

7.2 timm 加载适配

import timm, json
from safetensors.torch import load_file

with open("config.json") as f: cfg = json.load(f)
model = timm.create_model(cfg["architecture"], pretrained=False, num_classes=cfg["num_classes"])
model.load_state_dict(load_file("model.safetensors"), strict=False)
model.to("npu:0").eval()

8. 注意事项

  1. timm 格式:与 mobilenetv3_small_100 共享相同适配代码,仅模型目录不同
  2. width=0.75:比 1.0× 参数少 30%,边缘设备部署更友好
  3. 首次 NPU 推理:1.8M 参数,算子编译约 2-3 秒
  4. strict=False:允许 classifier 维度不匹配,安全跳过
下载使用量0