Расширения для SD

Для замены лица с помощью SD нам понадобятся: FaceSwapLab, ReActor и IP-Adapter или Instant_ID

IP-Adapter — это препроцессоры и модели ControlNet, которые позволяют использовать референс - изображение в качестве подсказки для: позы, стиля, элементов композиции или лица. Огромным плюсом IP-Adapter является то, что он может заменять не только лица, но и его части, а так же части тела или одежду в стиле референса. Для использования этого инструмента, нам понадобятся модели:

Вариант с Instant_ID более требователен к ресурсам ибо работает только на XL (на февраль 2024) - результат конечно есть и он хороший, позволяет в целом получить неплохой результат используя только ControlNet. Тем же кто решиться на эксперимент  нужно обновить controlnet до версии не ниже V1.1.440, скачать две модели в папку /models/ControlNet, затем переименовать их как показано ниже с сохранением расширения: ip-adapter_instant_id_sdxl И control_instant_id_sdxl. Затем используя две вкладки подрубить обе модели с соответствующими препроцессорами, подробнее в таблице ниже. На системах с видеопамятью 12 ГБ и ниже, на вкладках Controlnet рекомендую включать галочку "Low VRAM" - иначе будите отлетать по памяти.

Так же нам понадобятся регулировки Control Weight - сила с которой будет копироваться стиль, Starting Control Step и Ending Control Step - Начальный шаг и конечный шаг включения в работу модели ControlNet.

FaceSwapLab, ReActor - это расширения конкретно предназначенные для замены лиц, первое с кучей настроек, второе попроще. Но суть сводится к "Натягиванию" лица на исходник, ещё проще представить как наложение грима в соответствии с референсом, т.е. голова полностью не перерисовывается, а следовательно исходник (форма черепа и разворот) должен быть как можно больше подходить под референс. Плюсом этих расширений является сохранение исходной композиции.

PuLID - одно из последних расширений для замены лица, отличается заменой с сохранением стиля и работой на XL Lighting модели, что должно быть довольно быстро. Для установки расширения нужно перейти на страницу разработчика. Согласно инструкции для автоматика1111 установить расширение через ссылку https://github.com/huchenlei/sd-webui-controlnet-evaclip.git Затем нужно скачать модель для ip-adapter и поместить её в ...\webui\models\ControlNet\ Ну и последнее, нам понадобится XL Lighting модель, например вот такая. Для ComfyUI своя история установки.

Самое замечательное - это то, что всё это может работать одновременно!

Образно, на начало 2024г. препроцессоры и модели можно поделить на sd15 и XL. На XL модели действуют связки ip-adapter_face_id + ip-adapter-faceid_sdxl и ip-adapter_clip_sdxl + ip-adapter-plus_sdxl_vit-h и ip-adapter_face_id_plus + ip-adapter-faceid-plusv2_sdxl но для XL обязательно уменьшаем CFG, незабываем включить соответствующую лору в описание. XL вариант (ip-adapter_clip_sdxl + ip-adapter-plus_sdxl_vit-h) - отлично подходит для замены на нечеловеческое лицо в режиме inpaint через маску. Поэтому вариант XL будем рассматривать только в случае крайней необходимости.

*С выходом новой версии controlnet появилась возможность автоматически выбирать Preprocessor в зависимости от используемой версии основной модели генерации.

Варианты замены лиц111

Существует несколько способов замены лиц222:

  • Если личность популярная, достаточно вписать её в подсказку. Можно воспользоваться не только именем Актёра, но и именем персонажа. Это самый лучший и простой вариант замены лиц, но нейросеть должна знать вашего героя.
  • Воспользоваться LoRA/LyCORIS/Embedding - минимодели натренированные на фотографиях необходимого персонажа, дополняют основную модель генерации. Качество обычно хорошее и естественно не все физиономии есть в наличии. Скачать большинство можно с Civitai.
  • Воспользоваться расширениями предназначенными для замены лиц ReActor или FaceSwapLab, а так же последним вышедшим расширением PuLID. Есть ещё Roop - но на текущий момент он не поддерживается.
  • Через ControlNet с помощью IP-Adapter или Instant_ID.
  • Нарисовать самому.

У каждого решения есть свои сильные и слабые стороны. Рассмотрим сложнейший вариант - допустим у нас непопулярный персонаж (ну или мы запамятовали его имя), LoRA и прочего нет на Civitai, а самим не хочется тренировать. В таком случае, самым универсальным и простым решением будет установить Controlnet (IP-Adapter) и расширения для замены лиц ReActor или FaceSwapLab. Именно эти варианты и их сочетания мы и рассмотрим в текущем материале.

Замена лица, части, тела, одежды и прочее

ReActor или FaceSwapLab и IP-Adapter

примеры
А есть ли кратенький пересказ, что бы всё не читать?
Краткие выводы

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

Идеальный, универсальный рецепт состоит из одной, двух или всех трёх частей:

  1. Получение формы черепа соответствующей референсу (ip-adapter)
  2. Наложение грима на полученный череп (FaceswapLab и ReActor)
  3. Увеличение изображения с устранением косяков.

Результат будет зависеть от того что вы хотите:

  1. Сгенерировать картину с новым лицом
  2. Сгенерировать окружение вокруг лица
  3. заменить лицо на существующем изображении, при этом у Вас может иметься исходный Prompt, так и не быть его.

