Разное

Синтаксис Stable Diffusion в Automatic1111 и NMKD

Самое время рассказать про синтаксис Prompt-инжиниринга, с помощью которого вы сможете улучшить генерацию изображений в Stable Diffusion и контролировать то, как именно алгоритмы нейросети обрабатывают текстовые подсказки.

Это далеко не уникальный и не всеобъемлющий пост - гораздо больше подробностей вы узнаете, изучив официальную документацию webui или NMKD. Я лишь хочу поделиться основами, чтобы вам было легче вкатиться в изучение нейронных сетей.

Приятного просмотра!

Синтаксис Stable Diffusion для генерации изображений в Automatic1111 и NMKD

Синтаксис Stable Diffusion для начинающих

Синтаксис Stаbale Diffusion, который вам нужно изучить в первую очередь — скобки. Для генерации изображений используются три вида скобок — (), [], {}.

Круглые скобки — самые простые в применении. Их добавляют, чтобы изменить вес выбранного токена, иначе говоря, усилить воздействие выделенного слова (фразы) на генерируемые изображения, либо смешать воедино несколько образов.

Например, написав (colored hair) без каких-либо коэффициентов, вы усилите эффект "цветных волос" в 1.1 раза. Если добавить больше скобок, сила воздействия дополнительно увеличится. Поэтому запись (((colored hair))) с значительной вероятностью поможет изменить цвет волос персонажа.
Девушка с цветными волосами - нейросетевой арг, сгенерированный с помощью Stable Diffusion 1.5

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

Квадратные скобки — [] — полная противоположность круглым. Они используются для ослабления воздействия ключевых слов или удаления нежелательных объектов, появляющихся во время генерации изображений.

Добавив [fern], вы уменьшите вероятность появления папоротника на картинке в 0.9 раз. Добавив больше квадратных скобок, можно полностью избавиться от папоротника.

Нюдс с симпатичной рыжеволосой девушкой, сгенерированный в нейросети Stable Diffusion

Есть ещё один способ использовать скобки в Stable Diffusion — указав коэффициент воздействия внутри или снаружи них.

Например, (white silk shirt:1.5) или (wreath on head:1.5) в полтора раза усилят вес фраз «белая шёлковая рубашка» («венок на голове»), чтобы выбранные элементы гарантированно появлялись на каждой генерируемой картинке. И наоборот, [white silk shirt:0.8] или [wreath on head:0.8] помогут удалить их с тела модели.

Девушка в белой рубашке на голое тело, позирующая на сером размытом студийном фоне - арт, сгенерированный с помощью нейросети Stable Diffusion

Воздействие коэффициентов снаружи скобок немного отличается от множителей внутри.

Во-первых, в NMKD они действуют сильнее, чем в Stable Diffusion webui.

Во-вторых, они отлично смешивают токены, позволяя тонко настраивать генерируемые изображения.

Как эту особенность можно использовать?

Установить коэффициент воздействия после круглых скобок в Stable Diffusion и использовать значения от 0.1 до 1.7, чтобы сместить вес токенов в ту или иную сторону. Если один токен преобладает над другим, можно использовать десятые, сотые и тысячные значения после точки, чтобы сгладить результат.

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

Нейросетевой портрет с девушкой в зелёном платье, позирующей в лесу. Для создания арта использовался синтаксис Prompt-инжиниринга для Stable Diffusion (Automatic1111)

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

В формате текстовой подсказки это выглядит следующим образом — (Triss Merigold)1.57, (Daisy Ridley)0.83.

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

Помимо смешивания, внешний синтаксис можно использовать для акцентирования ключевых слов, когда количество токенов превышает допустимый лимит. Не используя синтаксис Stable Diffusion, часть токенов получит больший вес, а часть и вовсе никак не проявится, но изменяя вес слов вручную, вы сможете это исправить!

Создание громоздких комбинаций - не лучший способ использования синтаксиса нейросети SD, но именно с помощью него можно создавать потрясающие работы, заметно отличающиеся от обычных результатов генерации изображений.
Магическое зелье с северным сиянием внутри. Для создания изображения использовался расширенный синтаксис запросов Stable Diffusion

Ещё один способ изменить силу воздействия отдельных слов или фраз в вашем промпте — использовать плюсы и минусы.

Добавив плюс после слова (фразы), можно усилить воздействие токена, добавив минус — ослабить его. Заключив часть промпта в круглые скобки, воздействовать плюсами или минусами можно сразу на несколько слов.

