qq_34566203/mobilenetv3_small_050.lamb_in1k-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

MobileNetV3 Small 050 on Ascend NPU

1. 简介

本文档记录 mobilenetv3_small_050.lamb_in1k 图像分类模型在 Ascend 910B3 NPU 上的适配与验证结果。

MobileNetV3 是 Google 提出的轻量级 CNN 模型,采用深度可分离卷积、SE (Squeeze-and-Excitation) 模块和 hard-swish 激活函数。mobilenetv3_small_050 是 MobileNetV3 Small 系列中宽度乘子为 0.50 的版本,参数量仅 1.6M,适合资源受限场景下的图像分类任务。

主要工作:

  • 在 Ascend NPU 上加载并运行 timm 格式的 MobileNetV3 模型
  • CPU 与 NPU 推理精度对比验证(相对误差 < 1%)
  • NPU 推理性能评测(吞吐量、延迟)

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/timm/mobilenetv3_small_050.lamb_in1k
  • 权重下载地址(HuggingFace):https://huggingface.co/timm/mobilenetv3_small_050.lamb_in1k
  • 原始仓库:https://github.com/huggingface/pytorch-image-models

2. 验证环境

组件版本
torch2.8.0
torch-npu2.8.0.post4
timm1.0.27
transformers4.57.6
  • NPU:Ascend 910B3(8 逻辑卡)
  • 模型路径:本地 pytorch_model.bin
  • 输入尺寸:3 x 224 x 224

3. 环境准备

3.1 安装依赖

# 使用华为镜像源加速
pip install torch torchvision torch_npu -i https://repo.huaweicloud.com/repository/pypi/simple
pip install timm transformers pillow -i https://repo.huaweicloud.com/repository/pypi/simple

3.2 下载模型权重

# 从 ModelScope 下载(推荐)
# pip install modelscope
from modelscope import snapshot_download
snapshot_download('timm/mobilenetv3_small_050.lamb_in1k', local_dir='./mobilenetv3_small_050.lamb_in1k')

# 或从 HuggingFace 下载(如网络不通,可使用镜像)
# export HF_ENDPOINT=https://hf-mirror.com
# huggingface-cli download timm/mobilenetv3_small_050.lamb_in1k --local-dir ./mobilenetv3_small_050.lamb_in1k

4. 快速开始

4.1 单张图片推理

python inference.py --image /path/to/image.jpg --topk 5

支持本地图片路径、URL:

# URL 图片
python inference.py --image https://example.com/cat.jpg

# 指定 CPU
python inference.py --image /path/to/image.jpg --device cpu

4.2 批量推理

python inference.py --image_dir /path/to/images/ --topk 3

4.3 Python API 调用

from inference import load_model, preprocess_image, run_inference, decode_predictions
from PIL import Image

model, device, transforms = load_model("./mobilenetv3_small_050.lamb_in1k")
img_tensor = preprocess_image("cat.jpg", transforms)
output = run_inference(model, img_tensor, device)
labels = [...]  # 1000-class labels
results = decode_predictions(output.cpu(), labels, topk=5)
print(results)

5. 推理验证

启动推理:

python inference.py --model_path ./mobilenetv3_small_050.lamb_in1k --image test.jpg --device npu

验证结果:

  • 模型加载成功
  • NPU 推理正常返回 top-5 分类结果
  • 无精度溢出或算子报错

6. 性能参考

测试条件:batch_size=32,200 样本随机输入,100 次预热 + 100 次基准迭代。

指标NPU (Ascend 910B3)CPU
平均延迟 (avg latency)8.34 ms (bs=32)79.43 ms
单样本平均延迟5.57 ms79.43 ms
吞吐量 (throughput)3837.38 img/s12.59 img/s
加速比14.27x1x

7. 精度评测

使用 200 张随机输入图片,逐样本对比 CPU 与 NPU 输出(logits)的差异。

指标数值
最大绝对误差 (MaxDiff)1.69e-02
平均绝对误差 (AvgDiff)7.85e-03
最小余弦相似度 (MinCos)0.99999952
平均余弦相似度 (AvgCos)0.99999990
最大相对误差 (MaxRelErr)0.22%
平均相对误差 (AvgRelErr)0.11%
结论✓ 通过(相对误差 < 1%)

评测命令:

python eval.py --model_path ./mobilenetv3_small_050.lamb_in1k --num_images 200 --batch_size 32

8. 注意事项

  1. 权重加载:timm 的 create_model(checkpoint_path=...) 支持直接加载本地 pytorch_model.bin 或 model.safetensors。如使用 safetensors 格式,确保 safetensors 库已安装。
  2. NPU 设备选择:多卡环境默认使用 npu:0,可通过 ASCEND_RT_VISIBLE_DEVICES 环境变量指定。
  3. 输入预处理:模型使用 timm.data.create_transform 自动匹配预处理参数(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225],插值方式 bicubic),无需手动设置。
  4. 随机输入 vs 真实数据:当前精度评测使用随机输入(标准 benchmark 做法),如需 ImageNet 验证集精度,请替换 eval.py 中的 generate_test_data 为真实数据集加载逻辑。
  5. CANN 版本兼容性:本适配基于 Ascend 910B3 + CANN 8.5.1 验证,其他昇腾芯片(如 310P/710)需对应调整算子精度配置。