BiRefNet

Сеть с двусторонними опорными признаками (bilateral reference), которая предсказывает мягкую альфа-маску (alpha matte), отделяющую объект от фона. В LibreYOLO есть инференс и валидация для задачи matte из BiRefNet.

Задачи
matte
Размеры
t, l at 1024 px
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
BiRefNet от Nankai University, MIT. Статья, исходный код
Лицензии
Код: MIT, веса: MIT. Коммерческое использование

Установка

BiRefNet не требует установки дополнительных extra-пакетов. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Предсказание

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreBiRefNetl-matte.pt")result = model(SAMPLE_IMAGE, save=True) matte = result.matteprint(matte.array.shape, matte.array.dtype)
CLI
libreyolo predict model=LibreBiRefNetl-matte.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Вырезание объекта
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreBiRefNetl-matte.pt")result = model(SAMPLE_IMAGE) # RGBA (H, W, 4) uint8: исходный RGB плюс альфа-маска как альфа-канал.rgba = result.cutout()result.save("subject.png")

В результате задачи matte нет рамок; result.matte — плотный массив (H, W) типа float32 со значениями в [0, 1], где 1 — полностью передний план, а 0 — полностью фон. В отличие от бинарной маски, мягкая альфа-маска сохраняет сглаженные детали на краях: например, волосы и шерсть. result.cutout() собирает исходное изображение с этим альфа-каналом в RGBA-массив, а result.save(path) (или save=True в вызове предсказания) сразу записывает его в PNG с прозрачным фоном. Модель работает на фиксированном родном холсте 1024x1024; другое разрешение не поддерживается, потому что к нему привязаны таблицы относительных позиций бэкбона Swin, и при несовпадении они интерполируются некорректно, а не вызывают ошибку. Об источниках, стриминге и обработке результатов — в разделе предсказание.

Варианты

Опубликован один чекпойнт, l, — модель BiRefNet-general уровня Swin-L и вариант по умолчанию для качества в исходном проекте. Код семейства поддерживает и облегчённый уровень Swin-T, t, но конвертация в LibreYOLO для него пока не опубликована.

Валидация

val() считает две метрики по папке с парами изображение/альфа-маска; обе лежат в [0, 1] и не зависят от разрешения: MAE — средняя абсолютная ошибка относительно эталонной альфа-маски (ground truth), чем меньше, тем лучше, и S-measure (Fan et al., ICCV 2017) — структурное сходство, которое учитывает сохранение формы объекта и отверстий в нём, чего попиксельный MAE сам по себе не замечает (чем больше, тем лучше). Валидация идёт через собственный predict модели, поэтому использует ровно ту предобработку, что принята в семействе.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreBiRefNetl-matte.pt") # Вместо YAML датасета подойдёт и каталог с images/ и автоматически# найденным каталогом альфа-масок (mattes/, matte/, gt/, masks/,# mask/ или alpha/).metrics = model.val(data="my-matte-dataset/") print(metrics["metrics/MAE"])print(metrics["metrics/Smeasure"])

Валидация работает только на инференсе; дообучение (fine-tuning) — задокументированное продолжение, а не готовая возможность (точное ограничение по разрешению, которое унаследует любой будущий trainer, описано в разделе «Предсказание»).

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
mattematte to ONNX: поддерживаетсяmatte to TorchScript: поддерживаетсяmatte to ExecuTorch: не поддерживаетсяmatte to TensorRT: не поддерживаетсяmatte to OpenVINO: не поддерживаетсяmatte to Paddle: не поддерживаетсяmatte to MNN: не поддерживаетсяmatte to RKNN: не поддерживаетсяmatte to ncnn: не поддерживаетсяmatte to TFLite: не поддерживаетсяmatte to CoreML: не поддерживаетсяmatte to Core AI: не поддерживается

Экспортированный артефакт загружается обратно через LibreYOLO() по суффиксу файла, поэтому файл .onnx ведёт себя как чекпойнт и возвращает тот же Results. Проверенный путь — TorchScript; конвертация в ONNX работает, но такую же планку по совпадению результатов пока не прошла. В разделе экспорт перечислены аргументы, которые принимает каждый формат, и дополнительные, которые добавляют некоторые из них.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreBiRefNetl-matte.pt")model.export(format="onnx")
CLI
libreyolo export model=LibreBiRefNetl-matte.pt format=onnx
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому# экспортированный артефакт загружается как любой чекпойнт и# возвращает тот же объект Results.model = LibreYOLO("LibreBiRefNetl-matte.onnx")result = model(SAMPLE_IMAGE) print(result.matte.array.shape)

Чекпойнты

Все опубликованные файлы весов этого семейства.

ФайлВход (пикс.)Лицензия весов
matte
LibreBiRefNetl-matte.ptmit

Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
BiRefNet, Nankai University
Лицензия исходного проекта
MIT
Исходный код проекта
github.com/ZhengPeng7/BiRefNet
Код LibreYOLO
MIT
Веса
MIT, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and copyright notice with any copy you redistribute. It places no condition on your own application code. LibreYOLO's checkpoint is a format conversion of the official pretrained BiRefNet-general weights (the Swin-L, quality-default tier), with the learned parameters unchanged; fine-tuning is not wired into this library in v1, so there is no LibreYOLO-trained variant to license separately.

Цитирование

@article{zheng2024birefnet,
  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},
  volume = {3},
  pages = {9150038},
  year={2024}
}

Скопировано из блока цитирования авторов на странице github.com/ZhengPeng7/BiRefNet#citation.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.