Да, это снова статья про нейросети, но подождите перелистывать, этого нет на просторах русскоязычного гугла (по крайне мере на первой странице).
Если кратко, то мои проекты связаны с разработкой обучающих программ под различные бизнес запросы (например, масштабирование), подробнее про проекты тут. На одном из таких проектов, появилась следующая задача:
Нужно создать персонажа с разными выражениями лица
Ну конечно, сразу же идем в одну из доступных нейросетей, к счастью, их сейчас развелось много. И после первого промта понимаем, что изображение каждый раз генерируются случайным образом. В целом, ничего удивительного, но изначально эта умная мысль мою голову не посетила.
Окей, вспоминаем про такую штуку, как сид, если очень простым языком - это случайное число используемое при генерации изображения. Указав его в новом промте можно получить практически идентичное изображение.
К сожалению, сид не помог, изображение действительно получается идентичным, но при добавлении эмоций оно либо не меняется совсем, либо становится совершенно другим.
Думаем дальше, и тут вспоминаем про то, что можно отправить ссылку на уже сгенерированное изображение и прописать обновленный промт. Но результат получился, мягко говоря, неожиданный …
Ответа на вопрос "почему так вышло?" я не нашел, хотя узнать было бы интересно.
И вот, прошло уже несколько часов за экспериментами, а все что было найдено никак не решало задачу. Когда оказываешься в подобной ситуации, есть только один выход:
Google it
Чего не хватило моему промту?
Как я уже сказал, на просторах русскоязычных интеренетов, ответа не нашлось. Поэтому пришлось обращаться к коллегам за бугром и этот канал на YT помог понять чего не хватало моему промту. От получения приемлемо-стабильного результата меня отделяли два важных момента:
Нужно использовать более одного изображения. Так модель собирает вашего персонажа из нескольких +- похожих изображений за счет чего повышается стабильность выдаваемого результата.
Нужно использовать тот же промт, который использовался для создания изначального изображения.
Сейчас перейдем к примерам и все станет понятно.
Инструкция создания персонажа
Процесс состоит из двух шагов:
Шаг 1. Генерация 2-3 изображений персонажа, которые +- похожи друг на друга, это можно назвать датасетом.
Шаг 2. Использование полученных изображений для генерации приемлемо-стабильного персонажа с различными выражениями лица.
Шаг 1. Подготовка датасета изображений
Для генерации первого изображения датасета, я использовал следующий промт:
photo of a regular 28 year old guy with short haircut, red hair colour, curly hair, blue eyes, dressed in a gray t-shirt, ultra realistic, face detailed
Для нашего проекта мы выбрали изображение №2. Теперь нужно сгенерировать еще хотя бы одно изображение с +- похожим лицом. Для этого, необходимо нажать кнопку повторной генерации "????" и так до тех пор, пока не получится желаемое количество похожих изображений.
Суммарно, я планировал использовать два изображения, поэтому мне осталось найти лишь еще одно. Это удалось сделать с третьей попытки. Ниже результаты.
Шаг 2. Генерируем персонажа с разными выражениями лица
Вот и настала самая интересная часть.
Сначала генерируем стабилизованное изображение персонажа. Добавляем в начало того же промта ссылки на выбранные изображения. Промт будет выглядеть примерно так:
https://cdn.discordapp.com/.../*.png https://cdn.discordapp.com/.../*.png photo of a regular 28 year old guy with short haircut, red hair colour, curly hair, blue eyes, dressed in a gray t-shirt, ultra realistic, face detailed
Для простоты восприятия основную часть ссылки заменил на /.../
. Самое главное, чтобы начало и конец ссылки были как в примере. И сразу после ссылок, через пробел, идет тот же самый промт. Результат ниже.
Да, мне повезло чуть меньше, и сами персонажи отличаются друг от друга, но после генерации всех изображений с эмоциями станет понятно, кого из низ выбрать.
Проделываем тоже самое но уже с эмоциями:
Улыбка. Добавляем к основному промту
smile on his face
https://cdn.discordapp.com/.../*.png https://cdn.discordapp.com/.../*.png photo of a regular 28 year old guy with smile on his face, short haircut, red hair colour, curly hair, blue eyes, dressed in a gray t-shirt, ultra realistic, face detailed
Счастливый. Добавляем к основному промту
an extremely happy
facehttps://cdn.discordapp.com/.../*.png https://cdn.discordapp.com/.../*.png photo of an extremely happy 28 year old guy with short haircut, red hair colour, curly hair, blue eyes, dressed in a gray t-shirt, ultra realistic, face detailed
Расстроенный. Добавляем к основному промту
an extremely upset, almost crying
facehttps://cdn.discordapp.com/.../*.png https://cdn.discordapp.com/.../*.png photo of an extremely upset, almost crying 28 year old guy with short haircut, red hair colour, curly hair, blue eyes, dressed in a gray t-shirt, ultra realistic, face detailedЗлой. Добавляем к основному промту
an extremely angry facehttps://cdn.discordapp.com/.../*.png https://cdn.discordapp.com/.../*.png photo of an extremely angry 28 year old guy with short haircut, red hair colour, curly hair, blue eyes, dressed in a gray t-shirt, ultra realistic, face detailed
Испуганный. Добавляем к основному промту
an extremely horrified facehttps://cdn.discordapp.com/.../*.png https://cdn.discordapp.com/.../*.png photo of an extremely horrified 28 year old guy with short haircut, red hair colour, curly hair, blue eyes, dressed in a gray t-shirt, ultra realistic, face detailed
Финальный результат поближе можно посмотреть на самом первом изображении статьи.
Прорисовка контуров лица и волос получилась достаточно стабильна. Соглашусь, если скажете что, результат получился не идеальный, но для целей проекта он более чем достаточный.
Если бы мне требовалось улучшить результат с такими же вводными, я бы прописал в явном виде освещение и фон, возможно из-за них скачет выбор оттенка волос и кожи персонажа.
Комментарии (4)
vagon333
03.04.2023 11:10+2Замечательно!
Пользуюсь MJ и тупил не зная, как переиспользовать существующую фотку для изменения эмоций, хотя именно это часто нужно для серии в рамках проекта.
Кстати, для поиска подходящих слов к Prompt сделал простой проект fartofart.com (не коммерция, не реклама), который помогает увидеть результат по ключевым словам.
7313
Просто для сравнения как это делается в SD
https://www.reddit.com/r/StableDiffusion/comments/1281iva/new_controlnet_face_model/