ComfyUI + BiRefNet
Продолжаем тему, начатую в предыдущих статьях: Программа BiRefNet для удаления фона на
фотографиях и Linux c GTX1650
и 4 GB VRAM и программа ComfyUI . Подключаем BiRefNet к
ComfyUi для обработки 4К фотографий на компьютере с 4ГБ
видеокартой. Хочется иметь возможность использовать для вычислений
CPU и модели, натренированные на разных образцах. Запускаем
менеджер и обнаруживаем 4 кастомных ноды, которые теоретически
удовлетворяют нашим требованиям. В переводе с английского
«customize — настроить, персонализировать, подгонять». Я понимаю
этот термин, как дополнения, подогнанные для решения частных
задач. Они отображаются в виде узлов (окон, имеющих точки
входа и выхода и возможность задавать дополнительные параметры) на
графическом отображении рабочего процесса. В свое время меня
здорово напрягала путаница в терминах «узловая точка» и «нодальная
точка» в русскоязычных текстах по оптике. Для меня узел в первую
очередь морской, поэтому в данной статье буду использовать
англицизм нода :-)
Попробовав все 4, я убедился, что идеально подходящей под заданные
условия нет -- они персонализированы под своих создателей. Однако
их можно настроить таким образом, чтобы дополняя друг друга они
решали мои задачи.
Первое дополнение конфликтует со вторым и работает только с
видеокартой с большим объемом памяти. Остальные в той или иной
степени способны помочь нам решить поставленную задачу. Начнем с ComfyUIBiRefNet.
Размер изображения 1820х3044. Время обработки 28 секунд.
Рабочий процесс BiRefNetSegmentation0.json.
Нода BiRefNet Segmentation: на входе изображение, на выходе
маска. Используется старая модель BiRefNet-ep480.pth.
Обращение к ней прописано в тексте программы. При установке
помещается в папку /ComfyUI/models/BiRefNet/. Если хочется
получить сразу маскированное изображение с прозрачным фоном,
то можно поступить, например так:
Здесь я добавил ноду, сдвигающую границу маски, ноду для
инверсии маски и ноду применяющую маску к исходному изображению.
Если есть желание сразу наложить цветной фон, то можно поступить
по-другому. Цвет задается в шестнадцатеричном формате 0xFFFFFF,
если писать в поле color ноды EmptyImage. Программа
переводит в десятичный формат, который также можно использовать
для задания цвета.
Рабочий процесс BiRefNetSegmentation1.json.
Переходим к следующей ноде RembgByBiRefNet
или, как ее еще называют, ByBiRefNet II .
Размер изображения 1820х3044. Время обработки 3 секунды.
Рабочий процесс RembgByBiRefNet.json.
Представленный вариант прекрасно работает, но только при
соблюдении двух ключевых моментов. 1) Выбрано device - AUTO,
что в случае наличия на машине любой видеокарты с
поддержкой cuda приведет к ее задействованию. 2) Выбрана
модель General-Lite.safetensors. При выборе любой другой
нам не хватит 4 ГБ видеопамяти. Можно выбрать device
вместо AUTO CPU, но тогда получим грозное сообщение.
Однако эта нода интересна еще и тем, что позволяет
скачать много разных моделей. При выборе их вычисления
конечно не происходит, карта слабовата, но модели
сохраняются в папке /ComfyUI/models/BiRefNet/.
Когда применять первые три модели,
понятно, а с остальными надо пробовать. Дословный
перевод не сильно облегчает задачу, но лучше, чем
ничего.
- Общие сведения:
Предварительно обученная модель для общих
случаев использования.
- General-Lite:
легкая предварительно обученная модель для общих
случаев использования.
- Портрет:
Предварительно обученная модель для портретов
людей.
- DIS:
Предварительно обученная модель для
дихотомической сегментации изображений (DIS).
- HRSOD:
Предварительно обученная модель для обнаружения
значимых объектов с высоким разрешением (HRSOD).
- COD:
Предварительно обученная модель для обнаружения
скрытых предметов (COD).
- DIS-TR_TEs:
предварительно обученная модель с огромным
набором данных.
К этому добавлю цитату из Википедии: «Двоичная, бинарная
или дихотомическая классификация — это задача
классификации элементов заданного множества в две группы
(предсказание, какой из групп принадлежит каждый элемент
множества) на основе правила классификации.»
Ну и наконец переходим к самой полезной ноде BiRefNet_Hugo,
но ее использование для достижения максимальных
результатов требует некоторых плясок с бубном. Если
отключить выбор локальных моделей, то все сходу
работает, но нет возможности сменить модель.
Размер изображения 1820х3044. Время обработки 35
секунд. Рабочий процесс BiRefNet_Hugo.json.
Пляски связаны с локальным
использованием моделей. Они должны находиться
в указанной в поле выбора папке вместе с еще
тремя файлами и должны обязательно иметь имя
model.safetensors и размер 843.9 МБ. Файлы скачиваем
отсюда.
Вариант Lite не подходит. С остальными скаченными
при работе с предыдущей нодой все в порядке. Надо
создать на них ссылку в заданной папке и
переименовать. Эти модели можно скачать и со
страницы того
проекта и даже не переименовывать.
Подчеркиваю, что в отличие от множества других нод,
здесь надо указывать не адрес модели, а адрес папки
с моделью и сопутствующими файлами.
Таким образом, для быстрой обработки можно
использовать RembgByBiRefNet с GPU и моделью
General-Lite.safetensors. Это будет на порядок быстрее,
чем остальные два метода, хотя даже из приведенных
миниатюр маски видно, что некоторые детали, такие как
перфорация на пленке, будут упущены. Если надо выбирать
модель и работать с CPU, то выбираем BiRefNet_Hugo. А
если хотим тратить минимум усилий на настройку, то
выбираем BiRefNet. Кстати, при обработке тестового
снимка с пленкой он дал наилучший результат из
приведенных в данной статье. Впрочем при выборе модели
DIS можно получить еще более детальный результат для
перфорации пленки.
Можно работать и с видео, при этом время
обработки кадра практически не отличается от времени
обработки отдельного снимка. Соответственно даже
при использовании GPU на каждую секунду фильма уйдет
полторы минуты.
Рабочий процесс birefnetvideo.json.
PS
В ComfyUI для удаления фона существует множество других
дополнений. В частности, так и называемое Image Remove
Background.
Рабочий процесс imremb.json.
Модели существенно меньше и подгружаются из интернета
автоматически при первом обращении. Нет зависаний от
нехватки ресурсов видеокарты. Однако, модели менее
универсальны и может понадобится перебор нескольких
моделей для получения удовлетворительного результата.
Следует упомянуть и еще один подход, дающий
необходимый результат. Он безусловно заслуживает
отдельной статьи, но коротко изложу здесь.
Метод состоит из выделения нескольких объектов на
фотографии и объявлении всего пространства вокруг
одного из них фоном. Таким образом, можно выделить
например только лицо, а не всю фигуру или только
камеру без штатива.
segany2vibor2.json
17.10.2024
Установите проигрыватель Flash
|
Облако тегов:
...
|