本文档记录 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,适合资源受限场景下的图像分类任务。
主要工作:
timm 格式的 MobileNetV3 模型相关获取地址:
| 组件 | 版本 |
|---|---|
torch | 2.8.0 |
torch-npu | 2.8.0.post4 |
timm | 1.0.27 |
transformers | 4.57.6 |
Ascend 910B3(8 逻辑卡)pytorch_model.bin3 x 224 x 224# 使用华为镜像源加速
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# 从 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_in1kpython 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 cpupython inference.py --image_dir /path/to/images/ --topk 3from 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)启动推理:
python inference.py --model_path ./mobilenetv3_small_050.lamb_in1k --image test.jpg --device npu验证结果:
测试条件:batch_size=32,200 样本随机输入,100 次预热 + 100 次基准迭代。
| 指标 | NPU (Ascend 910B3) | CPU |
|---|---|---|
| 平均延迟 (avg latency) | 8.34 ms (bs=32) | 79.43 ms |
| 单样本平均延迟 | 5.57 ms | 79.43 ms |
| 吞吐量 (throughput) | 3837.38 img/s | 12.59 img/s |
| 加速比 | 14.27x | 1x |
使用 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 32timm 的 create_model(checkpoint_path=...) 支持直接加载本地 pytorch_model.bin 或 model.safetensors。如使用 safetensors 格式,确保 safetensors 库已安装。npu:0,可通过 ASCEND_RT_VISIBLE_DEVICES 环境变量指定。timm.data.create_transform 自动匹配预处理参数(mean=[0.485,0.456,0.406], std=[0.229,0.224,0.225],插值方式 bicubic),无需手动设置。eval.py 中的 generate_test_data 为真实数据集加载逻辑。Ascend 910B3 + CANN 8.5.1 验证,其他昇腾芯片(如 310P/710)需对应调整算子精度配置。