При этом следует придерживаться следующих моментов: 

  • Подсказка не должна конфликтовать с референсом. Подсказка служит для согласования стиля референса и генерируемого изображения, она должна включать не только то что вы хотите сгенерировать, но и описание референса, если не можете описать то воспользуйтесь расширением interrogator. Подсказка меняет референс, вплоть до того что может всё испортить - поэтому не стоит писать отсебятину, пишем только конкретику согласующуюся с референсом. В данном случае лучше не дописать чем переписать. В режиме img2img подсказку можете не писать, лору прописывать обязательно при использовании FaceID.
  • В Controlnet закидываем референс - от него многое зависит, можно и на первом этапе получить отличный результат, особенно на XL модели. Если используем маску то желательно что бы референс имел как можно больше общего с исходником. Стиль референса лица (цвета, эффекты и прочее) в любом случае будут оказывать влияние на исходник. Control Weight = 1.3 постепенно можно увеличить до 2, в зависимости от используемой модели для генерации. Во вкладку Multi-input можно помещать несколько референсов - актуально если есть несколько фоток с небольшим изменением ракурса лица или освещением. Рядом с препроцессором щёлкаем солнышко, не должно быть ошибок в консоли, иначе меняем референс. face_id и PuLID препроцессор более привередлив к лицу на референсе, нежели другие, иногда требует более отдалённый портрет нежели обрезанное лицо. Preprocessor и Model Подбираем согласно таблице и используемой модели для генерации, в последних версиях Controlnet появилась возможность автоматического выбора Preprocessor если выставить ip-adapter-auto. XL - требует ресурсов больше, но результат лучше чем SD1.5 уже на первом этапе.
  • Другие настройки:
    CFG=1 для lighting моделей, и CFG=7 для обычной XL или SD1.5
    Разрешение выбираем согласно рекомендациям к модели и вашего соотношения.
    Семплер опять-таки выбираем исходя из рекомендаций к моделям, Неплохо отрабатывает Sampler=DPM++ SDE Karras или DPM++ SDE SGM Uniform (обязательны для lighting/Turbo моделей).
    Количество шагов так же подбираем исходя из модели, для Lighting (Turbo)=4-12, для обычных моделей 20 или чуть больше.
  • Если итоговый результат с одним только применением ip-adapter нас не устраивает (и перепробовали все референсные фотки с лицом), тогда включаем FaceSwapLab и ReActor в каждый из которых по возможности засовываем немного отличающиеся референсы. Решающий референс будет FaceSwapLab, т.к. он отрабатывает последним. В этом случае задача ip-adapter сводится к формированию правильной формы черепа, не более.
    Последовательность запуска расширений для замены лиц играет решающую роль. при желании последовательность можно поменять в настройках SD. Дело в том, что по умолчанию сначала запускается IP-Adapter, а уже на полученный результат накладывается ReActor, и уже затем в FaceSwapLab - это при их одновременной активации. Ещё точнее, IP-Adapter получает позу лица (форму черепа, ориентацию лица относительно камеры, и мимику), а уже затем с каждым шагом накладывает лицо и стиль с референса на генерацию. После получения некоего результата, это изображение отправляется в ReActor и только затем уже в FaceSwapLab. И чем лучше будет результат на каждом этапе, тем лучше будет общий результат. Решающее значение будет иметь референс лица помещённый в последнее включенное расширение, (IP-Adapter, ReActor или FaceSwapLab). В этом же последнем расширении нужно включить Restore face выбрав из списка CodeFormer или GFPGAN, тем самым мы устраним размытость при замене лица.
  • Для сохранения исходной композиции оригинала - нужно использовать маску в режиме img2img в inpaint вкладке, DS ставим 0.75, и постепенно понижаем до 0.5 - особенно актуально для сложной эмоции на оригинале. На этой же вкладке можно менять часть лица, лицо человека на нечеловеческое, одежду, тело или его часть на референсное (FaceID модели подойдут только для лица человека).
  • Для передачи стиля из подсказки необходимо понизить параметр в controlnet под названием Control Weight в район 0.5-0.8 и прервать влияние Controlnet на определённом этапе используя параметр Ending Control Step - попробовать интервал 0.25-0.4. Так же для передачи стиля рекомендуется использовать модель ip-adapter_pulid_sdxl_fp16 и тогда можно меньше заморачиваться с дополнительными параметрами, т.к. эта модель хорошо передаёт стиль.
  • Для замены на нечеловеческие лица, отлично подходит XL связка препроцессора ip-adapter_clip_sdxl и модели ip-adapter-plus_sdxl_vit-h на разрешении 1024-1024 px.
  • Вместо ip-adapter Вы можете воспользоваться Instant_ID. В этом случае Lora не понадобится, но нужно использовать 2 вкладки Controlnet. С второй вкладки будет браться только расположение лица по глазам и рту, можно подсовывать любое изображение. При этом на вкладках нужно выбрать соответствующие препроцессоры и заранее скачанные модели (см. таблицу). Этот вариант актуален для большей стилизации вставляемого лица под описание или согласование в режиме img2img. Но также, данный вариант более требователен к видеопамяти, поэтому в Controlnet рекомендую включать галочку Low_RAM если видео памяти менее 12ГБ.

Внимание: для увеличения изображения с одновременным улучшением на заключительном этапе можно воспользоваться программкой из серии Topaz - работает быстро, но качество для заменённых лиц заметно выше всё же в SD если внимательно ознакомиться с пунктом "увеличение изображения после замены лица"

Настройки дополняют указанные в разделе для txt2img.

Для img2img в режиме inpaint:

  • Выделяете маской всё лицо или его часть на исходнике, предварительно загрузив изображение в главное окно вкладки inpaint
  • Mask blur отвечает за размытие в месте пересечения генерации и вашего исходника, если видите чёткую границу - то можно увеличить. Если видите искажение генерации на границе - то уменьшайте.
  • Mask mode = Inpaint masked (рисовать в маске)
  • Masked content = original (делать акцент на оригинальном изображении - на повороте головы, на стиле и прочем)
  • Inpaint area = Whole picture (особо важно при использовании IP-Adapter, будет ли брать кусок аналогичный маске с референса или использовать всю картину, нам нужна вся картина, т.к. расположение лица на референсе зачастую не совпадает с расположением на загруженном в inpaint изображении)
  • Only masked padding, pixels = 32 (количество пикселей которые можно подсмотреть и заменить в случае надобности. Чем точнее нужно вписать в маску - тем меньше нужно ставить значение, и наоборот)
  • Sampling method и Steps выбираем исходя из рекомендаций к основной модели.
  • Жмём обязательно на треугольник в разделе отвечающем за разрешение исходника загруженного в inpaint. Разрешение должно быть пропорционально соотношению исходника и не превышать рекомендуемых для главной модели значений.
  • Для SD1.5 CFG Scale = 7 (оставляем по умолчанию, меняем если у нас есть подсказка и в соответствии с общими рекомендациями по данному параметру), Для XL CFG Scale = 1.
  • Для SD1.5 можно варьировать Denoising strength = 0.5 - 0.6 (отвечает за силу с которой допускается вносить изменения в исходник или с каким остервенением следовать референсу помещённому в IP-Adapter, на FaceSwapLab и ReActor - не влияет). Для XL ставим 0.75
  • Seed можете покрутить если прям всё хорошо, но хотелось бы чуть иначе, например родинка не там, серёжку с референса не получили...)

Для IP-Adapter в режиме img2img:

  • В ControlNet включаем "Upload independent control image" - для того, что бы можно было загрузить картинку с референсным лицом
  • Control Weight=1.3

Важные мелочи:

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

Если мы работаем через маску в режиме inpaint - то лучше использовать фото референса как можно с большими совпадениями c исходником по стилю, эмоциям и развороту головы. Для режима txt2img при новой генерации это менее критично, т.к. новая генерация будет подстраиваться под референс при использовании ip-adapter. Так же в этом режиме для передачи стиля на референс лучше всего использовать варианты с Faceid и модели XL.

Для режима inpaint основную модель генерации нужно подбирать исходя из стиля исходника на котором нужно заменить лицо. Например, если исходник Аниме, то и модель для генерации стоит подбирать подходящую, которая может нарисовать в подобном стиле, если исходник фото реального человека - то и модель соответственно должна быть заточена под реализм и в описании не забывать прописывать соответствующие стили.

Разрешение и качество референса должно быть достаточным для чёткого определения личности, можете показать референс своей бабушке и попросить сказать кто изображён на фото 😛 Требования к референсу: что бы вы сами могли отличить черты лица с первого взгляда, достаточно разрешения 258-258 px при условии что само лицо (черты лица) чётко различимо, но лучше подбирать исходя из разрешения рекомендуемого для модели генерации, не стоит выходить за пределы этих рекомендаций.

Для ReActor и FaceSwapLab важен исходник лица полученный на предыдущем этапе (от Controlnet), точнее важна форма черепа, положение в пространстве, расположение глаз, губ, бровей с глазами, и менее важны сами черты, т.к. на всё это всё равно будет натягиваться маска референса, это можно сравнить с наложением грима. А вот IP-Adapter - уже меньше зависит от исходника, ибо он меняет физически голову, а чтобы не смотрелся как Франкенштейн, то меняется и вся композиция в соответствии с референсом. Все варианты в той или иной степени берут стиль с референса, в том числе и Faceid так же влияет на стиль всей картины если лицо имеет явно выраженные признаки.

Для ControlNet с FaceID требуется более отдалённый план референса, в то время как для ip-adapter_clip чем крупнее лицо и меньше лишних деталей на картине - тем лучше. Если будет использоваться только ControlNet с FaceID - подсказку делайте покороче.

Если что-то непохоже получается, проверяйте включение нужного расширения, нет ли ошибок в консоли, замените референс, проверьте правильную ли Lora вставили в подсказку.

