p
pnflly/RMBG-2.0
模型介绍
文件和版本
Pull Requests
讨论
分析

briaai/RMBG-2.0 昇腾 NPU 部署适配说明

一、模型简介

RMBG-2.0 是 BRIA AI 推出的第二代背景移除(Background Removal)模型,在上一代 U2-Net 架构基础上全面升级为 BiRefNet(Bilateral Reference Network) 架构,主干网络采用 Swin-Large Transformer,通过编码器与解码器之间的双向参考机制,在复杂前景边缘、透明物体与细粒度纹理的抠图任务上表现显著优于前代。

属性说明
模型架构BiRefNet(Swin-L 骨干)
参数量220,176,498(约 220.2M)
输入规格1024 x 1024 x 3(RGB)
输出规格1024 x 1024 单通道 alpha 蒙版(0~1)
权重精度FP32
推理框架PyTorch + torch_npu(昇腾后端)
许可证CC BY-NC 4.0(非商用)

模型前向输出为多尺度侧输出列表 [m4, m3, m2, p1_out],其中 p1_out(scaled_preds[-1])为与输入同分辨率的最终预测,经 sigmoid 归一化后即得到前景 alpha 蒙版。

二、验证环境

项目配置
硬件Atlas 910(Ascend910_9362),2 卡
操作系统Linux 5.10.0(aarch64)
Python3.11.14
CANN8.5.1
PyTorch2.9.0+cpu(配合 torch_npu 运行)
torch_npu2.9.0.post1
transformers4.57.6
vllm-ascend0.18.0(未使用,本模型走 torch_npu 直连路径)

本模型属图像分割(CV)类,不经过 vLLM 的 token 级文本推理管线,因此适配路径为 torch_npu 直连 + FastAPI 封装,OpenAI 兼容接口非本模型适用场景。

三、权重获取与校验

权重来源按优先级依次为 GitCode hf_mirrors、ModelScope、Hugging Face,本次 GitCode 拉取一次成功:

git clone https://gitcode.com/hf_mirrors/briaai/RMBG-2.0.git

GitCode 镜像仓库中的 model.safetensors 为 LFS 指针文件(884,878,856 字节),需通过 LFS batch API 下载实体:

# 手动构造 LFS batch 请求(Content-Type 必须为 application/vnd.git-lfs+json)
curl -X POST https://gitcode.com/hf_mirrors/briaai/RMBG-2.0.git/info/lfs/objects/batch \
  -H "Content-Type: application/vnd.git-lfs+json" -H "Accept: application/vnd.git-lfs+json" \
  -d '{"operation":"download","transfers":["basic"],"ref":{"name":"refs/heads/main"},
       "objects":[{"oid":"566ed80c3d95f87ada6864d4cbe2290a1c5eb1c7bb0b123e984f60f76b02c3a7","size":884878856}]}'

下载完成后 SHA-256 校验与仓库声明一致:

566ed80c3d95f87ada6864d4cbe2290a1c5eb1c7bb0b123e984f60f76b02c3a7  model.safetensors

四、NPU 适配关键点:DeformableConv2d 算子替换

BiRefNet 解码器(Decoder)中使用了 20 个 DeformableConv2d(可变形卷积),其前向调用 torchvision::deform_conv2d。经实测:

  • 该算子 不受昇腾 NPU 后端支持,运行时会回退到 CPU(日志提示 npu_cpu_fallback);
  • CPU 回退导致单次 1024x1024 推理耗时约 12.6s,完全不可用。

适配方案为将 DeformableConv2d.forward 替换为同参数常规卷积(复用预训练 regular_conv 权重),使全流程算子均由 torch_npu 承载:

def _patch_deformable_conv():
    def _forward(self, x):
        return F.conv2d(x, self.regular_conv.weight, self.regular_conv.bias,
                        stride=self.stride, padding=self.padding)
    for name, module in model.named_modules():
        if type(module).__name__ == "DeformableConv2d":
            module.forward = _forward.__get__(module, type(module))

