ComfyUI + BiRefNet

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

BiRefNet

Первое дополнение конфликтует со вторым и работает только с видеокартой с большим объемом памяти. Остальные в той или иной степени способны помочь нам решить поставленную задачу. Начнем с ComfyUIBiRefNet.

BiRefNet
Размер изображения 1820х3044. Время обработки 28 секунд. Рабочий процесс BiRefNetSegmentation0.json.

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

BiRefNet
Рабочий процесс BiRefNetSegmentation.json.

Здесь я добавил ноду, сдвигающую границу маски,  ноду для инверсии маски и ноду применяющую маску к исходному изображению. Если есть желание сразу наложить цветной фон, то можно поступить по-другому. Цвет задается в шестнадцатеричном формате 0xFFFFFF, если писать в поле color ноды  EmptyImage. Программа переводит в десятичный формат, который также можно использовать для задания цвета.

BiRefNet
Рабочий процесс BiRefNetSegmentation1.json.

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

BiRefNet
Размер изображения 1820х3044. Время обработки 3 секунды. Рабочий процесс RembgByBiRefNet.json.

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

BiRefNet

BiRefNet

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

BiRefNet
  • General: A pre-trained model for general use cases.
  • General-Lite: A light pre-trained model for general use cases.
  • Portrait: A pre-trained model for human portraits.
  • DIS: A pre-trained model for dichotomous image segmentation (DIS).
  • HRSOD: A pre-trained model for high-resolution salient object detection (HRSOD).
  • COD: A pre-trained model for concealed object detection (COD).
  • DIS-TR_TEs: A pre-trained model with massive dataset.
Когда применять первые три модели, понятно, а с остальными надо пробовать. Дословный перевод не сильно облегчает задачу, но лучше, чем ничего.
  • Общие сведения: Предварительно обученная модель для общих случаев использования.
  • General-Lite: легкая предварительно обученная модель для общих случаев использования.
  • Портрет: Предварительно обученная модель для портретов людей.
  • DIS: Предварительно обученная модель для дихотомической сегментации изображений (DIS).
  • HRSOD: Предварительно обученная модель для обнаружения значимых объектов с высоким разрешением (HRSOD).
  • COD: Предварительно обученная модель для обнаружения скрытых предметов (COD).
  • DIS-TR_TEs: предварительно обученная модель с огромным набором данных.
К этому добавлю цитату из Википедии: «Двоичная, бинарная или дихотомическая классификация — это задача классификации элементов заданного множества в две группы (предсказание, какой из групп принадлежит каждый элемент множества) на основе правила классификации.»

BiRefNet

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

BiRefNet

BiRefNet
Размер изображения 1820х3044. Время обработки 35 секунд. Рабочий процесс BiRefNet_Hugo.json.

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


BiRefNet

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

Можно работать и с видео, при этом время обработки кадра практически не отличается от времени обработки отдельного снимка.  Соответственно даже при использовании GPU на каждую секунду фильма уйдет полторы минуты.

BiRefNet
Рабочий процесс birefnetvideo.json.

PS

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

Image Remove
                Background
Рабочий процесс imremb.json.

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

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

Sam2Segmentation
segany2vibor2.json

17.10.2024
Установите проигрыватель Flash

Облако тегов:
3D печать
Arduino
Raspberry Pi
Аэрофотосъемка
Байдарки
Геомеханика
История
Камеры
Макросъемка
Объективы
Освещение
Панорамы
Принадлежности
Принтеры
Программы
Сканеры
Стереосъемка
Фильтры
Фокусировка
Фотокубики
...
rss