Можете воспользоваться перетаскиванием картинки в окно автоматика - для вставки prompt. "Исходник 1" имеет явные противоречия в подсказке, но тем интереснее эксперимент. На боевой подсказке, никаких знаменитостей или несогласованностей с референсом быть недолжно. 

примечание

В интернете вы найдёте довольно много полезной информации по представленным расширениям и не только. Наша задача будет провести дополнительные тесты и попытаться найти новые решения, а так же структурировать знания для быстрого применения. Конечно, для конечного результата требуется ещё ряд манипуляций по улучшению качества, но тут мы разбираем только саму замену лица и фокусы с заменой частей тела, одежды и прочего.

Примечание к "Исходнику 1" - используемая в нём подсказки весьма противоречивая, мало того что там известная актриса, так ещё и брутальный мужик. Тем интереснее увидеть отработку референса женщины.

Основные тесты

Первый этап по замене лица

XL lightig - это турбо модель, отличительной особенностью которого служит уменьшенное количество шагов и CFG. В результате получаем более высокое качество на высокой скорости. Для тестов будем использовать модель dreamshaperXL_lightningDPMSDE с Civitai.

Под "обычной XL моделью" будем понимать не базовую, а уже модифицированную. В примерах будем рассматривать модель juggernautXL_v9Rundiffusionphoto2.

Под первым этапом будем понимать получение правильной форм черепа и основные черты лица. Иногда, особенно при использовании XL моделей, хватает только этого этапа для поучения качественного изображения небольшой фотографии. Если этого мало - тогда приступаем ко второму и/или третьему этапу.

Идеальный, универсальный XL рецепт

  • Подсказка должна быть лаконичной, согласующейся с референсом. Чем короче - тем лучше.
  • Для XL Lighting шагов достаточно 4, для обычной XL хватает 20. Разрешение ставим побольше - так как у нас уже XL модель, например 1024 на 1024 если у вас соотношение сторон квадратное. Обычная XL модель является более универсальным и предпочтительным вариантом для замены лиц. Turbo модели быстрее справляются с задачами и имеют неплохой результат в режиме img2img поэтому вполне могут сгодиться для сценариев с пакетной заменой лиц, например для видео.
  • Для XL Lighting выбираем семплер DPM++ SDE Karras, для обычной XL семплер можем выбрать другой.
  • CFG=2 и постепенно увеличиваем до выполнения подсказки или уменьшаем устраняя эффект пережаренности. Для нечеловеческих лиц или не реалистичной стилистики можно выставить по умолчанию на 7. Этот параметр напрямую зависит от подсказки, используемой модели для генерации, качества референса фото и расположения звёзд на небе.
  • В Controlnet выбираем один из вариантов:
    1) Preprocessor=ip-adapter_face_id_plus + Model=ip-adapter-faceid-plusv2_sdxl + в подсказку <lora:ip-adapter-faceid-plusv2_sdxl_lora:1>
    2) Preprocessor=ip-adapter_face_id + Model=ip-adapter-faceid_sdxl + в подсказку <lora:ip-adapter-faceid_sdxl_lora:1>
    3) При использовании Instant_ID включаете одновременно две вкладки Preprocessor=instant_id_face_embedding + Model=ip-adapter_instant_id_sdxl и Preprocessor=instant_id_face_keypoints + Model=ip-control_instant_id_sdxl, с первой вкладки будет браться референс лица, а со второй расположение головы (глаз и рта).
  • Повышаем параметр Control Weight=1.3 (для IP-Adapter или первой вкладки с Instant_ID)
  • Если будем использовать img2img то референс подгружаем непосредственно в Controlnet. Для этого там есть галочка Upload independent control image

Внимание: для увеличения изображения с одновременным улучшением на заключительном этапе можно воспользоваться программкой из серии Topaz - работает быстро, но качество для заменённых лиц заметно выше всё же в SD если внимательно ознакомиться с пунктом "увеличение изображения после замены лица"

Исходник и референс

Примечания

Только на самом маленьком CFG получилось добиться сходства с референсом (фото). Хорошие результаты получились в режиме txt2img и img2img. В режиме inpaint c маской на лице - результат требует дальнейших манипуляций. Поэтому желательно сразу генерировать с референсом дабы согласовать его стиль с генерируемой картинкой. Однако применение InstantID позволяет гораздо лучше согласовать исходник с референсом как в режиме полноценной генерации, так и в режиме маски.

XL lighting подходит только для режима img2img без маски, в остальных тестах победила "обычная" XL модель. Вариант с турбо актуален для пакетной генерации, например кадров из видео.

В режиме txt2img и img2img для InstantID происходит генерация картинки исходя из описания или стиля референса. А вот в режиме маски - лицо подстраивается под стиль исходника, что является отличительной особенностью применения InstantID.

InstantID можно комбинировать с IP-Adapter для копирования стиля, из особенностей - потребуется понизить вес немного у InstantID.

Тесты

txt2img + IP-Adapter

Сгенерируем картинку по описанию от исходника, в Controlnet закинем референс лица. Проверим на моделях XL и XL Lighting (turbo).

Используя разные семплеры убедимся в возможности применения DPM++ SDE Karras в качестве оптимального решения для Turbo моделей и в возможности поиграться другими семплерами на "обычной" модели XL.
Проверим разные препроцессоры и модели к ним при одинаковых настройках. Напомню что CFG=1 и обязательно прописываем соответствующую lora (см. таблицу в начале)

Сравнение ip-adapter_face_id и ip-adapter_face_id_plus с соответствующими моделями и Lora в подсказке:

juggernautXL_v9Rundiffusionphoto2-Kate Beckinsale Underworld full body shot aughing white-642287368-Time_20240225114014 juggernautXL_v9Rundiffusionphoto2-Kate Beckinsale Underworld full body shot aughing white-642287368-Time_20240225113407
txt2img + Instant_ID

Не отходя далеко от кассы, здесь следует сравнить применение  Instant_ID. А именно, в первой вкладку поместим референс, во вторую исходник (для позы головы). Никакая Lora в описании нам не нужна. Целью данного сравнения является показать как действует вторая вкладка - поза головы, а точнее глаз и рта.

Original juggernautXL_v9Rundiffusionphoto2-Kate Beckinsale Underworld full body shot aughing white-642287368-Time_20240313133610
txt2img + IP-Adapter

Проверим ip-adapter_face_id и ip-adapter_face_id_plus с соответствующими моделями и Lora в подсказке с разными Sampler на "обычной" модели XL и Lighting.

img2img + IP-Adapter

Поместим исходник в главное окно img2img. А в Controlnet референс. В описание незабываем добавить lora - <lora:ip-adapter-faceid-plusv2_sdxl_lora:1> или <lora:ip-adapter-faceid_sdxl_lora:1> в зависимости от препроцессора и модели (см. таблицу).

Выставим разрешение согласно вашему соотношению, у меня квадрат поэтому выставил 1024-1024. Sampler=DPM++ SDE Karras и 4 шага (т.к. lighting модель).

Описание от референса не вставляем. Чем меньше Denoising strength, тем больше исходника, обычно хватает значение по умолчанию 0.75 или меньше.

Ниже сравнение на Denoising strength=0.5 и 0.75 на примере XL lighting на разных препроцессорах:

