Продолжаем тему, начатую в предыдущих статьях: Программа BiRefNet для удаления фона на
фотографиях и Linux c GTX1650
и 4 GB VRAM и программа ComfyUI . Подключаем BiRefNet к
ComfyUi для обработки 4К фотографий на компьютере с 4ГБ
видеокартой. Хочется иметь возможность использовать для вычислений
CPU и модели, натренированные на разных образцах. Запускаем
менеджер и обнаруживаем 4 кастомных ноды, которые теоретически
удовлетворяют нашим требованиям. В переводе с английского
«customize — настроить, персонализировать, подгонять». Я понимаю
этот термин, как дополнения, подогнанные для решения частных
задач. Они отображаются в виде узлов (окон, имеющих точки
входа и выхода и возможность задавать дополнительные параметры) на
графическом отображении рабочего процесса. В свое время меня
здорово напрягала путаница в терминах «узловая точка» и «нодальная
точка» в русскоязычных текстах по оптике. Для меня узел в первую
очередь морской, поэтому в данной статье буду использовать
англицизм нода :-)
Попробовав все 4, я убедился, что идеально подходящей под заданные
условия нет -- они персонализированы под своих создателей. Однако
их можно настроить таким образом, чтобы дополняя друг друга они
решали мои задачи.
Первое дополнение конфликтует со вторым и работает только с
видеокартой с большим объемом памяти. Остальные в той или иной
степени способны помочь нам решить поставленную задачу. Начнем с ComfyUIBiRefNet.

Нода BiRefNet Segmentation: на входе изображение, на выходе
маска. Используется старая модель BiRefNet-ep480.pth.
Обращение к ней прописано в тексте программы. При установке
помещается в папку /ComfyUI/models/BiRefNet/. Если хочется
получить сразу маскированное изображение с прозрачным фоном,
то можно поступить, например так:
Здесь я добавил ноду, сдвигающую границу маски, ноду для
инверсии маски и ноду применяющую маску к исходному изображению.
Если есть желание сразу наложить цветной фон, то можно поступить
по-другому. Цвет задается в шестнадцатеричном формате 0xFFFFFF,
если писать в поле color ноды EmptyImage. Программа
переводит в десятичный формат, который также можно использовать
для задания цвета.

Переходим к следующей ноде RembgByBiRefNet
или, как ее еще называют, ByBiRefNet II .

Представленный вариант прекрасно работает, но только при
соблюдении двух ключевых моментов. 1) Выбрано device - AUTO,
что в случае наличия на машине любой видеокарты с
поддержкой cuda приведет к ее задействованию. 2) Выбрана
модель General-Lite.safetensors. При выборе любой другой
нам не хватит 4 ГБ видеопамяти. Можно выбрать device
вместо AUTO CPU, но тогда получим грозное сообщение.


Однако эта нода интересна еще и тем, что позволяет
скачать много разных моделей. При выборе их вычисления
конечно не происходит, карта слабовата, но модели
сохраняются в папке /ComfyUI/models/BiRefNet/.


Ну и наконец переходим к самой полезной ноде BiRefNet_Hugo,
но ее использование для достижения максимальных
результатов требует некоторых плясок с бубном. Если
отключить выбор локальных моделей, то все сходу
работает, но нет возможности сменить модель.

Пляски связаны с локальным
использованием моделей. Они должны находиться
в указанной в поле выбора папке вместе с еще
тремя файлами и должны обязательно иметь имя
model.safetensors и размер 843.9 МБ. Файлы скачиваем
отсюда.
Вариант Lite не подходит. С остальными скаченными
при работе с предыдущей нодой все в порядке. Надо
создать на них ссылку в заданной папке и
переименовать. Эти модели можно скачать и со
страницы того
проекта и даже не переименовывать.
Подчеркиваю, что в отличие от множества других нод,
здесь надо указывать не адрес модели, а адрес папки
с моделью и сопутствующими файлами.

Таким образом, для быстрой обработки можно
использовать RembgByBiRefNet с GPU и моделью
General-Lite.safetensors. Это будет на порядок быстрее,
чем остальные два метода, хотя даже из приведенных
миниатюр маски видно, что некоторые детали, такие как
перфорация на пленке, будут упущены. Если надо выбирать
модель и работать с CPU, то выбираем BiRefNet_Hugo. А
если хотим тратить минимум усилий на настройку, то
выбираем BiRefNet. Кстати, при обработке тестового
снимка с пленкой он дал наилучший результат из
приведенных в данной статье. Впрочем при выборе модели
DIS можно получить еще более детальный результат для
перфорации пленки.
Можно работать и с видео, при этом время
обработки кадра практически не отличается от времени
обработки отдельного снимка. Соответственно даже
при использовании GPU на каждую секунду фильма уйдет
полторы минуты.

В ComfyUI для удаления фона существует множество других
дополнений. В частности, так и называемое Image Remove
Background.

Модели существенно меньше и подгружаются из интернета
автоматически при первом обращении. Нет зависаний от
нехватки ресурсов видеокарты. Однако, модели менее
универсальны и может понадобится перебор нескольких
моделей для получения удовлетворительного результата.
Следует упомянуть и еще один подход, дающий
необходимый результат. Он безусловно заслуживает
отдельной статьи, но коротко изложу здесь.
Метод состоит из выделения нескольких объектов на
фотографии и объявлении всего пространства вокруг
одного из них фоном. Таким образом, можно выделить
например только лицо, а не всю фигуру или только
камеру без штатива.