Уже очень давно напрашивалась подробная инструкция по работе с разделом Inpaint в нейросети Stable Diffusion. Признаться, я и сам полноценно освоил этот раздел совсем недавно – в сети достаточно мало информации по работе с этой вкладкой.
В нашем телеграм сообществе я пообещал полноценную инструкцию, поэтому хороший повод закрепить знания и лишний раз вспомнить по Automatic1111.
Что такое Инпейнт и для чего он нужен
Inpaint служит для изменения участков изображения. Как правило это детализация лица (по умолчанию в SD они достаточно кривые), удалить или добавить объекты на вашем арте или поменять некоторые детали (одежду или фон). Ну и конечно же расширить изображение.
Вероятно, вы уже знакомы с этой вкладкой и ранее ей пользовались, но у вас особо не получалось. Это может быть связано с использованием обычного чекпоинта (модели) – при работе с редактированием сгенерированной картинки лучше брать специальную Inpaint модель.
Так как вы работаете уже со сформированным изображением – не важно, на какой модели вы генерировали, для Инпейнтинга вам подойдет как 1,5 модель, так и XL. На практике 1,5 несмотря на свою относительно старость работает лучшее чем современна SD XL.
Модель Juggernaut (Обязательно выберите Inpainting и нажмите Download).
Модель Juggernaut XL inpainting – просто скачать, это только Inpaint модель.
Куда положить это модели я подробно описывал в руководстве по установке Stable Diffusion.
Если вам лень, то просто скопируйте скачанные файлы в ‘../stable-diffusion-webui/models/Stable-diffusion’.
Примеры работы с разделом “Инпейнт”
Я думаю многие знакомы с такими прекрасными лицами, сейчас мы попробуем поправить лицо и убрать солнечные очки на практике.
Переходим в раздел Inpaint и в промпт мы запишем (не забудьте включить inpaint модель):
nordic woman 20yo
а в негативный промпт (Negative) запишем чего не хотим видеть на картинке, в моем случае это солнечные очки
sunglasses
Выделим область, которую мы хотим перегенерировать (на примере лица) и на выходе получим отличный результат.
Теперь самое интересное – настройки и как это работает:
Resize mode – для изменения участков не трогаем этот пункт, оставляем “Just resize”
Mask Blur – изображение меняется не только в маске, но и затрагивает соседние пиксели, в фотошопе это обычно называют растушевкой. По умолчанию выставлено 4 пикселя, однако если очень заметно как вписываются исправления – этот параметр лучше поднять.
Mask mode – где производить изменения. Inpaint masked – перегенерируем изображение только в выделенной области. Inpaint not masked – правим все что не в выделении.
Masked content – мы будем пользоваться только fill (полная перегенерация области) или original (учитывать объекты под областью выделения).
Inpaint area. Whole picture – учитывается все изображение целиком. Only Masked – берется в расчет только выделенная область.
Sampling method – обычно это Euler a или DPM++ 2M Karras, в зависимости от того, какой вам больше понравится.
Sampling Steps – количество шагов генерации. Тут советую поставить побольше, как правило 35-40 дают хороший результат. Если ставить меньше – часто видно что картинка встроена.
Resize to – выбираем 768 * 768 (в таком разрешении будет пересоздаваться выбранный кусочек картинки и потом впишется в итоговую генерацию)
Denoising strength – на самом деле тут только эксперименты, чем сильнее нужно поменять изображение – тем выше этот параметр.
Не всегда генерация бывает удачно с первого раза, нужно прогнать как минимум 2-3 раза и выбрать лучший вариант. Если видно откроенные косяки, значит надо менять параметры – об этом подробнее ниже.
Работа с инпейнт моделью и нюансы
На самом деле все достаточно просто, не пугайтесь картинке выше. Сейчас попытаюсь сделать вам небольшую шпаргалку:
Добавление, удаление объектов на изображение: в этом случае лучше всего выбрать input area – whole picture чтобы нейросеть могла оценить все изображение. Вероятнее всего не надо учитывать что находится под маской – тогда это Fill в разделе Masked content.
Максимально сохранить оригинальную композицию, но повысить детализацию или поправить изображение. Если нам нужно исправить, но по максимум сохранить – однозначно надо учитывать оригинал, а это Original в разделе Masked content. Input area ставьте Only Masked. В крайнем случае, если вообще никак не меняется картинка – переключите на Whole Picture.
Denoising strength у вас обычно будет 0.3-0.5 если нужно максимально сохранить исходник и добавить детализацию. 0.75 и выше если делаете серьезные изменения.
Очень важно! Обратите внимание на раздел Resize to. Если вы установили Whole picture – тут должны быть размеры картинки (чтобы не заполнять вручную – кликните значок треугольника). Если Only masked – то размер может быть любой, рекомендую использовать квадрат 768*768.
Небольшие изменения в одежде
Ну что, разобрались вроде, давайте пробовать. Меня немного напрягает юбка – предлагаю переодеть девушку в джинсы.
Выделяю область где будут будущие штаны и в промте пишу Denim Jeans. Ввиду того, что мы учитываем что будет под маской, можно сильно не аккуратничать, Stable Diffusion поймет где ноги и куда рисовать штаны.
У нас будут такие параметры:
Inpaint masked, original, only maked, 768*768, denoising – 0.75
После нескольких генераций получаем отлично вписанные джинсы на картинке, как мы и хотели.
Кардинальная смена одежды в Stable Diffusion
Слегка подправить одежду вообще не проблема, вопросы обычно возникают когда происходят серьезные изменения. Например из темного пуховика переодеть в яркую майку.
Попробуем переодеть девушку из куртки с кофтой в легкую майку. Основная проблема, что ориентируясь на оригинал – вообще непонятно как из куртки сделать майку. Поэтому мы будем использовать параметр Fill в Masked Content. А нейросеть заставим оценить изображение целиком и переключимся на Whole picture (не забудьте подставить размеры изображения при активации этого пункта).
Denoising будет достаточно высоким – как правило от 0.75 и выше, как правило при активном Fill выше его поднимать смысла нет.
Как видите мы переодели девушку в обычную желтую майку без каких либо проблем.
Работаем с фоном
Думаю вы уже догадались, что при замене фона необходимо не учитывать оригинал (т.е. выбираем Fill и работаем со всей картинкой – whole picture)
Выделяем наш объект, который необходимо оставить и теперь необходимо менять все, что вне нашего выделения (вне маски), т.е. переключаем на Inpaint not masked. В промте описываете фон и жмете Generate – в итоге у вас изображение с новым фоном.
Выделять нужно очень аккуратно (на примере неправильный вариант, так делать нельзя. Чем точнее вы выделите объект – тем лучше оно впишется в новый фон).
Гораздо удобнее это делать через расширение inpaint-background. Смысл расширения сформировать эту маску объекта, чтобы вам вручную ничего не выделять. Просто на вкладке расширения выставите аналогичные параметры, все отличие только в том, что выделение объекта произойдет автоматически.
Если вы забыли как устанавливать расширение – на вкладке “Extension” выбираем “Install from URL” и вставляем адрес ниже, жмет Install и перезагружаем SD.
https://github.com/John-WL/sd-webui-inpaint-background
Работаем с объектами (удаляем или добавляем) в Inpaint
Еще раз хочу напомнить – используйте специальную Inpaint модель, если у вас не получается – проверьте, высока вероятность что вы просто забыли переключиться!
Я думаю вы уже все поняли, выделяем область – Fill, whole picture, denoising – 0.75 и выше. Пустой промт – объект удалится, написали в промте Sport CAR – получили машину вместо беседки (ну или чего хотите поменять).
Опять же, лучше делать несколько генераций. Достаточно часто новый участок может вклеиваться достаточно криво, поэтому не сразу понятно всели мы правильно сделали – тут только тесты и еще раз тесты. Играться со значением Denoising и типом работой с картинкой или областью!
Послесловие
Заметка получилась достаточно объемной, но надеюсь она поможет вам разобраться с Inpaint режимом в Stable Diffusion. Так сложилось, что я провожу время чаще здесь, чем на генерации и вообще не представляю как получить хороший результат без доработки на этой вкладке!