dreamshaperXL_lightningDPMSDE-lora ip adapter faceid plusv2 sdxl lora 1-1-Time_20240223161635 dreamshaperXL_lightningDPMSDE-lora ip adapter faceid plusv2 sdxl lora 1-1-Time_20240223155624
dreamshaperXL_lightningDPMSDE-lora ip adapter faceid sdxl lora 1-1-Time_20240224102237 dreamshaperXL_lightningDPMSDE-lora ip adapter faceid sdxl lora 1-1-Time_20240224101821

Ниже сравнение на Denoising strength=0.5 и 0.75 на примере обычной XL на разных препроцессорах:

juggernautXL_v9Rundiffusionphoto2-lora ip adapter faceid sdxl lora 1-1-Time_20240224130112 juggernautXL_v9Rundiffusionphoto2-lora ip adapter faceid sdxl lora 1-1-Time_20240224130028
juggernautXL_v9Rundiffusionphoto2-lora ip adapter faceid plusv2 sdxl lora 1-1-Time_20240224125545 juggernautXL_v9Rundiffusionphoto2-lora ip adapter faceid plusv2 sdxl lora 1-1-Time_20240224125717
inpaint маска + IP-Adapter

Поместим исходник в главное окно inpaint. маской выделим лицо с "запасом" для нового черепа. Mask mode=Inpaint masked (рисовать в маске). А в Controlnet кладём референс. Т.к. стиль референса может значительно отличаться по стилю от исходника, то в данном режиме важно грамотно подобрать (скопировать от исходника) подсказку. В описание незабываем добавить lora - <lora:ip-adapter-faceid-plusv2_sdxl_lora:1>.Чем меньше Denoising strength, тем больше исходника, обычно хватает значение по умолчанию 0.75. Разрешение для XL ставим исходя из пропорций оригинала, в данном случае оригинал квадратный, поэтому поставил разрешение 1024-1024 и Inpaint area=Whole picture. Чуть ниже сравнение XL lighting и обычной XL модели.

juggernautXL_v9Rundiffusionphoto2-Kate Beckinsale Underworld full body shot aughing white-1-Time_20240223172741 dreamshaperXL_lightningDPMSDE-Kate Beckinsale Underworld full body shot aughing white-1-Time_20240223171846
inpaint маска + Instant_ID

Поместим исходник в главное окно inpaint. маской выделим лицо с "запасом" для нового черепа. Mask mode=Inpaint masked (рисовать в маске). А в Controlnet кладём референс. Т.к. стиль референса может значительно отличаться по стилю от исходника, то в данном режиме важно грамотно подобрать (скопировать от исходника) подсказку, но в данном случае я оставил подсказку пустой.

Чем меньше Denoising strength, тем больше исходника, обычно хватает значение по умолчанию 0.75. Разрешение для XL ставим исходя из пропорций оригинала, в данном случае оригинал квадратный, поэтому поставил разрешение 1024-1024 и Inpaint area=Whole picture. Снова сравниваем два изображения с Denoising strength=0.75 и 0.9

juggernautXL_v9Rundiffusionphoto2-empty-776846960-Time_20240313132340 juggernautXL_v9Rundiffusionphoto2-empty-776846960-Time_20240313132527
img2img + Instant_ID

Поместим исходник в главное окно img2img. А в первую вкладку Controlnet референс. Вторую вкладку включим как положено, но референс подгружать не будем, пускай расположение лица берёт с нашей основной картинки. В описание lora не нужна.

Выставим разрешение согласно вашему соотношению, у меня квадрат поэтому выставил 1024-1024. Sampler=DPM++ 2M Karras и 24 шага (т.к. будем использовать обычную модель XL).

Описание и негатив пустые. Чем меньше Denoising strength, тем больше исходника, обычно хватает значение по умолчанию 0.75 или меньше. Ниже сравнение оригинала с Denoising strength=0.75 и CFG=2 на примере XL juggernautXL_v9Rundiffusionphoto2:

Original juggernautXL_v9Rundiffusionphoto2-empty-776846960-Time_20240313122327

Первый этап по замене лица

В качестве XL lightig модели будем использовать juggernautXL_v9Rdphoto2Lightning.

Под "обычной XL моделью" будем рассматривать модель juggernautXL_v9Rundiffusionphoto2.

Данный способ намного проще и менее требовательный чем InstantID. А так же позволяет стилизовать изображение на этапе генерации, это делает применение универсальным и оптимальным.

Исходник и референс

Примечания

Только на самом маленьком CFG получилось добиться сходства с референсом (фото). Хорошие результаты получились в режиме txt2img и img2img. В режиме inpaint c маской на лице - результат требует дальнейших манипуляций. Поэтому желательно сразу генерировать с референсом дабы согласовать его стиль с генерируемой картинкой. Однако применение InstantID позволяет гораздо лучше согласовать исходник с референсом как в режиме полноценной генерации, так и в режиме маски.

XL lighting подходит только для режима img2img без маски, в остальных тестах победила "обычная" XL модель. Вариант с турбо актуален для пакетной генерации, например кадров из видео.

В режиме txt2img и img2img для InstantID происходит генерация картинки исходя из описания или стиля референса. А вот в режиме маски - лицо подстраивается под стиль исходника, что является отличительной особенностью применения InstantID.

InstantID можно комбинировать с IP-Adapter для копирования стиля, из особенностей - потребуется понизить вес немного у InstantID.

Идеальный, универсальный XL рецепт

  • Подсказка должна быть лаконичной, согласующейся с референсом. Чем короче - тем лучше.
  • Для XL Lighting шагов достаточно 12, для обычной XL хватает 20 (рекомендуемое к модели генерации). Разрешение ставим рекомендуемое для модели - так как у нас уже XL модель, можем поставить например 1024 на 1024 если у вас соотношение сторон квадратное. Обычная XL модель является более универсальным и предпочтительным вариантом для замены лиц. Turbo модели быстрее справляются с задачами и имеют неплохой результат в режиме img2img поэтому вполне могут сгодиться для сценариев с пакетной заменой лиц, например для видео.
  • Для XL Lighting выбираем семплер DPM++ SDE SGM Uniform, для обычной XL семплер можем выбрать другой.
  • Для XL Lighting CFG=1, а для обычной модели можно выставить по умолчанию CFG=7. Этот параметр напрямую зависит от подсказки, используемой модели для генерации, качества референса фото и расположения звёзд на небе.
  • В Controlnet выставляем настройки: Preprocessor=ip-adapter-auto + Model=ip-adapter_pulid_sdxl_fp16
  • Если будем использовать img2img то референс подгружаем непосредственно в Controlnet. Для этого там есть галочка Upload independent control image

Внимание: для увеличения изображения с одновременным улучшением на заключительном этапе можно воспользоваться программкой из серии Topaz - работает быстро, но качество для заменённых лиц заметно выше всё же в SD если внимательно ознакомиться с пунктом "увеличение изображения после замены лица"

Тесты

Как видно из тестов на обычной модели CFG=7 весьма оптимальный параметр. так же этот параметр подходит для передачи стиля в подсказке.

В примере сравнение генерации на 4 и 12 шагах. Сравниваются оригинальные генерации и с заменой лица. Как видно из тестов 12 шагов обеспечивают больше детализации и если увеличить фото(открыть в новом окне) можно увидеть большую точность на мелких элементах лица - типа глаз.

juggernautXL_v9Rdphoto2Lightning-Kate Beckinsale Underworld full body shot aughing white-2-Time_20240813114927 juggernautXL_v9Rdphoto2Lightning-Kate Beckinsale Underworld full body shot aughing white-2-Time_20240813114842
juggernautXL_v9Rdphoto2Lightning-Kate Beckinsale Underworld full body shot aughing white-2-Time_20240813114159 juggernautXL_v9Rdphoto2Lightning-Kate Beckinsale Underworld full body shot aughing white-2-Time_20240813114404

