库名称: birefnet
标签:
- 背景去除
- 掩膜生成
- 二分图像分割
- 伪装目标检测
- 显著目标检测
- pytorch_model_hub_mixin
- model_hub_mixin
仓库地址: https://github.com/ZhengPeng7/BiRefNet
管道标签: 图像分割
许可证: mit
此BiRefNet模型采用2048x2048
分辨率图像训练,支持更高分辨率推理。
性能表现:
所有测试均在FP16模式下进行。
数据集 |
方法 |
分辨率 |
maxFm |
wFmeasure |
MAE |
Smeasure |
meanEm |
HCE |
maxEm |
meanFm |
adpEm |
adpFm |
mBA |
maxBIoU |
meanBIoU |
DIS-VD |
BiRefNet_HR-general-epoch_130 |
2048x2048 |
.925 |
.894 |
.026 |
.927 |
.952 |
811 |
.960 |
.909 |
.944 |
.888 |
.828 |
.837 |
.817 |
DIS-VD |
BiRefNet_HR-general-epoch_130 |
1024x1024 |
.876 |
.840 |
.041 |
.893 |
.913 |
1348 |
.926 |
.860 |
.930 |
.857 |
.765 |
.769 |
.742 |
DIS-VD |
BiRefNet-general-epoch_244 |
2048x2048 |
.888 |
.858 |
.037 |
.898 |
.934 |
811 |
.941 |
.878 |
.927 |
.862 |
.802 |
.790 |
.776 |
DIS-VD |
BiRefNet-general-epoch_244 |
1024x1024 |
.908 |
.877 |
.034 |
.912 |
.943 |
1128 |
.953 |
.894 |
.944 |
.881 |
.796 |
.812 |
.789 |
面向高分辨率二分图像分割的双边参考框架
1 南开大学 2 西北工业大学 3 国防科技大学 4 阿尔托大学 5 上海人工智能实验室 6 特伦托大学
DIS样本1 |
DIS样本2 |
 |
 |
本仓库是论文《面向高分辨率二分图像分割的双边参考框架》(CAAI AIR 2024)的官方实现。
访问我们的GitHub仓库获取更多细节:
https://github.com/ZhengPeng7/BiRefNet —— 包含代码、文档和模型库!
使用方法
0. 安装依赖包:
pip install -qr https://raw.githubusercontent.com/ZhengPeng7/BiRefNet/main/requirements.txt
1. 加载BiRefNet模型:
使用HuggingFace的代码+权重
仅使用HuggingFace上的权重 —— 优点:无需手动下载BiRefNet代码;缺点:HuggingFace上的代码可能不是最新版本(我会尽量保持同步更新)。
from transformers import AutoModelForImageSegmentation
birefnet = AutoModelForImageSegmentation.from_pretrained('ZhengPeng7/BiRefNet_HR', trust_remote_code=True)
使用GitHub代码+HuggingFace权重
仅使用HuggingFace上的权重 —— 优点:代码始终最新;缺点:需要从GitHub克隆BiRefNet仓库。
# 下载代码
git clone https://github.com/ZhengPeng7/BiRefNet.git
cd BiRefNet
from models.birefnet import BiRefNet
birefnet = BiRefNet.from_pretrained('ZhengPeng7/BiRefNet_HR')
使用GitHub代码+本地权重
同时使用本地代码和权重。
import torch
from utils import check_state_dict
birefnet = BiRefNet(bb_pretrained=False)
state_dict = torch.load(权重路径, map_location='cpu')
state_dict = check_state_dict(state_dict)
birefnet.load_state_dict(state_dict)
使用加载的BiRefNet进行推理
from PIL import Image
import matplotlib.pyplot as plt
import torch
from torchvision import transforms
from models.birefnet import BiRefNet
birefnet = ...
torch.set_float32_matmul_precision(['high', 'highest'][0])
birefnet.to('cuda')
birefnet.eval()
birefnet.half()
def 提取目标(birefnet, 图像路径):
图像尺寸 = (2048, 2048)
图像转换 = transforms.Compose([
transforms.Resize(图像尺寸),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
图像 = Image.open(图像路径)
输入图像 = 图像转换(图像).unsqueeze(0).to('cuda').half()
with torch.no_grad():
预测结果 = birefnet(输入图像)[-1].sigmoid().cpu()
预测图 = 预测结果[0].squeeze()
预测图像 = transforms.ToPILImage()(预测图)
掩膜 = 预测图像.resize(图像.size)
图像.putalpha(掩膜)
return 图像, 掩膜
plt.axis("off")
plt.imshow(提取目标(birefnet, 图像路径='你的图片路径.jpg')[0])
plt.show()
2. 本地使用推理端点:
可能需要点击部署并自行设置端点,会产生一定费用。
import requests
import base64
from io import BytesIO
from PIL import Image
你的HF令牌 = 'xxx'
API地址 = "xxx"
请求头 = {
"Authorization": "Bearer {}".format(你的HF令牌)
}
def base64转字节(base64字符串):
# 移除可能存在的data URI前缀
if "data:image" in base64字符串:
base64字符串 = base64字符串.split(",")[1]
# 将Base64字符串解码为字节
图像字节 = base64.b64decode(base64字符串)
return 图像字节
def 字节转base64(图像字节):
# 创建BytesIO对象处理图像数据
图像流 = BytesIO(图像字节)
# 使用Pillow打开图像
图像 = Image.open(图像流)
return 图像
def 查询(请求内容):
响应 = requests.post(API地址, headers=请求头, json=请求内容)
return 响应.json()
输出 = 查询({
"inputs": "https://hips.hearstapps.com/hmg-prod/images/gettyimages-1229892983-square.jpg",
"parameters": {}
})
输出图像 = 字节转base64(base64转字节(输出))
输出图像
此标准二分图像分割(DIS)版BiRefNet在DIS-TR上训练,并在DIS-TEs和DIS-VD上验证。
本仓库包含论文《面向高分辨率二分图像分割的双边参考框架》(CAAI AIR 2024)的官方模型权重。
本仓库包含论文提出的BiRefNet权重,该模型在三个任务(DIS、HRSOD和COD)上均达到SOTA性能。
访问我的GitHub页面获取BiRefNet代码和最新更新:
https://github.com/ZhengPeng7/BiRefNet :)
尝试我们的在线推理演示:
- Colab在线图像推理:

- Hugging Face带GUI的在线推理(可调分辨率):

- 对给定权重的推理与评估:


致谢:
- 衷心感谢@freepik为训练此模型提供的GPU资源支持!
引用
@article{zheng2024birefnet,
title={面向高分辨率二分图像分割的双边参考框架},
author={郑鹏 and 高德宏 and 范登平 and 刘力 and Jorma Laaksonen and 欧阳万里 and Nicu Sebe},
journal={人工智能研究},
volume = {3},
pages = {9150038},
year={2024}
}