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

RMBG-2.0 (BiRefNet) — Ascend NPU Adaptation

模型简介

RMBG-2.0 是 BRIA AI 的背景移除模型,基于 BiRefNet(双参考网络,专为高分辨率二分图像分割设计),在专业级授权数据上训练,可商用(需遵守 BRIA 许可)。输入图像被缩放到 1024×1024 并做 ImageNet 归一化,模型输出多尺度预测,最后一层 sigmoid 得到前景 alpha 蒙版(matte),可直接用于抠图/换背景。模型规模 220.2M 参数。

原始模型:briaai/RMBG-2.0(HF 上为 gated;本仓库权重来自 ModelScope) 官方代码:ZhengPeng7/BiRefNet

加载方式:transformers auto_map(AutoModelForImageSegmentation → 仓库自带 birefnet.BiRefNet,trust_remote_code=True),依赖 kornia + timm(自定义建模文件所需)。

环境要求

  • 昇腾 Ascend 910(本仓库在 910 ×2 上验证,单卡即可推理)
  • Python 3.11
  • torch 2.9.0 + torch-npu 2.9.0.post1
  • transformers 4.57.6 + kornia 0.8 + timm 1.0

部署步骤

# 1. 克隆仓库
git clone https://gitcode.com/weasonlee/RMBG-2.0.git
cd RMBG-2.0

# 2. 安装依赖
pip install -r requirements.txt

# 3. 准备权重到 models/(已 .gitignore 排除;~885MB safetensors + 自定义代码)
#    HF 源为 gated,可从 ModelScope 下载:
pip install modelscope
python -c "
from modelscope import snapshot_download
snapshot_download('briaai/RMBG-2.0', local_dir='models')"

# 4. 推理(NPU)
python inference.py --device npu
# 或 CPU(1024^2 前向较慢,~1 分钟/张)
python inference.py --device cpu --batch 1 --runs 1

推理示例

$ python inference.py --device npu --batch 1
torch.npu.is_available() = True
torch.npu.device_count() = 2
[info] device = npu:0, torch = 2.9.0+cpu
[load] BiRefNet (RMBG-2.0): 220.2M params
[info] batch = (1, 3, 1024, 1024) synthetic images (subject-on-background)
[time] run 0: 11377 ms
[time] avg: 11259 ms (batch 1 x (1024, 1024))
[out ] img0: alpha mean=0.1800 fg(FG>50%)=18.0% max=1.000

===== CPU vs NPU comparison (alpha matte, 3 images) =====
  img0: cos_sim=1.00000000 max_abs_err=7.705e-04 mean_abs_err=1.784e-06 IoU=0.999989
  OVERALL: cos_sim=1.00000000 max_abs_err=7.705e-04 mean_abs_err=1.784e-06 mean_IoU=0.999989

输入:确定性 PIL 合成图(人物状主体/色块主体/低对比主体,固定种子,无外部图片依赖),1024×1024 + ImageNet 归一化;CPU 与 NPU 输入完全一致。alpha 蒙版经 sigmoid 输出,fg% 为 alpha>0.5 的前景占比。

CPU vs NPU 精度对比

指标img0
cos_sim(1024×1024 alpha 蒙版)1.00000000
max_abs_err7.705e-04
mean_abs_err1.784e-06
IoU(阈值 0.5 二值蒙版)0.999989
单张耗时(含同步)NPU ~11259 ms vs CPU ~55684 ms(~5× 加速)

结论:NPU(Ascend 910, torch-npu 2.9.0.post1)与 CPU 的 alpha 蒙版完全一致(cos_sim=1.0,IoU≈0.99999),二值化抠图结果实质等价,适配成功。

仓库结构

├── inference.py        # 推理脚本(合成图 alpha 蒙版 + NPU/CPU 对比 + IoU)
├── readme.md
├── requirements.txt
├── models/             # 权重目录(需自行下载,已 gitignore;含 birefnet.py 等自定义代码)
├── assets/             # 运行截图
│   ├── agent_workflow.png
│   ├── npu_device_call.png
│   └── model_result.png
└── results/            # 每次运行的 alpha/耗时产物(gitignore)

许可与引用

权重遵循 BRIA RMBG 许可(商用需购买授权)。

Peng Z. et al. "BiRefNet: Bilateral Reference for High-Resolution Dichotomous Image Segmentation." CAAI AIR 2024.