X
Xiaoxy510/nvidia--segformer-b0-finetuned-ade-512-512-ascend
模型介绍文件和版本Pull Requests讨论分析

nvidia/segformer-b0-finetuned-ade-512-512 on Ascend 910B3

1. 简介

本文档记录 nvidia/segformer-b0-finetuned-ade-512-512 在昇腾 Ascend 910B3 NPU 上的迁移适配、推理部署与精度评测结果。

SegFormer-B0 是一个轻量级语义分割模型,在 ADE20K 数据集上微调,支持 150 个语义类别。模型参数量约 3.8M,输入尺寸 512×512。

本次适配工作包括:

  • 在 NPU(Ascend 910B3)上验证语义分割推理的正确性
  • 对比 NPU 与 CPU 的输出精度,确保误差 < 1%
  • 提供可直接使用的 NPU 推理脚本 inference.py
  • 提供精度与性能评测脚本 eval.py

相关获取地址:

  • 原始模型(HuggingFace):https://huggingface.co/nvidia/segformer-b0-finetuned-ade-512-512
  • 适配后 NPU 模型仓库(GitCode):https://gitcode.com/Xiaoxy510/nvidia--segformer-b0-finetuned-ade-512-512-ascend

2. 验证环境

组件版本
Python3.9.13
torch2.8.0+cpu
torch_npu2.8.0.post4
transformers4.57.6
Pillow可用
  • NPU:Ascend 910B3 × 8 逻辑卡
  • 驱动版本:25.5.2

3. 模型适配与部署

3.1 适配说明

SegFormer 使用标准的 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()

3.2 环境准备

pip install torch torch_npu transformers Pillow -i https://repo.huaweicloud.com/repository/pypi/simple/
export HF_ENDPOINT=https://hf-mirror.com

3.3 推理脚本使用

# 对图像进行语义分割
python inference.py --image input.jpg

# 保存分割结果(类别 ID 图)
python inference.py --image input.jpg --output mask.png

# CPU 推理
python inference.py --image input.jpg --device cpu

4. Smoke 验证

python inference.py

脚本将使用随机生成图像进行推理验证。

5. 性能参考

测试条件:batch_size=4,512×512 输入,float32 精度,连续 5 次取平均。

指标CPUNPU (Ascend 910B3)
平均推理时间 (4 images)~5777 ms~1872 ms
单图像平均耗时~1444 ms~468 ms
加速比1x~3.09x
参数量3.77M3.77M
模型大小14.4 MB14.4 MB

6. 精度评测

评测方法

  1. 在 CPU 上加载模型并推理得到参考分割 logits
  2. 在 NPU 上加载同一权重并推理得到 NPU 输出
  3. 对比两组输出的差异

评测结果

使用 4 张 512×512 测试图像进行评测:

指标数值要求结果
MSE3.81e-5--
Cosine Similarity0.99999535> 0.999✓
Pixel-wise Agreement99.98%> 99%✓ PASS

结论:NPU 精度满足要求(余弦相似度 0.999995,像素一致性 99.98%)。

详细评测日志见 eval_log.txt。

7. 注意事项

  1. 权重文件:NPU 适配无需修改原始权重
  2. 设备选择:脚本默认自动检测 NPU,若 NPU 不可用则回退到 CPU
  3. 图像大小:模型输入为 512×512 RGB 图像,processor 会自动调整大小
  4. 输出格式:分割结果为 2D 整数数组(H×W),每个像素值为类别 ID
  5. torch_npu 版本:确保与 torch 版本匹配
  6. 单卡推理:当前使用单张 NPU 卡
下载使用量0