本文档记录 nvidia/segformer-b0-finetuned-ade-512-512 在昇腾 Ascend 910B3 NPU 上的迁移适配、推理部署与精度评测结果。
SegFormer-B0 是一个轻量级语义分割模型,在 ADE20K 数据集上微调,支持 150 个语义类别。模型参数量约 3.8M,输入尺寸 512×512。
本次适配工作包括:
inference.pyeval.py相关获取地址:
| 组件 | 版本 |
|---|---|
Python | 3.9.13 |
torch | 2.8.0+cpu |
torch_npu | 2.8.0.post4 |
transformers | 4.57.6 |
Pillow | 可用 |
Ascend 910B3 × 8 逻辑卡25.5.2SegFormer 使用标准的 transformers 接口,NPU 适配无需修改模型结构或权重。
已验证通过的适配流程:
import torch
import torch_npu
from transformers import AutoModelForSemanticSegmentation, AutoImageProcessor
from PIL import Image
model = AutoModelForSemanticSegmentation.from_pretrained("nvidia/segformer-b0-finetuned-ade-512-512")
model = model.npu()
model.eval()
processor = AutoImageProcessor.from_pretrained("nvidia/segformer-b0-finetuned-ade-512-512")
image = Image.open("input.jpg").convert("RGB")
inputs = processor(images=image, return_tensors="pt")
inputs = {k: v.npu() for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
mask = outputs.logits.cpu().argmax(dim=1).squeeze()pip install torch torch_npu transformers Pillow -i https://repo.huaweicloud.com/repository/pypi/simple/
export HF_ENDPOINT=https://hf-mirror.com# 对图像进行语义分割
python inference.py --image input.jpg
# 保存分割结果(类别 ID 图)
python inference.py --image input.jpg --output mask.png
# CPU 推理
python inference.py --image input.jpg --device cpupython inference.py脚本将使用随机生成图像进行推理验证。
测试条件:batch_size=4,512×512 输入,float32 精度,连续 5 次取平均。
| 指标 | CPU | NPU (Ascend 910B3) |
|---|---|---|
| 平均推理时间 (4 images) | ~5777 ms | ~1872 ms |
| 单图像平均耗时 | ~1444 ms | ~468 ms |
| 加速比 | 1x | ~3.09x |
| 参数量 | 3.77M | 3.77M |
| 模型大小 | 14.4 MB | 14.4 MB |
使用 4 张 512×512 测试图像进行评测:
| 指标 | 数值 | 要求 | 结果 |
|---|---|---|---|
| MSE | 3.81e-5 | - | - |
| Cosine Similarity | 0.99999535 | > 0.999 | ✓ |
| Pixel-wise Agreement | 99.98% | > 99% | ✓ PASS |
结论:NPU 精度满足要求(余弦相似度 0.999995,像素一致性 99.98%)。
详细评测日志见 eval_log.txt。
torch_npu 版本:确保与 torch 版本匹配