Как вписать человека в любое фото с помощью Stable Diffusion и Automatic1111
Недавно участвовал в движухе, где нужно было на реальное фото наложить сгенерированного человека: реального или нет — не важно. Многие начали спрашивать в чате, как это сделать, и вот, наконец, у меня дошли руки до гайда.
В течение конкурса я изобрел интересный пайплайн, который ускорил процесс раз так в десять по сравнению с банальным скетчингом, а также позволил достичь правильных пропорций на фотографии и избежать большинства артефактов, так и норовящих залезть к нам в генерацию.
Подготавливаем необходимое
Также необходимо зарегаться на сервисе Avaturn.me — в нем мы создадим виртуального аватара того человека, которого будем добавлять в окружение на фотографии.
Для того, чтобы добавить персонажа, вам будет нужно обучить модель на его фотографиях, и тогда вы сможете генерировать его в любом образе. Я натренировал модель на изображениях девушки, поэтому буду показывать на ее примере. Вы же можете как последовать моему примеру, так и взять готовое решение, к примеру, LORA или Embeddiong Кары Делевинь.
Также заранее подготовьте сами фотографии. Для этого уменьшите их разрешение для комфортной и быстрой работы, иначе нейросеть будет слишком долго рендерить картинку, и вы успеете сделать меньше попыток и провести мало экспериментов. На постобработке вы сможете вернуть разрешение апскейлом картинки, поэтому советую уменьшить его на первых этапах.
К тому же сам персонаж лучше генерируется на небольших показателях ширины и высоты фото, поэтому учитывайте это.
Перейдем к практике
Итак, у вас есть фотографии, куда необходимо добавить персонажа — что дальше, спросите вы? Дальше нам нужно создать виртуального аватара, которого мы затем наложим поверх фотки.
Переходим на сайт Avaturn.me и загружаем в него 3 фотографии вашего лица, сделанные с разных углов. Жмем Upload photos и загружаем.
Собственно, вот требования к фотографиям от самого сервиса.
После недолгих манипуляций вы получите своего 3D-аватара, которого потом можно выгрузить в удобном формате и анимировать в блендере или синьке. Но нам будет достаточно браузера и окна предпросмотра.
В редакторе можно и шмотки подобрать, и цвет волос, и ракурс поменять, и позу задать — в общем, практически полная свобода действий. Далее просто скрините деваху и отправляете в сервис Erase.bg, где можно быстро убрать фон, не теряя в качестве и разрешении.
После проделанных манипуляций дружим девушку и фотографию, чтобы они никогда больше не разлучились. Для лучшего результата можете подрисовать тени в фотошопе, скорректировать освещение. Это ускорит процесс, однако нейронка и сама сможет догадаться, откуда светит солнце, поэтому запариваться не обязательно.
Также уточню, что одежда может быть практически любой, ведь в Stable Diffusion вы сможете в пару кликов как цвет заменить, так и фасон, ткань и материалы. Одежда легко заменяется, как и любая другая часть исходника.
Как только вас устроил результат по композиции и перспективе, вы можете переходить к самой ответственной части — Automatic1111.
Доводим все до ума в Stable Diffusion
Закидываем картинку и обрисовываем ее маской. Захватывайте область больше, чем занимает персонаж, чтобы и тени прорисовались, и контурный свет, и какие-то элементы одежды, волосы. В промпте обозначьте условия окружения и желаемую одежду.
Негативный промпт вставляем такой: (deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation
Остальные настройки выставляете так, как на скриншоте ниже. Сейчас мы будем подгонять объект под окружение, поэтому выбираем в разделе Inpaint area параметр Whole picture, а в поле Masked content ставим Original — так алгоритмы будут придерживаться оригинальной обстановки и пытаться подстроить под нее девушку.
Дальше нам нужно крутить и таскать ползунки, чтобы добиться вменяемого результата. Наша задача — получить вписанный в окружение объект, детали будем дорабатывать в конце. У меня сначала получалось что-то типа такого:
Будьте готовы к тому, что на данную задачу на первых этапах уйдут часы. Но постепенно вы отточите навыки и сможете щелкать такие задачки на раз-два!
Сам я, к слову, тренировался часов пять подряд, но зато сейчас минут за 20 смогу создать готовый силуэт. Есть, правда, одна маленькая проблемка — руки. Вот на их прорисовку у меня уйдет уже около часа. Такой вот вам инсайд. Но вы можете создать, к примеру, 10 генераций, и выбрать среди них наиболее удачную, где руки получились хорошо. Для этого я и советовал уменьшить разрешение, эксперименты — наше все!
Как только общий силуэт вас устроит, вы можете переходить к доработке конкретных участков: рук, лица, обуви и элементов одежды. Выделяете маской желаемую область и меняете параметр Inpaint area на Only masked.
После долгих попыток я получил результат, до которого я сам не смог докопаться. Скорректировал цвета в Photoshop, наложил некоторые эффекты и увеличил разрешение через встроенные в Automatic1111 апскейлеры, гайд про которые есть у меня в блоге.
Congratulations, вы справились!
Теперь кто-то умеет генерировать реального человека на фотографии с помощью лучшего фреймворка для Stable Diffusion на сегодняшний день. Буду рад обратной связи и вашим комментариям, а также приглашаю в свой телеграм чат, где отвечу на все вопросы касаемо SD.
Буду рад видеть вас в телеграм-канале, где я собираю лучшие гайды по Stable Diffusion. А если не найду, то пишу сам.