txt2img

Несмотря на то, что в данном разделе рассматривается SD1.5, тем не менее применение второго этапа актуально и для XL моделей в случае необходимости. SD1.5 позволяет на более слабом железе добиваться нужных целей, но часто требует выполнение второго и третьего этапа.

txt2img - использование данного режима если вам нужно заменить лицо подстраивая стиль вашей исходной композиции и референса образуя общую картину. В зависимости от выбранного препроцессора и модели ip-adapter в той или иной степени смешиваются стили или берутся отдельные элементы. В таблице в начале материала можно посмотреть что лучше подходит для лица, а что для стиля с референса.

txt2img

Протестируем наличие Clip препроцессор в сочетании с расширениями FaceSwapLab и ReActor.

txt2img

Протестируем наличие Lora в подсказке и как это влияет на конечный результат с применением расширений FaceSwapLab и ReActor.

txt2img

Протестируем применение расширений FaceSwapLab и ReActor без ip-adapter. Сравним с эталоном - если персонажа знает модель.

Выводы

Имейте ввиду, IP-Adapter_clip (в режиме txt2img) помимо лица меняет стиль и саму композицию, IP-Adapter_Face_id_plus подстраивает исходник под референс, а IP-Adapter_Face_id_plusv2 подгоняет референс под исходник!

Разницы в качестве лиц, на настройках по умолчанию, между ReActor и FaceSwapLab v1.2.7 практически нет, однако их можно использовать совместно и что немаловажно - с разными референсами, особенно это актуально на сложных исходниках с ярко выраженной эмоцией.

Победитель по переносу лица с референса для SD1.5: IP-Adapter_Face_id_plus (с lora) + FaceSwapLab + Reactor с разными референсами. В такой связке основной стиль будет браться с подсказки, но если непосредственно на лице будет специфические элементы или оно будет в определённом стиле - то эти факторы в любом случае будут оказывать воздействие на итоговую композицию. Для определения победителя среди XL - смотрите предыдущий раздел посвящённый этой модели.

FaceSwapLab или Reactor - как бы накладывают грим на имеющееся лицо. А IP-Adapter меняет саму форму лица подгоняя референс к исходнику или исходник к референсу. Для txt2img очень важен Prompt.

Если хотите больше сохранения композиции - используйте маску в режиме inpaint на вкладке img2img или на второй вкладке Controlnet выбирайте inpaint и рисуете там маску.

txt2img

Дополнительный тест на другой модели SD1.5, что бы быть уверенным в победителе и необходимости применения таких расширений как Face SwapLab и/или ReActor.

Лицо выходит более похожим на референс, но менее чётким, этот нюанс исправляется на третьем этапе.

photon_v1-Kate Beckinsale Underworld full body shot aughing white-642287368-Time_20240225090417 photon_v1-Kate Beckinsale Underworld full body shot aughing white-642287368-Time_20240225090322-swapped

Пример сравнения без и с применением FaceSwapLab+ReActor на модели photon_v1 в режиме txt2img - поэтому ракурс отличается от исходного, который был на Deliberate_v2 в экспериментах слева.

ip-adapter_face_id_plus+ip-adapter-faceid-plusv2_sd15+<lora:ip-adapter-faceid-plusv2_sd15_lora:1>

Original deliberate_v2-Kate Beckinsale Underworld full body shot aughing white-642287368-Time_20240225085917-swapped

Пример сравнения исходника и с использованием нескольких  расширений на модели Deliberate_v2 - поэтому ракурс сходится с экспериментальным. Естественно нужно дорабатывать через апскейл чёткость и косячность вставки и крутануть пару Seed.

inpaint

Второй этап подразумевает под собой использование таких расширений как FaceSwapLab и/или ReActor. В этом случае на череп, полученный на первом этапе, натягивается грим. Это образно, но суть я думаю понятна. Данный этап можно выполнить и на этапе генерации во вкладке txt2img. Однако, для пущей сложности мы поставим перед собой задачу сохранить исходную композицию, т.е. будем работать в маске на вкладке inpaint. Если использовать просто вкладку img2img - то итоги будут аналогичные предыдущему пункту с тестами в режиме txt2img, только с использованием подгруженной картинки и автоматической обработкой всей головы. А вот в режиме inpaint всё гораздо интереснее.

В данном случае будем расcматривать использование SD1.5, но суть при использовании XL аналогичная, как и результаты.

Исходник и генерация отличаются моделями - допустим мы незнаем каким был исходник, поэтому будем генерировать на photon_v1 (хотя исходник deliberate_v2) и препроцессор ip-adapter_clip_sd15

Вкладка img2img - inpaint

inpaint без подсказки

IP-Adapter по прежнему, помимо лица меняет стиль, НО только лица, а саму композицию НЕ трогает. 

Итог: Победитель в режиме img2img (на вкладке inpaint): IP-Adapter (+lora) + ReActor + FaceSwapLab с разными референсами, последний из которых будет самым важным. 

 

Inpaint

Тест только с применением ip-adapter_face_id_plus+ip-adapter-faceid-plusv2_sd15+<lora:ip-adapter-faceid-plusv2_sd15_lora:1> в сравнении с применением дополнительных расширений FaceSwapLab+ReActor

photon_v1-lora ip adapter faceid plusv2 sd15 lora 1-1-Time_20240225115831 photon_v1-lora ip adapter faceid plusv2 sd15 lora 1-1-Time_20240225115931-swapped

Restore face

Как видно из предыдущих тестов, расширения FaceSwapLab и ReActor мылят изображение, это можно исправить с помощью Restoreface непосредственно встроенных в каждое расширение (нужно только включить), или воспользоваться специальным методом раскрытым в третьем этапе. У FaceSwapLab Restore face находится на вкладочке Global-Post-Processing или Post-Processing & Advanced Mask Options, а у ReActor на основной вкладке. Достаточно выбрать CodeFormer или GFPGAN

Ниже пример с выбранным из списка Upscaler и без него.

тесты с учётом результатов экспериментов

Всегда экспериментируйте с включением от одного расширения до всех. Маску делайте как точно по контуру, так и с захватом деталей

photon_v1-Downblouse Nipslip windblownface a woman shouting parachute clouds-8-Time_20231108152450 photon_v1-Underworld full body shot aughing white shirt unbuttoned-1-Time_20231108215149-swapped
SD upscale

В данном примере рассмотрим применение SD1.5 для увеличения изображения с конечным улучшением результата. Естественно нам для этого понадобится модель с высокой детализацией лиц и способная делать генерации фотографического качества.

Необходимые расширения: Controlnet не ниже 1.1.1.440 и Tiled Diffusion - ставятся через менеджер расширений.

 

Необходимые файлы:

  • Фото модель для генерации (...\webui\models\Stable-diffusion\) - Главным критерием при выборе модели, является его способность делать изображения фотографического качества или в другой нужной Вам стилистике. Для фото вполне неплохо подходит модели epicphotogasm_z, photon_v1, juggernaut_reborn и другие.
  • Juggernaut Negative Embedding (...\webui\embeddings\) - устраняет недочёты
  • Add More Details - Detail Enhancer / Tweaker (细节调整) LoRA (...\webui\models\Lora\) - Добавляет детализацию
  • SDXLrender (...\webui\models\Lora\) - Повышает контрастность и качество кожи сопоставимое с уровнем XL но на моделях SD1.5
  • 4xNomosUniDAT_otf (...\webui\models\ESRGAN\) - Апскейлер - для увеличения изображения

 

