Составление правильного запроса – это главная задача, которую ставит перед собой пользователь любой нейронной сети. Это может вызвать некоторое затруднение у новичков, когда нужно дать задание нейросети, но не знаешь, как это правильно сделать.
Я расскажу о том, как я составляю текстовые запросы, и постараюсь как можно подробнее объяснить алгоритм, с помощью которого любой пользователь сможет легко взаимодействовать с любой нейросетью.
Давайте для начала разберемся, что в первую очередь влияет на конечный результат при генерации помимо текстового запроса.
Seed (источник).
Стартовая точка, с которой нейросеть впоследствии формирует изображение. По умолчанию установлен параметр «случайный», который позволяет достигать разных результатов при одном и том же запросе. Если вы используете конкретное числовое значение сида, то даже при изменении запроса композиция картинки останется схожей. Всего сидов около 16 миллиардов.
Sampler (сэмплер).
Инструмент, который позволяет влиять на результат генерации. С разными сэмплерами изображение генерируется за разное количество шагов. Как работают сэмплеры? Можно посмотреть здесь.
Steps (шаги) .
В процессе рендеринга сцены, вы можете указать нейросети любое количество шагов, которые она должна выполнить. Большинство пользователей обычно выбирают 20-25 шагов, но есть и те, кому нужно больше, до 50 шагов. Это зависит от ваших целей и требований к качеству изображения.
CFG (Classifier Free Guidance).
Параметр определяет, насколько свободно нейронная сеть может интерпретировать запрос. По умолчанию установлено значение 7, что означает, что ИИ самостоятельно додумает половину. Если значение меньше 6, то нейронная сеть возьмет дело в свои руки. При значении 16 ИИ полностью учтет ваш запрос без своих дополнений.
Resolution (разрешение).
Разрешение изображения, которое должно быть на выходе рендера. Для моделей SD 1.5 значение по умолчанию составляет 512 пикселей. Модели SDXL обычно обучаются на разрешении 1024. Конечно, вы можете поэкспериментировать с изменением этого значения, но результат вряд ли будет удовлетворительным. Например, при увеличении разрешения объект просто дублируется в разных зонах сцены.
Расстановка слов в запросе.
Нейросеть придает больший вес первым словам в запросе, но может пропустить то, что указано в конце. Вы можете изменить порядок слов в запросе и получить неожиданные и интересные результаты.
Помните, что чем подробнее и понятнее вы опишете свои пожелания для нейросети, тем выше вероятность получить изображение, которое вам понравится.
Содержание правильной текстовой подсказки: тема,основа, стиль, художник (если нужно следование стилю какого либо известного художника), разрешение, уточнение деталей, цвета, освещение
Совсем не обязательно использовать все эти параметры – это подсказка рекомендация, какие параметры можно включить в запрос для генерации изображения .
Для генерации примеров я буду использовать Fooocus v2, модель realismEngineSDXL_v20 и семплер DPM++ 2M Karas SDE с режимом Quality, Sampling Steps: 60.
Давайте начнем, наверное, с самой распространенной ошибки новичков - неправильной формулировки. По крайней мере, я говорю о тех случаях, с которыми сталкивался непосредственно.
Вы устанавливаете и запускаете нейросеть, предвкушая результат, и пишете a cat «котик». Вы ожидаете чего-то особенного. Но проходит несколько томительных секунд или минут ожидания, и вдруг, увы, разочарование – вы представляли в голове и хотели как результат увидеть серьезного кота в доспехах, а получился какой-то невзрачный персонаж на фоне зеленой травки или ленивый котяра у миски в ожидании вкусняшек от любимого хозяина. Самая большая ошибка новичка – недостаточное описание.
Помните, что слишком сжатый запрос может привести к большому количеству вариантов ответа от искусственного интеллекта. Поэтому всегда стоит задавать уточняющие запросы.
Например, что это за котик, какого цвета его шерсть и глаза, какой породы этот котик, что он делает, куда бежит или где сидит, где находится этот котик.
Нейросети не умеют читать наши мысли и не могут выдать вам желаемый результат с крайне скудным запросом без конкретных указаний, чего вы хотите. Чтобы подсказать, что, где и как рисовать, мы должны создать максимально точный запрос.
И когда мы вводим запрос "a cat", естественно, получаем такой результат (ниже). Просили кота, получайте, и все потому, что каждая модель, хоть и обучается на разных референсных изображениях, но кот он и в Африке кот. Поэтому по такому простому запросу она рисует то, что хорошо умеет и знает, но не более.
И сколько бы мы ни нажимали кнопку «Generate» с запросом «a cat», мы будем получать примерно одинаковых кошек с небольшой разницей в позе, окружении, цвете глаз и меха. Но нам же нужен другой кот, необычный.
Поэтому давайте скажем нейросети, чего конкретно мы от нее хотим.
Составляем запрос:
персонаж мультфильма, рыжий кот в сапогах, меч в лапах, сапоги, шляпа с пером, в старом замке
( cartoon character, ginger cat in boots, sword in paws, boots, hat with feather, in an old castle )
Ну вот, уже теплее. Неправда ли?
Для большинства новичков этого в принципе будет достаточно, но нам нужно что-то большее, интересное.
Например, нам не нужен мультяшный котик, нам нужен реалистичный кот в кинематографичном стиле. Соответственно, нам нужно дать понять нейросети, чего мы хотим.
Поэтому, к нашему предыдущему запросу, нужно добавить то, что мы хотим увидеть. Мы с вами хотим реалистичного кота, поэтому добавляем ключевые слова: cinematic, epic realistic и смотрим, что у нас получится.
Еще один важный момент, который следует учесть. То, какую модель вы используете, т.к она может сильно повлиять на генерируемое изображение. К сожалению, я не могу дать конкретных рекомендаций, так как требования и предпочтения у всех разные. Поэтому вам лучше самим опробовать разные модели и поэкспериментировать.
Если мы добавим к предыдущему запросу слово "oil painting" и исключим запросы "cinematic" и "epic realistic", то получим вот такого рисованного кота:
А этим можно похвастаться перед друзьями, показывая его, насколько у вас руки из нужного места растут и что вы его сами вырезали :-)
В некоторых случаях нейросеть может быть не очень послушной и генерировать все, что угодно, кроме того, что нужно вам. Если она не хочет рисовать вам кота вырезанного из бумаги, вы можете заставить ее, увеличив вес запроса (paper kirigami:1.3). Просто выделите нужный запрос и удерживайте клавишу ctrl. С помощью кнопки стрелок вверх или вниз отрегулируйте вес.
Ключевых запросов, которые сильно влияют на изображение, на самом деле очень много, и об этом можно долго говорить, перечисляя их все.
При создании изображения вы можете столкнуться с проблемой размещения объектов разных размеров а так же проблемой масштаба изображения. Существует несколько приемов управления, но я расскажу о том, которым пользуюсь сам.
Чтобы дать понять нейросети, как позиционировать и какого размера должен быть объект на изображении, достаточно добавить в запрос один из подходящих вариантов.
Не забывайте о разрешении изображения и соотношении сторон. Часто люди пытаются уместить объект в полный рост в 512*512 пикселей, но у них это не получается или получается не то, что нужно. Или наоборот, пытаются поместить достаточно большой в ширину объект, который будет уезжать за границы изображения, на 896*1152 пикселей. Не выставляйте нестандартные разрешения и соотношения сторон, потому что столкнетесь с искажением изображения.
Если вас все-же настигла эта проблема, в первую очередь попробуйте изменить разрешение и соотношение сторон изображения, прежде чем долго и нудно перебирать свой запрос в попытках исправить ситуацию.
В процессе работы с нейросетями, вы, вероятно, столкнетесь с запросами, которые будут содержать такие имена, как, например, Greg Rutkovski. Да, это тот самый Грег Рутковски, польский художник, известный своими работами в среде фанатов вселенной «Dungeons & Dragons», а также игр «Magic: The Gathering».
И если мы будем указывать в запросе art by Greg Rutkowski или имена других художников, то нейросеть будет пытаться «сплагиатить» идеи из их творчества. Я думаю, вам будет интересно посмотреть, что из этого получается. Вот ссылка на художников которых нейросети знают в лицо.
Также в запросе мы можем попробовать указать Artstation. Если вы не знаете, это галерея и биржа работ профессиональных художников, дизайнеров и иллюстраторов. Я этим запросом для себя ничего интересного не открыл но вам стоит попробовать, вдруг получится.
Далее, чтобы попробовать добиться нужного высокого качества, помимо выбора разрешения повыше, 1024*1024, мы в запросе попробуем добавить токены которые влияют на качество изображения. Добавим к нашему запросу ключевые слова: высокая детализация, четкий фокус (highly detailed, sharp focus). Еще при работе с SDXL моделями очень часто помогает ultra contrast, изображения получаются не такими мыльными.
После этих токенов наш рыцарь кот преобразился и приобрел новые детали. Рекомендую всегда добавлять что-то или все из этой категории, так как это часто оказывает значительное влияние на итоговый результат.
Чего еще не хватает нашему котику. А давайте попробуем его переодеть в латы и перекрасим их в другой цвет, дописав токен iridescent gold armor.
Ну, не совсем конечно латы, но как бы то ни было, вы видите, как изменилось изображение. Все, что связано с цветом, оказывает сильное влияние на изображение.
Любой фотограф знает, что освещение играет ключевую роль в процессе съемки. Добавление токенов с описанием освещения так же может полностью изменить картину.
Наше изображение хоть и выглядит неплохо но не идеально по свету и теням. Давайте добавим рефлексы, тени, лучи солнца, используя токены realistic light, reflections, shadows, ray of light (sun).
Я думаю, вы заметили, добавилось немного света, местами тени подправились но это потому, что изначально изображение получилось неплохим. Не стоит пренебрегать этими токенами при работе с изображениями.
На случай если вам мало цветов, мало шерсти и вообще всего мало, тоже имеется помощник.
Это так называемые веса, и в начале статьи я немного упомянул о них. Сейчас мы поговорим немного подробнее. С их помощью вы можете изменять важность ключевого слова с помощью синтаксиса. По умолчанию значимость везде одинаковая, но если вы установите значение выше 1, то важность увеличится.
Давайте возьмем для примера любой запрос. Девушку стоящую на улице рядом с лошадью.
Девушка вот она, а лошадь где то шарахается и позировать отказывается.
Теперь давайте щёлкнем кнутом на "arabian horse in the background" до значения 1.1.
Маловато. Нужно еще. Ударим сильнее, аж на 1.3
И вуаля, первая испугалась и убежала, зато в кадре появилась более раскрепощенная животинка.
Увеличение веса (arabian horse in the background:1.3) приводит к появлению на изображении лошади. Чем больше значимость токена, тем больше нейросеть попытается его использовать на изображении. Это работает и в обратную сторону – можно уменьшить значимость слова.
Ну и последний пункт касательно весов.
В процессе поиска вдохновения в интернетах вы в очередной раз просматривая чужие промпты увидите в них различного вида скобки. Это своеобразная и жутко неудобная альтернатива способу выше – использование () для увеличения веса токена или [] для уменьшения. Круглые скобки умножают на 1,1, квадратные скобки на 0,9 и вы можете использовать несколько скобок для увеличения или уменьшения веса.
- () — увеличение веса промта. Запись без каких-либо коэффициентов усилит вес в 1,1 раза.
- [] — квадратные скобки, которые используются для ослабления воздействия ключевых слов или удаления нежелательных объектов, появляющихся во время генерации изображений.
- {} — фигурные скобки, в которых выбор между словами делается случайно. {white fur | yellow fur}. Используется в основном для добавления разнообразия изображению.
Не вижу смысла описывать его дальше потому как это очень долгий способ и не очень удобный.
Все-же выделенное нужное слово и зажатая клавиша ctrl+стрелки вверх\вниз намного удобней.
Прежде чем перейти к заключительной части, хотелось бы отметить, что нейросети могут успешно обрабатывать смешанные запросы. Часто, комбинируя два стиля, или два совершенно разных запроса на разные темы которые кажутся совершенно несовместимыми, дают настолько интересный результат, который не был бы достигнут за огромное количество времени.
Так же миксовать можно посредством составления промпта с использованием ключей.
Генерируем картинку и когда она готова указываем ключ
fantasy [cat: dragon: 0.5]
[КЛЮЧ1:КЛЮЧ2:ВЕС]
Вес – это значение от 0 до 1, которое показывает, насколько важен первый ключ. Если мы рассмотрим пример кота-дракона, то, установив вес 0,5, мы получим генерацию кота до середины и далее будет рисоваться дракон. С помощью этого параметра мы можем отрегулировать преобладание одного над другим.
Простой способ — это запрос типа anthropomorphic (dragon:1.3) cat
Основные моменты по позитивным запросам мы рассмотрели, думаю стоит уделить внимание и негативным запросам, ведь они тоже очень важны и способны избавить вас от траты времени впустую.
Прописывая негативные токены, можно управлять тем, какие элементы изображения будут генерироваться а какие нет. Вместо обычного промта, который мы используем для создания – представьте, что мы хотим исключить определенные элементы из изображения. Это могут быть не только предметы или части изображения, но и художники, стили или другие нежелательные для вас атрибуты.
Использование негативного промта необязательно. Но по наблюдениям, негативные подсказки в большинстве случаев улучшают изображение и не вредят ему.
Есть огромное количество негативных промптов, их вы можете найти в сети. Я поделюсь с вами теми, которыми пользуюсь сам.
octopus, squid, tentacles, snake - помогает исправить пальцы на руках
mutation, mutated, amputation - убирает различные мутации, ампутации
blurry - убирает размытость изображения
cartoon, 3d, comic - убирает эффект нарисованного изображения
watermark, logo, text - убирает надписи, водяные знаки, текст
nfsw, naked, nude - убирает наготу из генерации при условии, что модель содержит соответствующий контент
Универсальный негативный промпт:
(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
Промпт для создания аниме:
(bad:0), (comic:0), (cropped:0), (error:0), (extra:0), (low:0), (lowres:0), (speech:0), (worst:0) Steps: 32, Sampler: Euler, CFG scale: 10.5, Clip skip: 2
Промпт для фотореалистичных изображений:
cartoon, black and white photo, disfigured, kitsch, ugly, oversaturated, grain, low-res, Deformed, blurry, bad anatomy, poorly drawn face, mutation, mutated, extra limb, poorly drawn hands, missing limb, blurry, floating limbs, disconnected limbs, malformed hands, blur, out of focus, long neck, long body, disgusting, poorly drawn, childish, mutilated, mangled, old, surreal
В процессе использования нейросетей вы, вероятно, дополните или отредактируете основные наборы промптов под свои нужды, а в начале можете пользоваться уже проверенными.
И вот еще несколько ссылок на профильные ресурсы, которые, я думаю, помогут вам в написании правильных промптов.
Уфф. Думаю на этом можно и нужно закончить. Получилось много.
Последний совет по промптам-запросам.
Начинайте с простых изображений не перегруженных запросами, достаточно использовать короткие подсказки, а уже добавлять и перестраивать запрос нужно в случае, если не получается добиться нужного вам результата.
Если вы все еще не можете найти свой идеальный Prompt для изображения, не стоит отчаиваться. Вкладка img2img в stable diffusion или вкладка Inpaint or Outpaint - Method - Modify content в Fooocus дает возможность перерисовки отдельных частей картинки и исправления деталей, которые вам не нравятся, и это может стать вашим спасением.
Я с вами прощаюсь. Очень надеюсь, что весь этот материал будет для вас полезным. Спасибо за то, что читали.
Ну и конечно же, если вам понравилась эта статья, буду рад вашим подпискам, комментариям и лайкам. Недавно я запустил Discord-канал и постараюсь поддерживать его насколько возможно, там вы сможете не только следить за новостями, но и общаться, делиться опытом и приобретать новые знания о нейросетях. Чтобы всегда быть в курсе моих новых материалов, подписывайтесь на мой Boosty, Telegram-канал и страницу "ВКонтакте". Пока что нас немного, но я надеюсь, что с течением времени сообщество станет больше. Это станет отличной мотивацией для меня активно работать и над другими социальными сетями.