Автоматическое создание масок
суть экспериментов
В данном материале будем решать две задачи:
- быстро решить вопрос выделения определенных элементов: волосы, лицо, одежда, фон - для последующей замены по подсказке
- выделить определённый элемент на одежде, часть тела, часть предмета или целый предмет - для последующего изменения стиля или цвета с сохранением деталей исходника.
Для решения данных задач Нам понадобится одно из расширений, в зависимости от цели:
- Rembg (Remove background) - Работает на вкладке Extras в виде отдельной вкладки. Работает только с людьми. Отделяет человека от фона или делает его маску для последующего применения в img2img-inpaint upload. Отличается от других расширений моделями выделения маски. Установка стандартная.
- Inpaint-background - Работает на вкладке img2img в виде отдельного таба (рядом с inpaint). Работает только с людьми. На картинках с небольшим разрешением довольно быстро визуально показывает результат отделения, а благодаря ползунку Mask blur можно корректировать область маски. Прописав подсказку можно сразу получить готовый результат. Установка через ссылку.
- A Person Mask Generator - Работает на вкладке img2img в виде отдельной вкладки. Работает только с людьми, способно выделить не только фон, но и причёску, открытую часть тела, лицо или одежду по отдельности. Установка стандартная.
- Inpaint Anything - Работает на своей отдельной вкладке. Способно определить не только человека, но и другие элементы, которые затем можно преобразовать в единую маску. По началу кажется что это очень сложное расширение, с кучей весомых моделей и даже лишним функционалом. Но это расширение позволяет выделить например узор на платье с последующей заменой платья и сохранением этого самого узора или выделять объекты, часть объекта, удалять объекты с картины и многое другое.
Для примера воспользуемся довольно сложным исходником - волосы смешиваются с фоном, платье имеет плащ, на одежде узор, мелкая физиономия.
В процессе научимся ещё и расширять картину.
Краткие выводы
Основные настройки которые крутятся для достижения оптимального эффекта:
- Denoising strength от 0.75 до 1
- ControlNet режим inpaint и параметр Control Weight от 0.5 до 1
- ControlNet режим IP-Adapter и тот же параметр Control Weight от 0.5 до 1
Необходимость включения ControlNet определяется типом маски и необходимостью в каждом конкретном случае сохранить исходник и желанием использовать основную модель для генерации с приставкой inpaint.
Если у Вас нет Inpaint модели для генерации частей в маске, добро пожаловать в ControlNet с препроцессором Inpaint. Если вы хотите сохранить. а не перерисовать исходник - добро пожаловать в ControlNet с моделью ip-adapter-plus_sd15
ИСХОДНИКИ ДЛЯ БЫСТРОГО ДОСТУПА
Настройки
magnificent goddess of all times and peoples, aphrodite, beautiful face, realistic skin, dresses developing on the wind, full -length, full full body, blue eyes, the wind in the hair, portrait painting, intricate detail, detailed black eyes, realistic, by Jean-Baptiste Monge
Negative prompt: (worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1, Size: 768x1024, Model hash: ec41bd2a82, Model: photon_v1, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, Version: v1.6.0-2-g4afaaf8a
Основные тесты
A Person Mask Generator
Особенности
Расширение работает только на человекообразных и активно только в режиме img2img
Выводы
- Результат на некоторых масках очень сильно зависит не только от подсказки, но и Seed
- Включение ControlNet, на первой вкладке Inpaint и на второй вкладке ip-adapter-plus позволяет добиться более внятных результатов в некоторых случаях - в моём случае это одежда
Face и body (skin)
Для примера будем менять бледнолицую женщину на чернокожую. Для изменения цвета кожи и уменьшения уродств связанных с положением и размером головы, нам придётся уменьшать Denoising strength до 0.5-0.6, но при этом мы получим мулатку. Что бы получить действительно чернокожую африканочку нам понадобится включение вкладки ControlNet: inpaint (Preprocessor inpaint_only) и в этом случае уже можно выкрутить Denoising strength до 1. Если будут "особенности" генерации (например часть тела не отрисовывается в нужном цвете), можете уменьшить Control Weight (в моём случае я сразу поставил 0,5) на вкладке ControlNet в Inpaint.
Для усиления эффекта нужно выставить галочку Override mask settings и выбратьMasked content= fill - важнее описание, и в ControlNet Control Mode = My prompt is more important
Если что-то чуть-чуть не нравиться- можно генернуть на другом Seed.
Hair
На сложных объектах алгоритм действия включает в себя выкручивание Denoising strength от 0,75 до 1 и включение ControlNet inpaint (Preprocessor inpaint_only) с подстройкой Control Weight в меньшую сторону. Но даже на таких настройках - полностью волосы заменить не удалось - слишком сложным оказался объект. на простых примерах - можно добиться хороших результатов на стандартных настройках. На вторую вкладку ControlNet можно подключить IP-Adapter
Результат зависит от Seed
Необходимо включать ControlNet inpaint Можно понизить Control Weight до 0,5 и указать Control Mode = My prompt is more important (моя подсказка важнее)
(black hair:1.4)
clothes
На сложных объектах алгоритм действия включает в себя включение двух вкладок ControlNet:
- inpaint (Preprocessor inpaint_only)
- ip-adapter (для SD1.5 Preprocessor ip-adapter_clip_sd15, а Model: ip-adapter-plus_sd15)
Иначе придётся дорабатывать напильником окантовку маски и использовать основную модель генерации с приставкой Inpaint. или крутить Seed, а потом исправлять непотребства...
В качестве примера попробуем заменить платье на белое.
background
При замене фон следует учитывать что фон будет подбираться по освещению и краскам совпадающий с темой изображения. Соответственно, при дневном освещении центрального эталонного элемента, как Вы не стараетесь, но ночь не выйдет при замене фона.
В данном случае - применение ControlNet смысла нет.
Заменяем фон с расширением картины
background + расширение
На вкладке Inpait нам нужно получить маску по краям изображения для расширения изображения. Если мы хотим заменить фон, то соответственно должен быть выделен фон. Параметр Mask mode=Inpaint not masked (рисовать вне маски) - если мы выделили маской сам объект который не подлежит замене, или Mask mode=Inpaint masked (рисовать в маске) если маской мы выделили края и весь задний фон который должен быть заменён и расширен. Тут кому как удобнее наносить маску.
Для расширения картинки действует правило - маска должна быть по краям со стороны расширения.
Для расширения нужно выставить настройки:
- Resize mode = Resize and fill
- Поменять разрешение в сторону расширения картины
Prompt
(landscape dark night forest:1.4), magical forest, butterflies, moon, lunar glow, soft shadows
Negative prompt: (worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4, Size: 1280x768, Model hash: f57b21e57b, Model: revAnimated_v121, VAE hash: 15e96204c9, VAE: blessed2.vae.pt, Denoising strength: 1, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, Version: v1.6.0-2-g4afaaf8a
Inpaint Anything
Особенности
Расширение работает со всеми элементами в собственной вкладке, имеет встроенный ControlNet, метод удаления элементов, но самое важное - создание различных масок для отдельных частей одного и того же элемента. Маски можно автоматически расширять и вручную изменять, добавлять компоненты маски и инвертировать. А полученную маску можно использовать на вкладке img2img.
Данное расширение использует довольно тяжеловесные модели для распознавания элементов:
- sam_vit_l_0b3195 = 1,1 ГБ
- sam_vit_h_4b8939 = 2,3 ГБ
- sam_vit_b_01ec64 = 0,36 ГБ
- sam_hq_vit_l = 1,1 ГБ
- sam_hq_vit_h = 2,3 ГБ
- sam_hq_vit_b = 0,36 ГБ
- mobile_sam = 38,8 МБ
- FastSAM-x = 138,2 МБ
- FastSAM-s = 22,7 МБ
В самом расширении для генерации по подсказке используются inpainting модели, при этом основная модель генерации - игнорируется, Сами модели скачиваются автоматически при первом запуске генерации.
Выводы
- Результат на некоторых масках очень сильно зависит не только от подсказки, но и Seed
- Включение ControlNet, на первой вкладке Inpaint и на второй вкладке ip-adapter-plus позволяет добиться более внятных результатов в некоторых случаях - в моём случае это одежда
Тест моделей
На человеческой модели это одно, а на на предметах - это другое. Протестируем довольно сложный человеческий образ и кухню с кучей мелких предметов. Кроме того есть два режима работы, обычный и "Anime style" - отличаются кардинально.
Тест замены части элемента
Рассмотрим тест на примере одежды - изменим цвет, но с сохранением узора исходника. Пример не простой, исходник с довольно мелкими деталями.
Для успешной генерации требуется расширить границы нажав пару раз на Expand mask region и покрутив несколько генераций
Получаем маску и выделяем элементы
Меняем цвет платья, особенностью является то, что меняем часть изделия оставляя узор и лифчик.
сравниваем оригинал с результатом
Результат сильно зависит не только от описания, но и от Seed
Inpainting Prompt
white dress
Negative Prompt
(worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts
увеличиваем края маски на 4 px
Жмём Expand mask region на 4, повторно жмём сгенерировать. Результат изменения маски равносилен изменению Seed, но внимание акцентируем на края.
img2img вкладка inpaint upload
А теперь сделаем тоже самое с помощью маски полученной из inpaint Anything. но на стандартной вкладке img2img - inpaint upload
Для чего использовать inpaint upload? Для того что бы получить ещё больше контроля. теперь у нас если нужно несколько вкладок ControlNet. Если нужно использовать другую модель, не Inpaint. Саму маску мы должны получить на вкладке "Mask only" расширения Inpaint Anything: наживаем Get mask и снизу кнопочку Send to img2img inpaint.
Если не используете в качестве основной модели inpaint модель, то нужно включить controlNet и выбрать inpaint, при этом нужно выкрутить Denoising strength на максимум
Настройки inpaint upload
Меняем цвет платья, особенностью является то, что меняем часть изделия оставляя узор и лифчик. Результат зависит от Seed, Sampler и прочего.
Inpainting Prompt
white dress
Negative Prompt
(worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts
Тест инвертированной маски
Модель обычная (не inpaint) - Photon, с включённым ControlNet inpaint.
Inpainting Prompt
The Dragon in the forest
Negative Prompt
(worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck
Inpaint-background
Особенности
Расширение работает на вкладке img2img в собственной вкладке Inpaint background (там где Sketch. inpaint и другие). Это самое простое расширение, просто закидываем картинку и сразу видим результат отделения, ползунком Mask blur корректируем маску, описываем в подсказке задник и жмякаем генерировать.
сравниваем оригинал с результатом
Результат сильно зависит не только от описания, но и от Seed
Prompt
night forest
Steps: 24, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1, Size: 768x1024, Model hash: d37263937f, Model: epicphotogasm_z, Denoising strength: 1, Mask blur: 64, Hypertile U-Net: True, Hypertile VAE: True, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ControlNet 0: "Module: inpaint_only, Model: control_v11p_sd15_inpaint [be8bc0ed], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Guidance Start: 0, Guidance End: 1, Pixel Perfect: False, Control Mode: Balanced, Hr Option: Both, Save Detected Map: True", Version: v1.7.0
Выводы
Данное расширение подходит для простых случаем с человеком, где нужно по быстренькому заменить фон без необходимости сохранять особо сложные детали типа вьющихся на ветру волос или некоторых элементов сложной одежды, например плаща. Тем не менее, расширение старается добротно вписать человека в окружение, как видим добавляются источники света для освещения ярких участков человека несмотря на подсказку, а так же довольно чётко отрабатываются края. Изъяны несомненно есть, но они легко правятся перерисовкой в inpaint.
Тест параметров и подсказки
Для теста будем использовать следующие настройки:
- Mask mode = Inpaint masked (рисовать в маске)
- Masked content=fill (описание важнее оригинала в маске) или original (если за маской осталось часть человека, волосы или одежда)
- Denoising strength=0.75 (если нужно больше сохранить оригинала задника - уменьшаем параметр, иначе увеличиваем)
- Controlnet=inpaint (включаем при необходимости)
Rembg (Remove background)
Особенности
Данное расширение требует дополнительных манипуляций - перекидывание маски на вкладку inpaint upload в область маски. Если бы не маски которые отрабатывают по разному на разных исходниках и скорость их создания - то можно сказать что больше ничего интересного в данном расширении нет.
сравниваем оригинал с результатом
Результат сильно зависит не только от описания, но и от Seed
Prompt
night forest
Steps: 24, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1, Size: 768x1024, Model hash: d37263937f, Model: epicphotogasm_z, Denoising strength: 1, Mask blur: 0, Hypertile U-Net: True, Hypertile VAE: True, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ControlNet 0: "Module: inpaint_only, Model: control_v11p_sd15_inpaint [be8bc0ed], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Guidance Start: 0, Guidance End: 1, Pixel Perfect: False, Control Mode: Balanced, Hr Option: Both, Save Detected Map: True", Version: v1.7.0
Краткие выводы
Чем меньше маска от общей площади - тем больше вероятность правильной замены заднего фона.
Остальные выводы схожи с Inpaint-background.
Тест масок
Для теста будем использовать следующие настройки:
- Mask mode = Inpaint masked (рисовать в маске)
- Masked content=fill (описание важнее оригинала в маске)
- Denoising strength=1
- Controlnet=inpaint (включаем при необходимости)