Итак, для начала нужно картинку закинуть в img2img. Удаляем подсказку, затем в неё подключаем Lora на детализацию и улучшения: "<lora:more_details:1>, <lora:SDXLrender_v2.0:0.6>“. А в негатив пишем улучшалки на реализм и текстовую инверсию "(worst quality, low quality, lowers,:1.4) jpeg artifacts, poorty drawn, doll, Illustration, graphic, eg, cgi, cartoon, anime, glitch, 3d. 2d. octane, sketch, acrylic, painting, drawing, airbrushing, semi-realistic, rendering, blender, digital art, manga, (ugly eyes:1.1), under-saturation, overexposure, underexposed, JuggernautNegative-neg". Незабываем, в самом Controlnet изображение никакое не вставляем, с предыдущего этапа могла остаться галочка Upload independent control image - отключаем!

  • Sampling method=DPM++ 3M SDE Karras
  • Denoising strength=0,35 (степень допустимого изменения оригинала). Чем меньше - тем больше искажений при увеличении, чем больше - тем больше теряется лицо.
    CFG=7, оставляем по умолчанию исходя из рекомендаций к модели. Если поставим меньше - будет размытое, не детализированное изображение, в этом случае обязателен 2-й этап. Если поставим больше - потеряем реалистичность, ввиду передачи большего количества параметров и необходимости их запихнуть в итоговую генерацию, что может привести к "пережарке" и появлению дефектов.
  • Далее включаем три вкладки Controlnet, первые две служат для большей универсальности сохранения черт в ряде случаев, особенно при ярко выраженной эмоции или рассогласованной композиции (когда лицо мужчины, а тело женщины), для артов или стилизованных лиц первые две вкладки необязательны:
    1) Control Weight=0,7. Canny.
    2) Control Weight=0,7. Lineart с препроцессором lineart_realistic.
    3) Control Weight=0.7 Tile/Blur с препроцессором tile_resample и здесь же меняем приоритет на ControlNet is more important.
    * Control Weight влияет на степень подчёркивания черт лица и вместе с тем проявлением дефектов, а т.к. оно замена лица не даёт 100% схожести с оригиналом и наверняка имеет искажения, то лучше дать немного свободы апскейлеру, нежели ещё больше подчёркивать недостатки.
  • Включаем Tiled Diffusion.
    Latent tile width=128, область наложения для согласования плиток. зависит от разрешения исходного изображения, исходим из того что наш исходник лежит в пределах от 512 до 1280 px. Обратите внимание на итоговый результат глаз,, если они выйдут разными - увеличивайте этот параметр,
    Latent tile overlap = 8, область размытия перехода границ плитки, увеличивайте если их увидите, но слишком большое значение приведёт к появлению артефактов,
    Latent tile batch size=4, количество одновременно обрабатываемых плиток что немного влияет на скорость, но зависит от размера вашей видеопамяти,
    Scale Factor=2, во сколько раз будем увеличивать исходник,
    Upscaler=4xNomosUniDAT_otf, или 4x_NMKD-Siax_200k, 4x-UltraSharp.
    Жмём генерировать. Должна начаться обработка плитками с захватом областей.

2. Цель добавить деталей и лучше прорисовать имеющиеся. Процесс длительный, запасаемся попкорном. Перекидываем полученное изображение на предыдущем этапе в главное окно img2img. 

  • меняем Sampling method=DPM++ 2M Karras (лучше добавляет деталей)
  • меняем Denoising strength=0.2-0.5. Если оригинал прям точь в точь похож на референс и мало дефектов - то ставьте побольше, что бы больше получить детализацию, а если в оригинале есть шумы и он чуть-чуть непохож на того кого нужно - то ставьте поменьше.
    Жмём генерировать. Должна начаться обработка плитками с захватом областей, но плиточек будет больше чем в предыдущем этапе, от этого и пропорциональное увеличение обработки по времени.

Если изображение теряет сходство с лицом оригинала или появляются некие артефакты - понижайте Denoising strength. Если мощностей Вашего ПК достаточно, можете увеличить  Scale Factor.

3. Исправляем недочёты. На этом этапе перекидываем полученное на втором этапе изображение на вкладку inpaint. Отключаем расширения (controlnet и SD upscaler), разрешение правим в соответствии с вашей картинкой если стоит параметр Inpaint area=Only masked (в этом случае разрешение указанное далее будет влиять на область маски, что позволит обработать её в более высоком качестве) особо актуально например для глаз. Что бы сохранить оригинал, оставляем значение Denoising strength=0.3 и меньше.


Важно помнить что SD при обработке картины старается согласовать все детали, поэтому мужик с сиськами - это довольно примечательный пример, когда SD старается понять и усреднить результат при увеличении.

Фишки и фокусы

замена элементов, части лица, одежды и не только

Суть метода заключается в использовании двух вкладок ControlNet: на первой мы используем модель inpaint, а на второй вкладке IP_Adapter. 

Исходники
Выводы

Как видно, можно вполне успешно заменять часть лица или одежду

Если что-то не устраивает попробуйте сменить Seed. а лучше генерируйте сразу пачкой через Batch size.

Подсказка в случае терминатора включала всего одно слово: Terminator. А для второго теста - подсказка из Interrogater + негатив. Во втором случае гораздо лучше отработали границы объектов, и правильнее был подобран материал одежды. Отсюда ещё раз подтверждаем правило - "очень сильно на результат влияет правильная подсказка"

После получения некоего промежуточного варианта можно перекинуть результат опять в окно Inpaint и повторить обработку повторно.

Делайте скидку на то, что это тесты, естественно нужно лучше прописывать Prompt, покрутить Mask blur - что бы размыть границы, подкрутить Denoising strength - чтобы больше вносилось изменений в исходник, ну и в конце заглянцевать апскейлером

deliberate_v2-empty-9-Time_20231110132144 deliberate_v2-terminator-9-Time_20231110130630

Вкладка txt2img (маска в ControlNet. на первой вкладке с препроцессором inpaint_only и моделью inpaint) на второй вкладке модел ip-adapter-plus_sd15

Без подсказки VS с подсказкой

deliberate_v2-empty-2516217281-Time_20231110135733 deliberate_v2-terminator-2559442782-Time_20231110135804

Вкладка img2img (маска не в ControlNet. а в главном окне inpaint) на модели ip-adapter-plus_sd15

Без подсказки VS с подсказкой

photon_v1-empty-2-Time_20231110233816 photon_v1-a woman in a white hat and white-2-Time_20231110225056

Вкладка txt2img (маска в ControlNet. на первой вкладке с препроцессором inpaint_only и моделью inpaint) на второй вкладке модел ip-adapter-plus_sd15

Без подсказки VS с подсказкой

photon_v1-empty-2-Time_20231110234216 photon_v1-a woman in a white hat and white-2-Time_20231110234131

Вкладка img2img (маска не в ControlNet. а в главном окне inpaint) на модели ip-adapter-plus_sd15

Без подсказки VS с подсказкой

Исходники
Выводы
  • Маску следует наносить в зависимости от того что мы хотим заменить - голову или лицо, часть лица или часть тела, одежду
  • От главной модели генерации многое зависит, можно сделать референс как похожий на Аниме, так и в реалистичном стиле. Оригинально выглядит вставка элементов с разными стилями.
  • Не стоит забывать, что иногда проще вписать тело вокруг лица, чем лицо в тело.
  • Подсказка позволяет лучше согласовать референс с исходником, но тут важно не переборщить, ведь описание меняет наш референс в соответствии с описанием, а следовательно может его изменить до неузнаваемости!
Тесты

