🚀 雙邊參考高分辨率二分圖像分割(BiRefNet)
BiRefNet是用於高分辨率二分圖像分割的模型,在圖像分割領域有重要應用,能在背景去除、掩膜生成等多個任務中達到SOTA性能。
🚀 快速開始
本倉庫是論文 "雙邊參考高分辨率二分圖像分割" (CAAI AIR 2024)的官方實現。訪問我們的GitHub倉庫 https://github.com/ZhengPeng7/BiRefNet 以獲取更多詳細信息,包括 代碼、文檔 和 模型庫!
✨ 主要特性
- 多任務SOTA性能:該模型在三個任務(二分圖像分割DIS、高分辨率顯著目標檢測HRSOD和偽裝目標檢測COD)中取得了SOTA性能。
- 多種使用方式:可以結合HuggingFace的權重和代碼使用,也可以結合GitHub的代碼和HuggingFace的權重使用,還能使用本地的代碼和權重。
- 在線演示:提供了在線單圖像推理、帶GUI的在線推理以及給定權重的推理和評估等在線演示。
📦 安裝指南
0. 安裝依賴包
pip install -qr https://raw.githubusercontent.com/ZhengPeng7/BiRefNet/main/requirements.txt
💻 使用示例
基礎用法
使用HuggingFace的代碼和權重
僅使用HuggingFace上的權重,優點是無需手動下載BiRefNet代碼;缺點是HuggingFace上的代碼可能不是最新版本(我會盡量保持其為最新版本)。
from transformers import AutoModelForImageSegmentation
birefnet = AutoModelForImageSegmentation.from_pretrained('ZhengPeng7/BiRefNet', 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')
高級用法
使用本地的代碼和權重
同時使用本地的權重和代碼。
import torch
from utils import check_state_dict
birefnet = BiRefNet(bb_pretrained=False)
state_dict = torch.load(PATH_TO_WEIGHT, 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()
def extract_object(birefnet, imagepath):
image_size = (1024, 1024)
transform_image = transforms.Compose([
transforms.Resize(image_size),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
image = Image.open(imagepath)
input_images = transform_image(image).unsqueeze(0).to('cuda')
with torch.no_grad():
preds = birefnet(input_images)[-1].sigmoid().cpu()
pred = preds[0].squeeze()
pred_pil = transforms.ToPILImage()(pred)
mask = pred_pil.resize(image.size)
image.putalpha(mask)
return image, mask
plt.axis("off")
plt.imshow(extract_object(birefnet, imagepath='PATH-TO-YOUR_IMAGE.jpg')[0])
plt.show()
用於標準二分圖像分割(DIS)的BiRefNet在 DIS - TR 上進行訓練,並在 DIS - TEs和DIS - VD 上進行驗證。
📚 詳細文檔
本倉庫包含了我們論文中提出的BiRefNet的權重。
在線演示
嘗試我們的在線推理演示:
- Colab上的在線單圖像推理:

- Hugging Face上帶GUI的在線推理,分辨率可調節:

- 對給定權重進行推理和評估:

🔧 技術細節
該模型是基於雙邊參考機制設計的,用於高分辨率二分圖像分割。其訓練數據為 DIS - TR,驗證數據為 DIS - TEs和DIS - VD。
📄 許可證
本項目採用MIT許可證。
致謝
- 非常感謝 @fal 為訓練更好的BiRefNet模型在GPU資源上提供的慷慨支持。
- 非常感謝 @not - lain 在HuggingFace上更好地部署我們的BiRefNet模型方面提供的幫助。
引用
@article{BiRefNet,
title={Bilateral Reference for High-Resolution Dichotomous Image Segmentation},
author={Zheng, Peng and Gao, Dehong and Fan, Deng-Ping and Liu, Li and Laaksonen, Jorma and Ouyang, Wanli and Sebe, Nicu},
journal={CAAI Artificial Intelligence Research},
year={2024}
}