替换后推理耗时从 12.6s 降至约 0.2s,且抠图效果经多张样例验证无明显退化。

五、服务启动

模型推理服务代码位于 inference.py,通过 FastAPI 对外提供 HTTP 服务化推理:

# 启动服务(默认绑定 0.0.0.0:8001,使用 NPU device 1)
cd /data/models/RMBG-2.0
python3 inference.py --mode serve

依赖安装(requirements.txt):

pip install -r requirements.txt

服务启动日志关键输出:

[RMBG-2.0] 已替换 20 个 DeformableConv2d 为常规卷积(NPU 兼容)
[RMBG-2.0] 模型加载完成,耗时 1.5s,参数量 220.2M,精度 torch.float32,设备 npu:1
INFO:     Uvicorn running on http://0.0.0.0:8001

六、Smoke 验证

1. 健康检查

curl -s http://127.0.0.1:8001/health

返回:

{"status":"ok","model":"briaai/RMBG-2.0","device":"npu:1"}

2. 推理验证

通过 POST /infer 提交 base64 编码图片:

python3 infer_http.py t4.png collage5.png

实测结果:

输入尺寸infer_mspreprocess_msmask_meanforeground_ratio
t4.png1292x884534.0629.330.189180.18906
collage5.png5016x2551135.3259.970.345020.34501

两路输出分别为 .mask.png(灰度蒙版)与 .fg.png(透明背景前景),抠图边缘干净、前景主体完整。

七、性能参考

在 NPU device 1 上对 t4.png 连续执行 20 次推理(含 1 次预热),统计如下:

指标数值
最小耗时203.93 ms
P50 耗时204.95 ms
平均耗时212.89 ms
最大耗时362.96 ms

并发压测期间通过 npu-smi 观测到,NPU 4 卡 chip 1 的 AICore 利用率达 82%~94%,整卡功耗升至 298347W,推理服务进程(PID 71720)NPU 显存占用 6.48.4GB,说明算子已充分跑在昇腾 AICore 上而非 CPU 回退。

八、精度测评

由于 RMBG-2.0 采用 CC BY-NC 4.0 非商用许可证,官方未提供公开 benchmark 标注集,此处通过样例图像定性评估抠图质量:

  1. 室内建筑场景(t4.png):墙面、屋顶、门窗轮廓完整,天空背景被干净移除,蒙版边界平滑无锯齿;
  2. 多物体拼贴图(collage5.png):球类、动物等前景主体全部正确分离,主体边缘准确,无明显粘连或误删。

替换 DeformableConv2d 前后对比,前景 alpha 蒙版视觉上无显著差异,满足常规背景移除业务需求。

九、注意事项

  1. 许可证限制:模型采用 CC BY-NC 4.0 非商用许可,仅可用于非商业用途,商用需联系 BRIA 获取授权。
  2. 输入尺寸:模型原生输入 1024x1024,更大尺寸图片会先缩放至 1024x1024 再推理;服务端对超过 6000x6000 的图片会拒绝。
  3. 算子替换说明:DeformableConv2d 替换为常规卷积是 NPU 环境下的实用折中方案,若需精确还原原算子行为需等昇腾适配可变形卷积算子。
  4. 显存与并发:单实例 FP32 显存约 1GB,并发推理时随队列深度增长至 8GB 左右,部署时请预留 HBM 余量。
  5. 端口与设备:服务默认占用 8001 端口与 NPU device 1,多模型并行部署时请通过环境变量 SERVE_PORT、NPU_DEVICE 错开。
  6. 非 vLLM 管线:本模型为 CV 图像分割模型,不走 vLLM-Ascend 文本推理管线,请勿按 LLM 方式调用。

附:文件结构

briaai/RMBG-2.0/
├── inference.py        # NPU 推理服务(FastAPI)
├── README.md           # 本文档
├── requirements.txt    # 依赖清单
└── assets/
    └── README.md       # 效果样例说明