Грубая вставка без описания

Референс лица - выделяем только лицо photon_v1-empty-4-Time_20231027205955

Оригинал тела VS Вставленное лицо в тело

  • Без описания
  • Маской выделяем грубо всю голову с растительностью на голове и шеей.
  • Незабываем проверить разрешение нажав на треугольник рядом с ползунками - автоматически выставит согласно загруженной картинке.
  • Denoising strength = 0,5
  • В ControlNet вставляем "лицо", выбираем Модель "ip-adapter-plus-face_sd15"

 

Точная вставка с описанием

photon_v1-a woman with a necklace and a crown-4-Time_20231027213021 photon_v1-a woman with a necklace and a crown-4-Time_20231027213232

Чуть ниже Prompt с значениями для сравнения. Первая картинка ничем по параметрам не отличается от предыдущего эксперимента (кроме более точной маски), а вот вторая картинка уменьшил CFG и силу контроля (выделено жёлтым в описании). Лишь замечу, что оригинал лица это Deliberate2 а вставляем в photon1 - и тем не менее результат как говориться "на лицо".

a woman with a necklace and a crown, like artgerm, inspired by Sailor Moon, perfectly lit face, ultrarealistic sweet bunny girl, cosplay journal cover, betty cooper, removed watermarks, full-cosplay, detailed makeup on eyes, live - action, anime cover
smiling at camera, skin_details, perfect teeth, (detailed face), blushing, detailed glossy eyes, sharp, details, 8k, absurdes, pov, hi res, highly intricate details, analog, raw, cinestill, volumetric lighting, deep rich colors, ((zoomout))

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 или 4, Seed: 4, Size: 512x768, Model hash: ec41bd2a82, Model: photon_v1, Denoising strength: 0.5, Mask blur: 4, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ControlNet 0: "Module: ip-adapter_clip_sd15, Model: ip-adapter-plus-face_sd15 [71693645], Weight: 1 или 0.5, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced", Version: v1.6.0

Точная вставка Без и с описанием

photon_v1-lora ip adapter faceid plus sd15 lora 1-4-Time_20240124153636 photon_v1-lora ip adapter faceid plus sd15 lora 1-4-Time_20240124153755-swapped

face_id VS face_id+FaceSwapLab+ReActor  БЕЗ подсказки

photon_v1-a woman with a necklace and a crown-4-Time_20240124155245 photon_v1-a woman with a necklace and a crown-4-Time_20240124155336-swapped

face_id VS face_id+FaceSwapLab+ReActor  С подсказкой

Тест параметров

Тест основывается на логике, когда цель Controlnet не сделать супер вариант на все 100%, а в том что бы получить основные черты лица, такие как расстояние между глазами, форма головы - скулы, подбородок. А уже потом наложить грим на подходящую форму с помощью FaceSwapLab и ReActor. Конечно же можно воспользоваться Instant_ID, но тут есть ряд ограничений по мощностям ПК и применяемым моделям - только XL (на февраль 2024)

Точная вставка

Сравниваем оригинал и с заменённым лицом на точной маске при включении расширений FaceSwapLab и ReActor. 

Кучу тестов параметров смысла приводить смысла нет, а вот показать результат и описать параметры в конкретном случае нужно.

Original photon_v1-lora ip adapter faceid plus sd15 lora 1-4-Time_20240131215908-swapped

Если мы хотим сохранить/согласовать стиль исходника, то крутим следующие параметры (с учётом небольшого, но правильного описания) на конкретном примере:

  • Denoising strength = 0.5 допустимая сила изменения исходника под воздействием подсказки, негатива, параметров и расширений. В данном случае это золотая середина, позволяет изменить оригинал придав черты референса в соответствии с настройками. Задача на данном этапе придать черты лица и форму черепа сходную с референсом, не более.
  • Control Weight = 0.5 это сила с которой референс Controlnet влияет на исходник.
  • Ending Control Step = 0.2 означает что только первые 20% включён Controlnet. Но именно эти проценты самые важные, т.к. на них закладывается основа. В случае использования FaceSwapLab и ReActor - задача Controlnet в изменении формы черепа на который будет накладываться в последующем грим двумя указанными расширениями, а не сделать всю работу.

Не забываем - в подсказку добавляем соответствующую Lora, в данном случае <lora:ip-adapter-faceid-plus_sd15_lora:1>

<lora:ip-adapter-faceid-plus_sd15_lora:1>,
(blonde white hair:1.6), man, a surprised look, photo, (smirking, happy:1.6)

Negative prompt: (worst quality:2), (low quality:2), (normal quality:2)

Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4, Size: 512x768, Model hash: ec41bd2a82, Model: photon_v1, Denoising strength: 0.5, Mask blur: 4, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, ControlNet 0: "Module: ip-adapter_face_id_plus, Model: ip-adapter-faceid-plus_sd15 [d86a490f], Weight: 0.5, Resize Mode: Crop and Resize, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 0.2, Pixel Perfect: True, Control Mode: Balanced, Hr Option: Both, Save Detected Map: True", Lora hashes: "ip-adapter-faceid-plus_sd15_lora: 0c2d19fef071", Version: v1.7.0, similarity = {}, ref_similarity = {}

Референс лица в маску

Иногда следует покрутить CFG Scale, Denoising strength.

В данных примерах было выделено лишь лицо. Mask mode = Inpaint masked (рисовать в маске) - это означает, что наш референс с лицом и препроцессор ip-adapter-plus-face_sd15 должны были заменить только лицо которое взято с референса.

  • CFG Scale = 7
  • Denoising strength = 0.5
  • Модель основная = меняется в зависимости от эффекта с которым мы хотим получить лицо

В таком случае мультяшное лицо или 2.5D получить проще чем реалистичное из-за направленности моделей.

Сам стиль можно понять из окружения лица, референс тот-же что в начале этого блока экспериментов.

референс тела вне маски

В качестве референса будет уже не лицо, а тело. 

В данных примерах было выделено лишь лицо. Mask mode = Inpaint not masked (рисовать вне маски) - это означает, что наш референс с лицом и препроцессор ip-adapter_sd15_plus должны были заменить НЕ лицо, а окружение которое взято с референса.

  • CFG Scale = 7
  • Denoising strength = 0.5
  • Модель основная = photon1

Я думаю после этого, детский фокус с заменой фона рассматривать не стоит?

В случае IP-Adapter - который отвечает за подгружаемый стиль, Control Weight соответственно будет отвечать за силу стиля.

Denoising strength - отвечает за силу изменений которые допускается вносить вне или в маске нашим описанием и/или дополнительными расширениями. В нашем конкретном случае Denoising strength будет отвечать за то, с какой силой будет влиять ControlNet (если подсказка у нас пустая), т.е. как сильно будет проявляться стиль.

CFG Scale - отвечает за силу подсказки, за то с каким остервенением художник следует вашим указаниям, аналогично вносятся изменения вне или в маске в соответствии с настройками которые мы указали. В нашем конкретном случае CFG Scale будет отвечать за стиль ControlNet (если подсказка у нас пустая).

CFG Scale будет схож с Denoising strenght, но относитесь к этим понятиям как "желание"  и "Возможности" при рисовании картины. 

И раз уж пошла пьянка...

Mask blur - отвечает за размытие на границе маски с целью сделать более плавным переход. Зависит от Референса в Inpaint и ControlNet, основной модели, разрешения и звёзд на небе. Подбирается на глаз методом эксперимента.

Mask mode - генерировать в или вне маски

