Частой проблемой изображений нейросети Stable Diffusion является то, что конечности могут быть сгенерированы не совсем правильно. Иногда у человека может быть на одну руку больше, а бывает, что одна из ног может отсутствовать. Финишом стало то, что мы получили 4 конечности, с полностью нарушенной анатомией! Один из наших читателей предложил сделать специальное руководство по удалению лишних конечностей. Так вот! В этой записи я покажу вам, как с помощью инструмента inpainting (закрашивание) исправить эти два изображения с проблемными конечностями.
В этом обучении я буду использовать дополнительный модуль GUI AUTOMATIC1111. Вы можете запустить его одним щелчком мыши, предварительно установив Stable Diffusion на свой ПК, следуя простой инструкции.
Нам понадобится модель inpainting v1.5. Обязательно проверьте выбранную модель рисования при запуске нейронной сети:
проверьте эти два чек-бокса
Следуйте инструкциям по установке модели inpainting, если вы запускаете AUTOMATIC1111 локально. Обязательно скачайте этот файл.
Чтобы установить модель v1.5 для инпейнтинга, скачайте файл контрольной точки модели и поместите его в папку
stable-diffusion-webui/models/Stable-diffusion
В AUTOMATIC1111 нажмите значок обновления рядом с выпадающим окном выбора контрольных точек в левом верхнем углу. Выберите sd-v1-5-inpainting.ckpt, чтобы включить модель.
Во втором примере я буду использовать Photoshop для закрашивания определенных областей. Вы можете использовать любую другую программу для редактирования фотографий.
Промты и negative prompt
Два изображения, которые нам надо исправить, были созданы с помощью следующих слов.
Prompt:
full-body portrait of beautiful female wearing running outfit, highlights in hair, sitting outside restaurant, brown eyes, wearing a dress, side light
Negative prompt:
disfigured, ugly, bad, immature, two heads
Мы будем использовать те же подсказки и в закрашивании.
Пример 1: Inpainting только для исправления конечностей
Мы исправим следующее изображение с искаженными конечностями:
Загрузка изображения для исправления
Очевидно, что ноги являются наиболее проблемными. Это изображение было создано с помощью вкладки txt2img в AUTOMATIC1111. Мы исправим это изображение только с помощью инпаинта. Используйте удобную кнопку Send в Inpaint под изображением, чтобы отправить только что загруженное изображение в inpainting.
В качестве альтернативы, если вы используете загруженное изображение, перейдите на вкладку img2img и выберите подвкладку Inpaint. Напишите подсказку и отрицательную подсказку в соответствующих полях ввода. Загрузите изображение, перетащив его на холст изображения.
Независимо от того, какой метод вы используете, теперь у вас должен быть настроен графический интерфейс, как показано ниже.
Параметры инструмента Inpainting
Ниже приведен скриншот моей настройки инпайнтинга.
Существует очень много настроек. Важными из них являются:
Sample step: Установите достаточно высокое значение, например 25.
Inpaint area: “Whole picture” создаст изображение, соответствующие всему изображению. “Only masked” закрашивает только замаскированную область, но с более высоким разрешением. Это полезно для закрашивания более мелких деталей, например, лиц.
Batch size: Установите приемлемое число, например 4, чтобы можно было выбрать самый выгодный результат.
Denoising strength: очень важный параметр. 0,75 – самое оно для начала. Увеличьте, если хотите, чтобы он изменился сильнее. Уменьшите, если хотите, чтобы он изменялся меньше.
Masked content: Оставьте значение Original.
Seed: -1 для случайного результата. Это важно, если вы хотите генерировать что-то разное при каждом следующем запуске.
Выберите Stable Diffusion v1.5 inpainting model.
Исправление конечностей
Теперь мы готовы использовать инпайнтинг для исправления конечностей. Сначала исправим ноги, потому что они самые проблемные. Используйте инструмент “Кисть” рядом с холстом “Закрашивание”, чтобы создать маску вокруг ног. Закрасьте ту часть, которую вы хотите восстановить.
Вы можете видеть, что вновь созданные изображения имеют разную степень успеха. Поэтому важно сгенерировать несколько изображений и выбрать лучшее. Хоть оно и не идеально, давайте выберем левое верхнее изображение потому что, нейронка, в случае с ним, движется в правильном направлении.
Если никакой из результатов вас не устраивает, вы можете сгенерировать еще один набор из 4 изображений (убедитесь, что значение seed установлено на -1)
Итак, вот наш первый результат:
Чтобы использовать это изображение для следующего шага, выберите его на правом холсте и используйте кнопку Send to inpaint под изображением, чтобы отправить его на холст inpainting.
После нажатия кнопки вы можете удивиться, почему ничего не изменилось. Причина в том, что все изменения находятся под замаскированной областью, которая покрыта черной краской. Вы увидите изменения, если снимите маску. Но поскольку мы хотим повторно использовать одну и ту же маску, мы не будем этого делать.
Используя ту же маску и те же параметры, нажмите кнопку Generate, чтобы получить еще 4 новых варианта.
Внизу справа – явный победитель. Давайте будем работать с ним дальше.
Исправление кроссовка
Когда мы исправляем кривой результат работы нейронных сетей, чтобы исправить конечности или что-либо еще, следует начинать с большого участка и постепенно переходить к меньшему. Допустим, мы хотим изменить кроссовку, которую она носит.
Мы выполним аналогичные действия: выделим правое нижнее изображение и с помощью кнопки Send to Inpaint отправим его на холст inpaint слева.
И снова, на холсте inpaint, вы обнаружите, что ничего не изменилось.
Чтобы полностью удалить маску, нужно воспользоваться кнопкой отмены в правом верхнем углу. Перекрасьте маску, но только на кроссовке.
Используя те же настройки (“denoising strength” – 0.75) и сгенерировав около 16 картинок, я выбрал следующее изображение:
Обработка лица
Ее лицо немного искажено. Для исправления этого недостатка прекрасно подходит inpainting. Отправьте новое изображение в inpainting и создайте маску на ее лице.
Теперь нам нужно задать новые настройки:
Denoising strength: 0.2. Нам нужно меньшее значение, чем в случае с ногами, потому что лицо не слишком плохое. У нас уже есть глаза, нос и рот в правильном месте. Поэтому нам нужны очень небольшие изменения.
Inpaint area: Only masked. Эта опция масштабирует область закрашивания до большей, выполняет закрашивание и уменьшает масштаб обратно. Поскольку мы закрашиваем небольшую область с большим количеством деталей, эта опция помогает улучшить качество.
Нажмите Generate, чтобы сгенерировать 4 новых изображения с новыми лицами. Ниже показано то, что я выбрал.
Избавляемся от кривизны плеча
И наконец, ее плечо выглядит слегка неестественно. Давайте также исправим это.
При использовании “denoising strength” – 0,5 и сохранении “inpaint area” и “masked only”, мы получаем следующее изображение.
Финишная прямая, доработаем её руки аналогичным методом.
Сравнение результата и подведение итогов
Вы можете использовать закрашивание, чтобы исправлять мелкие недоработанные детали. И я надеюсь, что это хороший пример для демонстрации того, как с помощью одного только инпайнтинга можно исправить конечности.
Подводя итог, можно сказать, что основные идеи этой техники заключаются в следующем:
Повторно используйте одни и те же prompt и negative prompt.
Сохраните содержимое маски как исходное и настройте “denoising strength”, чтобы контролировать степень изменений. (0 означает отсутствие изменений. 1 означает внесение максимальных изменений, вообще не основанных на оригинальном изображении). Таким образом, вам не придется возиться с другими настройками маскируемого содержимого, добиваясь аналогичного эффекта.
Выберите ” Inpaint whole picture” (“Закрасить все изображение”) при закрашивании большой области, и “masked area only” (“Закрасить только маску”) при закрашивании маленькой области.
Начните сначала с крупных дефектов, таких как конечности, и постепенно переходите к более мелким областям.
Пример 2: Закрашивание в ФШ + inpainting
Давайте рассмотрим более сложный пример удаления двух лишних конечностей и добавления одной обратно на изображении ниже. На практике не стоит пытаться исправлять подобные изображения, поскольку гораздо проще создать новые, в которых изначально меньше дефектов. Но это хорошее изображение для демонстрации этой техники, поэтому я выбрал именно его.
Закрашиваем две лишних ноги
Сначала я использовал Photoshop, чтобы закрасить две лишние конечности, подбирая цвет каменного карниза. Совсем необязательно, чтобы они совпадали идеально, потому что мы будем использовать инпайнтинг, чтобы исправить это.
Этот шаг будет проще, если у вас есть устройство для рисования, например, Apple pencil и iPad, но его вполне можно выполнить и с помощью мыши. Если у вас нет доступа к Photoshop, вы можете использовать Gimp или Photopea (онлайн). Они бесплатны. В любой программе для рисования вы можете использовать инструмент “пипетка”, чтобы выбрать цвет поверхности камня поблизости и закрасить этим цветом лишние ножки.
Если вышеперечисленные варианты вам не подходят, вы можете попробовать использовать инструмент Inpaint sketch в AUTOMATIC1111. Но я нашел его глючным и стараюсь не использовать.
Ниже показано мое изображение после закрашивания.
Теперь давайте используем это изображение для инпайнтинга. Используем настройки, аналогичные примеру 1. Но поскольку мы закрасили каменный выступ и хотим, чтобы Stable Diffusion использовал цвет, которым мы его закрасили, мы должны установить ” denoising strength” на низкое значение “0.2 – 0.5” и использовать “original content”.
Model: v1.5 inpainting model (sd-v1-5-inpainting.ckpt)
Prompt: (как в примере №1)
Negative prompt: ((как в примере №1)
Masked content: original
Inpainted area: Whole picture
Sampling step: 25
Denoising strength: 0.5
Я создал 4 изображения.
Как и прежде, результат не должен быть идеальным. Он должен стать лучше только потому, что мы будем прогонять его снова и снова. Я выбрал верхний правый вариант. Не идеально, но, по крайней мере, поверхность камня в целом хорошо прорисована.
Добавляем еще одну ногу
Теперь снова вернитесь в Photoshop и добавьте недостающую ногу. Нарисуйте короткие штаны, лишнюю ногу и подрисуйте другие мелкие дефекты. Снова используйте инструмент “Пипетка”, чтобы подобрать цвет. Ниже показано, что у меня получилось после рисования в Photoshop.
Загрузите изображение обратно на холст inpainting. При уменьшении “denoising strength” до 0,2 я получил эти 4 изображения.
Давайте выберем левое нижнее изображение для продолжения. Пройдем еще один круг генерации, используя “denoising strength” 0,5. Получаем следующее изображение, которое близко к тому, что мы хотим получить:
Исправляем руки, кроссовки и лицо
Время исправить ее руки. Создаем маску вокруг ее рук.
При закрашивании только маскированной области и установке “denoising strength” на 0,75 руки восстанавливаются.
В остальном это небольшие исправления нескольких областей по очереди: Кроссовок, рубашки и лица. Я сохранил те же параметры, что и в предыдущем шаге, но по мере необходимости регулировал ” denoising strength”.
Ниже представлено финальное изображение после всех корректировок.
Финальный результат!
Анализ и резюме
Давайте теперь посмотрим на разницу фото “до” и “после”, чтобы увидеть, чего мы добились.
ДОПОСЛЕ
В этом втором примере мы использовали сторонний инструмент редактирования фотографий для закрашивания определенных областей, чтобы задать направление модели inpainting. Это позволяет в некоторой степени контролировать цвет и формирование окончательного результата.
Надеюсь, я объяснил, как использовать закрашивание для исправления конечностей в этих двух примерах. Как вы убедились, вы можете исправить все, что угодно, если у вас хватит терпения)
Терпения у автора уж точно хватает, но я бы в аналогичной ситуации поигрался бы с промтами или ползунком 1-30)))