Bilateral Reference for High-Resolution Dichotomous Image Segmentation
| DIS-Sample_1 | DIS-Sample_2 |
|---|---|
This repository provides FP16 ONNX weights for ZhengPeng7/BiRefNet_dynamic, exported for ONNX Runtime CUDA and NVIDIA Triton. For Transformers.js and WebGPU, use onnx-community/BiRefNet_dynamic-ONNX.
For more information about BiRefNet, see the official repository.
Model Details
| Name | Data type | Shape | |
|---|---|---|---|
| Input | IMAGE |
FP16 | [batch, 3, 1024, 1024] |
| Output | ALPHA |
FP16 | [batch, 1, height, width] |
The batch axis is dynamic. The spatial input size is fixed at 1024 × 1024, and the output spatial size follows the input. ALPHA is a foreground probability in [0, 1]; sigmoid is included in the graph.
The model uses ONNX opset 19 and standard ONNX DeformConv operators. Use a CUDA-enabled ONNX Runtime build that supports FP16 DeformConv.
Usage (ONNX Runtime CUDA)
Install the dependencies:
pip install huggingface_hub numpy onnxruntime-gpu pillow
Run inference and save the foreground mask:
import numpy as np
import onnxruntime as ort
from huggingface_hub import hf_hub_download
from PIL import Image
model_path = hf_hub_download(
"onnx-community/BiRefNet_dynamic-ONNX-CUDA",
"onnx/model.onnx",
)
image = Image.open("input.png").convert("RGB")
resized = image.resize((1024, 1024), Image.Resampling.BILINEAR)
pixel_values = np.asarray(resized, dtype=np.float32) / 255.0
mean = np.asarray([0.485, 0.456, 0.406], dtype=np.float32)
std = np.asarray([0.229, 0.224, 0.225], dtype=np.float32)
pixel_values = (pixel_values - mean) / std
pixel_values = np.transpose(pixel_values, (2, 0, 1))[None].astype(np.float16)
session = ort.InferenceSession(
model_path,
providers=["CUDAExecutionProvider"],
)
alpha = session.run(["ALPHA"], {"IMAGE": pixel_values})[0][0, 0]
mask = Image.fromarray((np.clip(alpha, 0, 1) * 255).astype(np.uint8))
mask.resize(image.size, Image.Resampling.BILINEAR).save("mask.png")
Do not apply sigmoid to the output again.
Usage (NVIDIA Triton)
Place the ONNX file at birefnet_dynamic/1/model.onnx in the Triton model repository and use:
name: "birefnet_dynamic"
platform: "onnxruntime_onnx"
max_batch_size: 1
input [
{ name: "IMAGE" data_type: TYPE_FP16 dims: [ 3, 1024, 1024 ] }
]
output [
{ name: "ALPHA" data_type: TYPE_FP16 dims: [ 1, -1, -1 ] }
]
instance_group [
{ kind: KIND_GPU count: 1 }
]
Configure dynamic batching and queue limits according to the serving workload.
Conversion and Validation
- Source:
ZhengPeng7/BiRefNet_dynamicat revision280306042f57b7a33854319da62fd86aaa89ec4c - ONNX IR version: 9
- ONNX opset: 19
- Precision: FP16 weights, input, and output
- External data: none
- ONNX checker: passed
- ONNX Runtime CUDA FP16 vs. source PyTorch FP16:
- Mean absolute error:
1.4735e-5 - Maximum absolute error:
0.004486
- Mean absolute error:
- NVIDIA Triton 26.08 end-to-end validation: passed
Artifact details and checksums are available in manifest.json.
Limitations
- The model accepts RGB tensors only; image decoding, orientation handling, resizing, and alpha compositing are application responsibilities.
- Despite the upstream model variant name, this ONNX export does not accept arbitrary spatial input sizes.
- CPU and browser execution providers are not validation targets for this artifact.
Citation
@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}
}
Model tree for onnx-community/BiRefNet_dynamic-ONNX-CUDA
Base model
ZhengPeng7/BiRefNet_dynamic