Masked content - на что делать акцент при генерации:

  • fill - на описании (в нашем случае это ещё стиль референса из ControlNet, ставим тогда когда хотим больше стиля в генерируемой области)
  • original - на оригинальное изображении, особенно полезно если отличаются размеры или ракурс головы в маске (естественно стоит параметр рисовать в маске). Если рисуем вне маски - то из окружения пытается сделать что-то удовлетворяющее стилю и описанию.
  • latent noise - генерирует шум из описания и в нашем случае из стиля полученного из ControlNet, используется для фокусов покусов недоступных для понимания простым смертным, не даёт свести изображение к конечному результату, ка бы останавливает генерацию не завершив её.
  • latent nothing - подмешивает шум, основанный в нашем случае на стиле полученного из ControlNet, на каждом шаге. Что может положительно сказаться на конечном результате только при использовании ControlNet.
  • Inpaint area - выбирает рисовать на общем холсте, или увеличить область маски до указанной в разрешении плитки и уже с этим разрешением вписывать стиль (или лицо если выбрана соответствующая Модель), а потом вставить эту плиточку назад на общую картину.

оригиналы

Референс лица - выделяем только лицо

Референс лица - выделяется чисто лицо, ухо и один локон волос для примера

deliberate_v2-best quality masterpiece 4k anime wallpaper 2d manga-4-Time_20231028120706 deliberate_v2-empty-4-Time_20231028122414

Оригинал тела VS Вставленное окружение вокруг лица

В качестве референса будем использовать тело с фоном в стиле anime

В данных примерах было выделено лишь лицо с одним локоном волос. Mask mode = Inpaint not masked (рисовать вне маски) - это означает, что наш референс с лицом и препроцессор ip-adapter_sd15_plus должны были заменить НЕ лицо, а окружение которое взято с референса.

    • Подсказка пустая
    • CFG Scale = 7
    • Denoising strength = 0.5
    • Модель основная = deliberate_v2

ip-adapter-plus_sd15

Следует отметить, что помимо основных ползунков Denoising strength и Control Weight придётся крутануть ещё и пару Seed. После нахождения наилучшего результата, можно поиграться с увеличением/уменьшением размера маски под череп референса. И Обязательно добавьте описание, хотя бы из iterrogator вставив туда референс.

В тестах Faceid - не подойдёт, используем adapter-plus_SD15 для SD1.5 и ip-adapter-plus_SDXL_vit-h с соответствующими 

Исходники
Выводы
  • В особо сложных вариантах, когда череп референса не сходится с исходником, следует обязательно добавлять описание в подсказку.
  • Основную модель для генерации лучше подбирать исходя из её возможностей.
  • Результат весьма впечатляет на XL моделях с описанием в маске в пределах лица, или на всю голову маска и тогда можно без описания.
Тесты
Дракон

Чёткая маска

Злой лёва

Грубая маска без описания

Злой лёва

Чёткая маска с описанием

Т.к. маска с исходником не позволяют вписать череп референса. Либо нужно икать более подходящий референс, либо увеличивать маску, ну или как здесь - добавлена подсказка для Лёвы:

a lion with its mouth open and its mouth wide, ultra-realistic digital art, showing anger, by Art Brenner, sharp looking portrait, an extremely angry, rendered in corona, sharp image, defiant, about to step on you, mad painting

SD XL

Чёткая маска с двумя ip-adapter

Мультипликационный герой

Неподходящий ракурс

В основном все тесты проходили на PhotonV1 однако стоит попробовать модели ориентированные больше на референс. В данном случае DeliberateV2 лучше справилась с задачей. Подсказка от предыдущего варианта со злым лёвой.

Мультипликационный герой

С более подходящим ракурсом

Если хотим обойтись без описания, подбирайте референс хотя бы из далека напоминающий ракурс исходника. Зеркальность не играет роли.

Мультипликационный 3D герой

С более подходящим ракурсом

Если хотим обойтись без описания, подбирайте референс хотя бы из далека напоминающий ракурс исходника. Зеркальность не играет роли.

Треминатор

тест XL препроцессора ip-adapter_clip_sdxl и модели ip-adapter-plus_sdxl_vit-h на разрешении 1024-1024 px, MOHAWK_v18VAEBaked - в качестве основной модели генерации

Дополнительные тесты

Исходники

Референс лица

тест на разных моделях

Для наглядности возьмём лицо с определённой стилистикой, что бы протестировать не только замену лица на разных моделей, но и то как стиль референса будет влиять на генерацию.

Выводы
  • От модели зависит очень многое
  • Если не использовать Inpaint маску,  то несмотря на референс лица и используемую модель ip-adapter-plus-face_sd15 - всё равно меняется стиль всей картины согласно референсу
Тесты

Начальный Prompt + OpenPose VS Начальный Prompt + ip-adapter-plus-face_sd15 + OpenPose

При этом у нас описание не противоречит референсу!

Deliberate2
00103-4 00091-4
photon1
00108-4-1 00107-4
revAnimated_v121
00112-4 00111-4
meinamix_meinaV11
00109-4 00110-4
Копирование лица, слабо ?

замена лица на вкладке txt2img

Модель ip-adapter-plus-face_sd15 - судя из тестов, делает больше акцент на лице, нежели на всём остальном, но и про стиль не забывает!

1. Исходники и результат

2. Исходники и результат

inpaint без подсказки

Как видим, берётся не только лицо. В первом тесте у нас получилось чудное нечто из-за противоречий описания и референса. А вот во втором явно лучше. Поэтому, очень важно грамотно писать описание!

Тест без подсказки

  • Важно не разрешение, а узнаваемость персонажа.
  • Необходимо полное лицо включая не обрезанные волосы, как раз на экспериментах видно к чему приводит обрезанная макушка.
  • Чем больше совпадений исходника с референсным лицом  - тем лучше! Т.е. рекомендуется подобрать совпадающие наклон головы, цветовая гамма, основная модель генерации, эмоция ну и т.д и т.п.
  • Помимо лица, даже при установке Модели ip-adapter-plus-face_sd15, будет браться стиль и окружение - что в свою очередь будет приводить не только к замене лица, но и изменению всей картины.

Рекомендуемые настройки исходя из тестов:

  • Семплер  DPM++ 2M Karras
  • CFG Scale от 2 до 7 (желательно тестить эти два крайних значения)
  • Denoising strength 0.5
  • Control Weight в самом ControlNet от 0.5 до 1
inpaint без подсказки
  • Важно не разрешение, а узнаваемость персонажа.
  • Необходимо полное лицо включая не обрезанные волосы, как раз на экспериментах видно к чему приводит обрезанная макушка.
  • Чем больше совпадений исходника с референсным лицом  - тем лучше! Т.е. рекомендуется подобрать совпадающие наклон головы, цветовая гамма, основная модель генерации, эмоция ну и т.д и т.п.
  • Помимо лица, даже при установке Модели ip-adapter-plus-face_sd15, будет браться стиль и окружение - что в свою очередь будет приводить не только к замене лица, но и изменению всей картины.

Рекомендуемые настройки исходя из тестов:

  • Семплер  DPM++ 2M Karras
  • CFG Scale от 2 до 7 (желательно тестить эти два крайних значения)
  • Denoising strength 0.5
  • Control Weight в самом IP-Adapter от 0.5 до 1

Исходники

Референс лица - выделяем только лицо photon_v1-empty-3-Time_20231029114847
Дополнительный тест Control weight - влияние на заменялки лица при условии совместного и раздельного их применения

FaceSwapLab, ReActor и IP-Adapter
по отдельности и вместе

Это лишь небольшое тестирование, выводы делайте сами.

Добавить комментарий