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-пакетов. Всё, что он импортирует, входит в базовую установку.
pip install libreyoloПредсказание
Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.
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)libreyolo predict model=LibreBiRefNetl-matte.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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 модели, поэтому использует ровно ту предобработку, что принята в
семействе.
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, описано в разделе «Предсказание»).
Экспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| matte | matte 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 работает, но
такую же планку по совпадению результатов пока не прошла. В разделе
экспорт перечислены аргументы, которые принимает каждый
формат, и дополнительные, которые добавляют некоторые из них.
from libreyolo import LibreYOLO model = LibreYOLO("LibreBiRefNetl-matte.pt")model.export(format="onnx")libreyolo export model=LibreBiRefNetl-matte.pt format=onnxfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по суффиксу файла, поэтому# экспортированный артефакт загружается как любой чекпойнт и# возвращает тот же объект Results.model = LibreYOLO("LibreBiRefNetl-matte.onnx")result = model(SAMPLE_IMAGE) print(result.matte.array.shape)Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| matte | ||
| LibreBiRefNetl-matte.pt | mit | |
Все перечисленные выше файлы уже доступны в организации 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.