Пример использования: blue eyes + beauty eyes усиливает влияние двух соседних фраз, blue+ усиливает воздействие голубого цвета, (blue eyes)+ добавляет вес сразу всей фразе, (blue eyes)+++ значительно увеличивает вес токена.

Рыжеволосая девушка в откровенном зелёном платье позирует в летнем лесу на закате - эро арт, созданный в нейросети SD
Увеличивать вес слова (фразы) имеет смысл, если вы написали в текстовой подсказке green dress или orange dress, из-за чего у вас поменялся цвет глаз, но вы очень сильно хотите вернуть его обратно. Подобным образом можно написать (blue eyes)---, если написали blue dress и хотите задать другой цвет глаз.

Синтаксис Stable Diffusion в Automatic1111 и NMKD не ограничивается обычными скобками, плюсами и минусами.

Если сочетать слова подобным образом — {words|different words|more words}, SD сделает случайный выбор между словами, разделёнными символом | и заключёнными в {}. Это удобно, если вы хотите разнообразить результат. Использование сочетания [wordA:wordB:0.5] сделает так, что половину шагов будет генерироваться слово A, а во второй половине — слово B.

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

Синтаксис <> используется со специальными моделями нейросетей — LoRa — и применяется с целью активировать модель и задать степень её воздействия.

Эротическая фотосессия на природе - образец генерации, созданный с помощью синтаксиса Stable Diffusion и кастомной модели LoRa

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

Для активации модели достаточно прописать используемые ключевые слова (в упоминаемом примере это будут zelyonaya_kometa, comet, green comet и так далее), а также использовать специальный синтаксис — <lora:zelyonaya_kometa:1>.

Регулируя коэффициент после двоеточия (0.3, 0.5, 0.75, 1 и так далее), вы ослабите или усилите влияние модели, смешаете генерируемый результат со стилем выбранной версии SD или другими LoRa.

Синтаксис LoRa в Stable Diffusion можно использовать для передачи стиля, добавления образа или элементов окружения. Название, заключённое в <>, зависит от выбранной модели нейронной сети, как и типичные токены для её активации.

Чтобы научить модель передавать нужные детали, перед тренировкой в документе формата .txt нужно описать характерные ключевые слова и токены для быстрой имитации совокупного образа (стиля). В одной модели можно использовать как один, так и несколько особенных токенов (вроде ledivbelom или zelyonaya_kometa).
Леди в белом платье - арт в нейросети Stable Diffusion

Другие интересные варианты синтаксиса Stable Diffusion:

1) [to:when] — добавляет токен к подсказке после фиксированного количества шагов;
2) [from::when] — удаляет токен из подсказки после фиксированного количества шагов.

Пример: [fantasy:cyberpunk:16] landscape.

Сначала Stable Diffusion будет рисовать пейзаж в стиле фэнтези, но после 16 шагов нейросеть переключится на рисование киберпанк-ландшафта, продолжая с того места, где остановилась до этого.

Вот вам пример посложнее — fantasy landscape with a [mountain:lake:0.25] and [an oak:a christmas tree:0.75][ in foreground::0.6][ in background:0.25] [shoddy:masterful:0.5] (настройка сэмплера — 100 шагов).

Сначала нейросеть будет генерировать фэнтезийный пейзаж с горой и дубом на переднем плане, после 25 шагов переключится на пейзаж с озером и дубом, затем начнёт создавать новые сцены после 50, 60 и 75 шагов. Использование подобного синтаксиса будет полезно для получения разнообразных результатов и усложнения генерации.

Стоит учитывать, что синтаксис для генерации изображений может меняться в зависимости от GUI и используемой модели. Старые версии нейронных сетей могут не поддерживать часть новых функций, либо очень специфично интерпретировать команды, а отдельные популярные решения использовать нетипичный синтаксис вроде таких ~~~ символов.

Подробнее о синтаксисе Automatic можно прочитать здесь, о возможностях настройки промптов в NMKD — тут.

Как использовать синтаксис Stable Diffusion?

Чтобы использовать синтаксис Stable Diffusion, сначала вам необходимо установить программу с графическим интерфейсом, поддерживающую текстовый ввод с расширенными параметрами. Например, Automatic1111 или NMKD. После установки софта останется лишь ввести управляющие символы в поле Prompt (зону для добавления текстовых подсказок) и настроить их под собственные нужды.

Образцы настроек я уже приводил на странице выше.

Удачных экспериментов!

Понравилась статья?

Поддержите автора комментарием, донатом, подпиской на Telegram и другие страницы!

Фотограф, гик, ретушёр

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *