Издевательство над картинками. Орудие - нейросеть
Вот запускаю я однажды нейронку персонажей всяких, да дизайн погенерить, вбиваю промпт `split screen, multiple views, spear, cowboy shot` в попавшийся под руку чекпоинт Illustrious'a
и получаю
Это что ж получается, из случайного шума каким-то чудом родились сразу 2 картинки в одном изображении? Не, ну тут понятно, что промпт `split screen, multiple views` волшебный и позволяет генератору, поделив изображение попалам, одного персонажа разместить и тут и там, что называется, но ведь здесь буквально попиксельное совпадение. В общем, пытаюсь я как-то объяснить увиденное, в голове всплывают страшные термины вроде translational invariance и self-attention, но ясно одно - существует механизм "синхронизации" левой и правой половины генерируемого изображения. А за активацию этого механизма всякие `split screen`, да `before and after` как раз и отвечают.
На самом деле, тут ничего удивительного нет, учитывая то, какие данные были использованы для обучения. Но это аниме модели. Для того, чтобы повторить подобное на SDXL (и производных) надо писать что-то наподобие `diptych of two identical images` - диптих, это когда 2 изображения вместе, короче. Но эффект гораздо слабее - сам проверял.
Ладно, поехали дальше.
Эксперимент img2img inpaint
Короче, берём вот такое изображение:
Потом берём вот такую черно-белую маску:
И отправляем это всё в inpaint (для тех кто использует Forge UI - вкладка Inpaint upload, для тех кто использует ComfyUI - сами раберётесь, вам не привыкать) и прописываем вот такой промпт:
После недолгого ожидания получается:
Вот и выходит, что нейронка может перенести персонажа с одной стороны изображения на другую, при этом позволяет внести изменения. По сути, это попытка реконструировать исходное изображение через denoise trajectory - это как пытаться вынырнуть из глубины зашумлённого латентного пространства в нужной нам точке, где исходное изображение - это наш направляющий маяк. Вот только пока что реконструкция вышла так себе - цвета плывут, да ещё и отзеркалено. Надо добавить последний ингредиет - ControlNet Reference.
Эксперимент img2img inpaint + ControlNet Reference.
Те же самые настройки что и в предыдущем примере, но теперь ещё добавляется вот это изображение в качестве условия для генерации - controlNet reference_only, короче. Не буду долго объяснять.
Меняем промпт на 'bamboo hat' и одеваем на неё смешную шапку:
Давайте-ка я ещё раз поясню - изображение слева - это полная реконструкция. Приглядевшись можно заметить, что некоторые датали поехали или были неправильно восстановлены. Мы буквально попросили нейросеть "Перерисуй исходное изображение, но нарисуй её в бамбуковой шляпе". Или "убери копьё и дай ей в руку книгу":
А если не включать эффект контрольного изображения слишком рано, то можно внести гораздо более существенное изменение:
Отдельное замечение про Flux.1 Kontext. Совсем недавно вышедшая модель, которая позволяет проделывать подобные манипуляции с изображением, но только лучше и качественнее. Вот только она гораздо тяжелее и, скажем так, несколько ограничена в промптах. Можете попробовать на официальном сайте и сравнить. Вот пример того, что может Flux.1 Kontext:
Ладно, возвращаемся к моему способу.
Больше примеров (догадайтесь какой был промпт)
Кто хочет попробовать вот вам ComfyUI workflow. Лучше всего работает с аниме моделями типа Illustrious или NoobAI.
Задавайте вопросы, может отвечу